summaryrefslogtreecommitdiff
path: root/lib/solidus_subscriptions
diff options
context:
space:
mode:
authorBrendan Deere <brendangdeere@gmail.com>2016-10-05 14:45:44 -0700
committerGitHub <noreply@github.com>2016-10-05 14:45:44 -0700
commit7a5caa194a591b71c4b0013afe331c6a763be773 (patch)
tree8cc564ee9e5171c3d357f181c38f2b88df8d08eb /lib/solidus_subscriptions
parent5c971a4463dfc71d04f0c92696f04d330b5259e4 (diff)
parente00c9c5ffa8ece1720bd8f8c7b8de8f6322c1388 (diff)
Merge pull request #80 from brendandeere/config_minimum_cancellation_notice
Config minimum cancellation notice
Diffstat (limited to 'lib/solidus_subscriptions')
-rw-r--r--lib/solidus_subscriptions/config.rb2
-rw-r--r--lib/solidus_subscriptions/processor.rb8
-rw-r--r--lib/solidus_subscriptions/testing_support/factories/subscription_factory.rb5
3 files changed, 14 insertions, 1 deletions
diff --git a/lib/solidus_subscriptions/config.rb b/lib/solidus_subscriptions/config.rb
index d8f89ea..7eabfab 100644
--- a/lib/solidus_subscriptions/config.rb
+++ b/lib/solidus_subscriptions/config.rb
@@ -5,6 +5,8 @@ module SolidusSubscriptions
# retrying to fulfil it
mattr_accessor(:reprocessing_interval) { 1.day }
+ mattr_accessor(:minimum_cancellation_notice) { 1.day }
+
# Which queue is responsible for processing subscriptions
mattr_accessor(:processing_queue) { :default }
diff --git a/lib/solidus_subscriptions/processor.rb b/lib/solidus_subscriptions/processor.rb
index 41796f9..c035ecf 100644
--- a/lib/solidus_subscriptions/processor.rb
+++ b/lib/solidus_subscriptions/processor.rb
@@ -80,7 +80,13 @@ module SolidusSubscriptions
end
def new_installments(user)
- subscriptions_by_id.fetch(user.id, []).map { |sub| sub.installments.create! }
+ subscriptions_by_id.fetch(user.id, []).map do |sub|
+ ActiveRecord::Base.transaction do
+ sub.advance_actionable_date
+ sub.cancel! if sub.pending_cancellation?
+ sub.installments.create!
+ end
+ end
end
def user_ids
diff --git a/lib/solidus_subscriptions/testing_support/factories/subscription_factory.rb b/lib/solidus_subscriptions/testing_support/factories/subscription_factory.rb
index 92ecb77..e4f3cdc 100644
--- a/lib/solidus_subscriptions/testing_support/factories/subscription_factory.rb
+++ b/lib/solidus_subscriptions/testing_support/factories/subscription_factory.rb
@@ -23,6 +23,11 @@ FactoryGirl.define do
actionable_date { Time.zone.now.tomorrow }
end
+ trait(:pending_cancellation) do
+ actionable
+ state { 'pending_cancellation' }
+ end
+
trait(:canceled) { state 'canceled' }
trait(:inactive) { state 'inactive' }
end