summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/solidus_subscriptions/api/v1/subscriptions_controller.rb2
-rw-r--r--app/jobs/solidus_subscriptions/process_installments_job.rb2
-rw-r--r--app/models/solidus_subscriptions/installment.rb4
-rw-r--r--app/models/solidus_subscriptions/subscription.rb10
-rw-r--r--app/services/solidus_subscriptions/checkout.rb8
-rw-r--r--app/services/solidus_subscriptions/subscription_line_item_builder.rb2
-rw-r--r--lib/generators/solidus_subscriptions/install/templates/initializer.rb4
-rw-r--r--lib/solidus_subscriptions.rb13
-rw-r--r--lib/solidus_subscriptions/config.rb56
-rw-r--r--lib/solidus_subscriptions/configuration.rb72
-rw-r--r--lib/solidus_subscriptions/engine.rb2
-rw-r--r--lib/solidus_subscriptions/permitted_attributes.rb4
-rw-r--r--spec/models/solidus_subscriptions/installment_spec.rb14
-rw-r--r--spec/models/solidus_subscriptions/subscription_spec.rb12
-rw-r--r--spec/services/solidus_subscriptions/checkout_spec.rb6
15 files changed, 118 insertions, 93 deletions
diff --git a/app/controllers/solidus_subscriptions/api/v1/subscriptions_controller.rb b/app/controllers/solidus_subscriptions/api/v1/subscriptions_controller.rb
index 8db616d..8c37c25 100644
--- a/app/controllers/solidus_subscriptions/api/v1/subscriptions_controller.rb
+++ b/app/controllers/solidus_subscriptions/api/v1/subscriptions_controller.rb
@@ -45,6 +45,6 @@ class SolidusSubscriptions::Api::V1::SubscriptionsController < Spree::Api::BaseC
end
def line_item_attributes
- SolidusSubscriptions::Config.subscription_line_item_attributes - [:subscribable_id] + [:id]
+ SolidusSubscriptions.configuration.subscription_line_item_attributes - [:subscribable_id] + [:id]
end
end
diff --git a/app/jobs/solidus_subscriptions/process_installments_job.rb b/app/jobs/solidus_subscriptions/process_installments_job.rb
index ba54fa8..6048ee6 100644
--- a/app/jobs/solidus_subscriptions/process_installments_job.rb
+++ b/app/jobs/solidus_subscriptions/process_installments_job.rb
@@ -3,7 +3,7 @@
module SolidusSubscriptions
class ProcessInstallmentsJob < ActiveJob::Base
- queue_as Config.processing_queue
+ queue_as SolidusSubscriptions.configuration.processing_queue
# Process a collection of installments
#
diff --git a/app/models/solidus_subscriptions/installment.rb b/app/models/solidus_subscriptions/installment.rb
index 1cad63e..c5b4f6c 100644
--- a/app/models/solidus_subscriptions/installment.rb
+++ b/app/models/solidus_subscriptions/installment.rb
@@ -126,8 +126,8 @@ module SolidusSubscriptions
end
def next_actionable_date
- return if Config.reprocessing_interval.nil?
- (DateTime.current + Config.reprocessing_interval).beginning_of_minute
+ return if SolidusSubscriptions.configuration.reprocessing_interval.nil?
+ (DateTime.current + SolidusSubscriptions.configuration.reprocessing_interval).beginning_of_minute
end
end
end
diff --git a/app/models/solidus_subscriptions/subscription.rb b/app/models/solidus_subscriptions/subscription.rb
index 9839773..3eb449a 100644
--- a/app/models/solidus_subscriptions/subscription.rb
+++ b/app/models/solidus_subscriptions/subscription.rb
@@ -133,7 +133,7 @@ module SolidusSubscriptions
# pending cancellation will still be processed.
def can_be_canceled?
return true if actionable_date.nil?
- (actionable_date - Config.minimum_cancellation_notice).future?
+ (actionable_date - SolidusSubscriptions.configuration.minimum_cancellation_notice).future?
end
def skip(check_skip_limits: true)
@@ -226,17 +226,17 @@ module SolidusSubscriptions
private
def check_successive_skips_exceeded
- return unless Config.maximum_successive_skips
+ return unless SolidusSubscriptions.configuration.maximum_successive_skips
- if successive_skip_count >= Config.maximum_successive_skips
+ if successive_skip_count >= SolidusSubscriptions.configuration.maximum_successive_skips
errors.add(:successive_skip_count, :exceeded)
end
end
def check_total_skips_exceeded
- return unless Config.maximum_total_skips
+ return unless SolidusSubscriptions.configuration.maximum_total_skips
- if skip_count >= Config.maximum_total_skips
+ if skip_count >= SolidusSubscriptions.configuration.maximum_total_skips
errors.add(:skip_count, :exceeded)
end
end
diff --git a/app/services/solidus_subscriptions/checkout.rb b/app/services/solidus_subscriptions/checkout.rb
index 3457435..244cb0b 100644
--- a/app/services/solidus_subscriptions/checkout.rb
+++ b/app/services/solidus_subscriptions/checkout.rb
@@ -31,13 +31,13 @@ module SolidusSubscriptions
return if installments.empty?
if checkout
- Config.success_dispatcher_class.new(installments, order).dispatch
+ SolidusSubscriptions.configuration.success_dispatcher_class.new(installments, order).dispatch
return order
end
# A new order will only have 1 payment that we created
if order.payments.any?(&:failed?)
- Config.payment_failed_dispatcher_class.new(installments, order).dispatch
+ SolidusSubscriptions.configuration.payment_failed_dispatcher_class.new(installments, order).dispatch
installments.clear
nil
end
@@ -45,7 +45,7 @@ module SolidusSubscriptions
# Any installments that failed to be processed will be reprocessed
unfulfilled_installments = installments.select(&:unfulfilled?)
if unfulfilled_installments.any?
- Config.failure_dispatcher_class.
+ SolidusSubscriptions.configuration.failure_dispatcher_class.
new(unfulfilled_installments, order).dispatch
end
end
@@ -100,7 +100,7 @@ module SolidusSubscriptions
# They will be reprocessed later
@installments -= unfulfilled_installments
if unfulfilled_installments.any?
- Config.out_of_stock_dispatcher_class.new(unfulfilled_installments).dispatch
+ SolidusSubscriptions.configuration.out_of_stock_dispatcher_class.new(unfulfilled_installments).dispatch
end
return if installments.empty?
diff --git a/app/services/solidus_subscriptions/subscription_line_item_builder.rb b/app/services/solidus_subscriptions/subscription_line_item_builder.rb
index 9dc0960..19660c4 100644
--- a/app/services/solidus_subscriptions/subscription_line_item_builder.rb
+++ b/app/services/solidus_subscriptions/subscription_line_item_builder.rb
@@ -14,7 +14,7 @@ module SolidusSubscriptions
def subscription_params
params.require(:subscription_line_item).permit(
- SolidusSubscriptions::Config.subscription_line_item_attributes
+ SolidusSubscriptions.configuration.subscription_line_item_attributes
)
end
end
diff --git a/lib/generators/solidus_subscriptions/install/templates/initializer.rb b/lib/generators/solidus_subscriptions/install/templates/initializer.rb
index 3de5182..987b922 100644
--- a/lib/generators/solidus_subscriptions/install/templates/initializer.rb
+++ b/lib/generators/solidus_subscriptions/install/templates/initializer.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-SolidusSubscriptions::Config.tap do |config|
+SolidusSubscriptions.configure do |config|
# These handlers are pluggable, however it is highly encouraged that
# you subclass from the the dispatcher you are replacing, and call
# `super` from within the #dispatch method (if you override it).
@@ -47,7 +47,7 @@ SolidusSubscriptions::Config.tap do |config|
# date of a subscription, set this:
#
# ```
- # SolidusSubscriptions::Config.subscription_line_item_attributes = [
+ # SolidusSubscriptions.configuration.subscription_line_item_attributes = [
# :quantity,
# :subscribable_id,
# :interval_length,
diff --git a/lib/solidus_subscriptions.rb b/lib/solidus_subscriptions.rb
index 69c7b7a..a6b2edf 100644
--- a/lib/solidus_subscriptions.rb
+++ b/lib/solidus_subscriptions.rb
@@ -6,6 +6,19 @@ require 'solidus_support'
require 'deface'
require 'state_machines'
+require 'solidus_subscriptions/configuration'
require 'solidus_subscriptions/ability'
require 'solidus_subscriptions/version'
require 'solidus_subscriptions/engine'
+
+module SolidusSubscriptions
+ class << self
+ def configure
+ yield configuration
+ end
+
+ def configuration
+ @configuration ||= Configuration.new
+ end
+ end
+end
diff --git a/lib/solidus_subscriptions/config.rb b/lib/solidus_subscriptions/config.rb
deleted file mode 100644
index 20ebd20..0000000
--- a/lib/solidus_subscriptions/config.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-module SolidusSubscriptions
- module Config
- class << self
- attr_writer :success_dispatcher_class
- def success_dispatcher_class
- @success_dispatcher_class ||= ::SolidusSubscriptions::SuccessDispatcher
- end
-
- attr_writer :failure_dispatcher_class
- def failure_dispatcher_class
- @failure_dispatcher_class ||= ::SolidusSubscriptions::FailureDispatcher
- end
-
- attr_writer :payment_failed_dispatcher_class
- def payment_failed_dispatcher_class
- @payment_failed_dispatcher_class ||= ::SolidusSubscriptions::PaymentFailedDispatcher
- end
-
- attr_writer :out_of_stock_dispatcher
- def out_of_stock_dispatcher_class
- @out_of_stock_dispatcher_class ||= ::SolidusSubscriptions::OutOfStockDispatcher
- end
- end
-
- mattr_accessor(:maximum_successive_skips) { 1 }
-
- mattr_accessor(:maximum_total_skips) { nil }
-
- mattr_accessor(:reprocessing_interval) { 1.day }
-
- mattr_accessor(:minimum_cancellation_notice) { 1.day }
-
- mattr_accessor(:processing_queue) { :default }
-
- mattr_accessor(:subscription_line_item_attributes) do
- [
- :quantity,
- :subscribable_id,
- :interval_length,
- :interval_units,
- :end_date,
- ]
- end
-
- mattr_accessor(:subscription_attributes) do
- [
- :interval_length,
- :interval_units,
- :end_date,
- :actionable_date,
- shipping_address_attributes: Spree::PermittedAttributes.address_attributes,
- billing_address_attributes: Spree::PermittedAttributes.address_attributes,
- ]
- end
- end
-end
diff --git a/lib/solidus_subscriptions/configuration.rb b/lib/solidus_subscriptions/configuration.rb
new file mode 100644
index 0000000..d128198
--- /dev/null
+++ b/lib/solidus_subscriptions/configuration.rb
@@ -0,0 +1,72 @@
+module SolidusSubscriptions
+ class Configuration
+ attr_writer :success_dispatcher_class
+ def success_dispatcher_class
+ @success_dispatcher_class ||= 'SolidusSubscriptions::SuccessDispatcher'
+ @success_dispatcher_class.constantize
+ end
+
+ attr_writer :failure_dispatcher_class
+ def failure_dispatcher_class
+ @failure_dispatcher_class ||= 'SolidusSubscriptions::FailureDispatcher'
+ @failure_dispatcher_class.constantize
+ end
+
+ attr_writer :payment_failed_dispatcher_class
+ def payment_failed_dispatcher_class
+ @payment_failed_dispatcher_class ||= 'SolidusSubscriptions::PaymentFailedDispatcher'
+ @payment_failed_dispatcher_class.constantize
+ end
+
+ attr_writer :out_of_stock_dispatcher
+ def out_of_stock_dispatcher_class
+ @out_of_stock_dispatcher_class ||= 'SolidusSubscriptions::OutOfStockDispatcher'
+ @out_of_stock_dispatcher_class.constantize
+ end
+
+ attr_writer :maximum_successive_skips
+ def maximum_successive_skips
+ @maximum_successive_skips ||= 1
+ end
+
+ attr_accessor :maximum_total_skips
+
+ attr_writer :reprocessing_interval
+ def reprocessing_interval
+ @reprocessing_interval ||= 1.day
+ end
+
+ attr_writer :minimum_cancellation_notice
+ def minimum_cancellation_notice
+ @minimum_cancellation_notice ||= 1.day
+ end
+
+ attr_writer :processing_queue
+ def processing_queue
+ @processing_queue ||= :default
+ end
+
+ attr_writer :subscription_line_item_attributes
+ def subscription_line_item_attributes
+ @subscription_line_item_attributes ||= [
+ :quantity,
+ :subscribable_id,
+ :interval_length,
+ :interval_units,
+ :end_date,
+ ]
+ end
+
+ attr_writer :subscription_attributes
+ def subscription_attributes
+ @subscription_attributes ||= [
+ :interval_length,
+ :interval_units,
+ :end_date,
+ :actionable_date,
+ shipping_address_attributes: Spree::PermittedAttributes.address_attributes,
+ billing_address_attributes: Spree::PermittedAttributes.address_attributes,
+ ]
+ end
+ end
+end
diff --git a/lib/solidus_subscriptions/engine.rb b/lib/solidus_subscriptions/engine.rb
index 8b5b083..0f18d95 100644
--- a/lib/solidus_subscriptions/engine.rb
+++ b/lib/solidus_subscriptions/engine.rb
@@ -4,7 +4,7 @@ require 'spree/core'
require 'solidus_subscriptions'
require 'solidus_subscriptions/permitted_attributes'
-require 'solidus_subscriptions/config'
+require 'solidus_subscriptions/configuration'
require 'solidus_subscriptions/processor'
module SolidusSubscriptions
diff --git a/lib/solidus_subscriptions/permitted_attributes.rb b/lib/solidus_subscriptions/permitted_attributes.rb
index d1ae5a1..f689e90 100644
--- a/lib/solidus_subscriptions/permitted_attributes.rb
+++ b/lib/solidus_subscriptions/permitted_attributes.rb
@@ -5,11 +5,11 @@ module SolidusSubscriptions
module PermittedAttributes
class << self
def subscription_line_item_attributes
- [Config.subscription_line_item_attributes]
+ [SolidusSubscriptions.configuration.subscription_line_item_attributes]
end
def subscription_attributes
- Config.subscription_attributes | [
+ SolidusSubscriptions.configuration.subscription_attributes | [
line_items_attributes: (subscription_line_item_attributes | [:id] - [:subscribable_id]),
]
end
diff --git a/spec/models/solidus_subscriptions/installment_spec.rb b/spec/models/solidus_subscriptions/installment_spec.rb
index f21909c..c09d949 100644
--- a/spec/models/solidus_subscriptions/installment_spec.rb
+++ b/spec/models/solidus_subscriptions/installment_spec.rb
@@ -18,7 +18,7 @@ RSpec.describe SolidusSubscriptions::Installment, type: :model do
subject { installment.out_of_stock }
let(:expected_date) do
- (DateTime.current + SolidusSubscriptions::Config.reprocessing_interval).beginning_of_minute
+ (DateTime.current + SolidusSubscriptions.configuration.reprocessing_interval).beginning_of_minute
end
it { is_expected.to be_a SolidusSubscriptions::InstallmentDetail }
@@ -70,7 +70,7 @@ RSpec.describe SolidusSubscriptions::Installment, type: :model do
let(:order) { create :order }
let(:expected_date) do
- (DateTime.current + SolidusSubscriptions::Config.reprocessing_interval).beginning_of_minute
+ (DateTime.current + SolidusSubscriptions.configuration.reprocessing_interval).beginning_of_minute
end
it { is_expected.to be_a SolidusSubscriptions::InstallmentDetail }
@@ -89,12 +89,8 @@ RSpec.describe SolidusSubscriptions::Installment, type: :model do
end
context 'the reprocessing interval is set to nil' do
- around do |e|
- interval, SolidusSubscriptions::Config.reprocessing_interval = [SolidusSubscriptions::Config.reprocessing_interval, nil]
-
- e.run
-
- SolidusSubscriptions::Config.reprocessing_interval = interval
+ before do
+ allow(SolidusSubscriptions.configuration).to receive_messages(reprocessing_interval: nil)
end
it 'does not advance the installment actionable_date' do
@@ -141,7 +137,7 @@ RSpec.describe SolidusSubscriptions::Installment, type: :model do
let(:order) { create :order }
let(:expected_date) do
- (DateTime.current + SolidusSubscriptions::Config.reprocessing_interval).beginning_of_minute
+ (DateTime.current + SolidusSubscriptions.configuration.reprocessing_interval).beginning_of_minute
end
it { is_expected.to be_a SolidusSubscriptions::InstallmentDetail }
diff --git a/spec/models/solidus_subscriptions/subscription_spec.rb b/spec/models/solidus_subscriptions/subscription_spec.rb
index e2e73d7..38b430c 100644
--- a/spec/models/solidus_subscriptions/subscription_spec.rb
+++ b/spec/models/solidus_subscriptions/subscription_spec.rb
@@ -91,16 +91,16 @@ RSpec.describe SolidusSubscriptions::Subscription, type: :model do
end
around do |e|
- successive_skip_limit = SolidusSubscriptions::Config.maximum_successive_skips
- total_skip_limit = SolidusSubscriptions::Config.maximum_total_skips
+ successive_skip_limit = SolidusSubscriptions.configuration.maximum_successive_skips
+ total_skip_limit = SolidusSubscriptions.configuration.maximum_total_skips
- SolidusSubscriptions::Config.maximum_successive_skips = 1
- SolidusSubscriptions::Config.maximum_total_skips = 1
+ SolidusSubscriptions.configuration.maximum_successive_skips = 1
+ SolidusSubscriptions.configuration.maximum_total_skips = 1
Timecop.freeze { e.run }
- SolidusSubscriptions::Config.maximum_successive_skips = successive_skip_limit
- SolidusSubscriptions::Config.maximum_total_skips = total_skip_limit
+ SolidusSubscriptions.configuration.maximum_successive_skips = successive_skip_limit
+ SolidusSubscriptions.configuration.maximum_total_skips = total_skip_limit
end
context 'when the successive skips have been exceeded' do
diff --git a/spec/services/solidus_subscriptions/checkout_spec.rb b/spec/services/solidus_subscriptions/checkout_spec.rb
index bdae3d2..aee7129 100644
--- a/spec/services/solidus_subscriptions/checkout_spec.rb
+++ b/spec/services/solidus_subscriptions/checkout_spec.rb
@@ -148,7 +148,7 @@ RSpec.describe SolidusSubscriptions::Checkout do
variant.stock_items.update_all(count_on_hand: 0, backorderable: false)
end
- let(:expected_date) { (DateTime.current + SolidusSubscriptions::Config.reprocessing_interval).beginning_of_minute }
+ let(:expected_date) { (DateTime.current + SolidusSubscriptions.configuration.reprocessing_interval).beginning_of_minute }
it 'creates a failed installment detail' do
subject
@@ -179,7 +179,7 @@ RSpec.describe SolidusSubscriptions::Checkout do
checkout.user.wallet.default_wallet_payment_source = wallet_payment_source
card
}
- let(:expected_date) { (DateTime.current + SolidusSubscriptions::Config.reprocessing_interval).beginning_of_minute }
+ let(:expected_date) { (DateTime.current + SolidusSubscriptions.configuration.reprocessing_interval).beginning_of_minute }
it { is_expected.to be_nil }
@@ -235,7 +235,7 @@ RSpec.describe SolidusSubscriptions::Checkout do
end
context 'there is an aribitrary failure' do
- let(:expected_date) { (DateTime.current + SolidusSubscriptions::Config.reprocessing_interval).beginning_of_minute }
+ let(:expected_date) { (DateTime.current + SolidusSubscriptions.configuration.reprocessing_interval).beginning_of_minute }
before do
allow(checkout).to receive(:populate).and_raise('arbitrary runtime error')