summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Desantis <desa.alessandro@gmail.com>2020-10-07 16:02:21 +0200
committerAlessandro Desantis <desa.alessandro@gmail.com>2020-10-08 13:34:54 +0200
commit2540d1fe9123c032a8094047cd4808d508bdadd2 (patch)
tree2f07bf39c45688938d05f8c705b25b0ec777e4db
parent6cfe54f911648e46da4e65face658ce4f91c491f (diff)
Generate guest_token for all subscriptions
-rw-r--r--app/models/solidus_subscriptions/subscription.rb8
-rw-r--r--db/migrate/20201007140032_add_guest_token_to_subscriptions.rb6
-rw-r--r--spec/models/solidus_subscriptions/subscription_spec.rb6
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