diff options
author | Alessandro Desantis <desa.alessandro@gmail.com> | 2020-10-07 16:02:21 +0200 |
---|---|---|
committer | Alessandro Desantis <desa.alessandro@gmail.com> | 2020-10-08 13:34:54 +0200 |
commit | 2540d1fe9123c032a8094047cd4808d508bdadd2 (patch) | |
tree | 2f07bf39c45688938d05f8c705b25b0ec777e4db | |
parent | 6cfe54f911648e46da4e65face658ce4f91c491f (diff) |
Generate guest_token for all subscriptions
-rw-r--r-- | app/models/solidus_subscriptions/subscription.rb | 8 | ||||
-rw-r--r-- | db/migrate/20201007140032_add_guest_token_to_subscriptions.rb | 6 | ||||
-rw-r--r-- | spec/models/solidus_subscriptions/subscription_spec.rb | 6 |
3 files changed, 20 insertions, 0 deletions
diff --git a/app/models/solidus_subscriptions/subscription.rb b/app/models/solidus_subscriptions/subscription.rb index 0c41604..d3dd2f5 100644 --- a/app/models/solidus_subscriptions/subscription.rb +++ b/app/models/solidus_subscriptions/subscription.rb @@ -31,6 +31,7 @@ module SolidusSubscriptions accepts_nested_attributes_for :line_items, allow_destroy: true, reject_if: ->(p) { p[:quantity].blank? } before_validation :set_payment_method + before_create :generate_guest_token after_create :emit_event_for_creation before_update :update_actionable_date_if_interval_changed after_update :emit_events_for_update @@ -275,6 +276,13 @@ module SolidusSubscriptions end end + def generate_guest_token + self.guest_token ||= loop do + random_token = SecureRandom.urlsafe_base64(nil, false) + break random_token unless self.class.exists?(guest_token: random_token) + end + end + def emit_event_for_creation ::Spree::Event.fire( 'solidus_subscriptions.subscription_created', diff --git a/db/migrate/20201007140032_add_guest_token_to_subscriptions.rb b/db/migrate/20201007140032_add_guest_token_to_subscriptions.rb new file mode 100644 index 0000000..8ed2ecb --- /dev/null +++ b/db/migrate/20201007140032_add_guest_token_to_subscriptions.rb @@ -0,0 +1,6 @@ +class AddGuestTokenToSubscriptions < ActiveRecord::Migration[5.2] + def change + add_column :solidus_subscriptions_subscriptions, :guest_token, :string + add_index :solidus_subscriptions_subscriptions, :guest_token, unique: true + end +end diff --git a/spec/models/solidus_subscriptions/subscription_spec.rb b/spec/models/solidus_subscriptions/subscription_spec.rb index 800c713..60a37e6 100644 --- a/spec/models/solidus_subscriptions/subscription_spec.rb +++ b/spec/models/solidus_subscriptions/subscription_spec.rb @@ -20,6 +20,12 @@ RSpec.describe SolidusSubscriptions::Subscription, type: :model do subscription: subscription, ) end + + it 'generates a guest token' do + subscription = create(:subscription) + + expect(subscription.guest_token).to be_present + end end describe 'updating a subscription' do |