diff --git a/lib/solidus_support.rb b/lib/solidus_support.rb index c649f1d..5b4312f 100644 --- a/lib/solidus_support.rb +++ b/lib/solidus_support.rb @@ -68,15 +68,26 @@ def payment_method_parent_class(credit_card: false) end def frontend_available? - defined?(Spree::Frontend::Engine) + defined?(Spree::Frontend::Engine) || + rails_config?(:frontend_available, true) end def backend_available? - defined?(Spree::Backend::Engine) + defined?(Spree::Backend::Engine) || + rails_config?(:backend_available, true) end def api_available? - defined?(Spree::Api::Engine) + defined?(Spree::Api::Engine) || + rails_config?(:api_available, true) + end + + def rails_config?(name, value) + return false unless Rails.application + + Rails.configuration.x.respond_to?(:solidus) && + Rails.configuration.x.solidus.respond_to?(name) && + (Rails.configuration.x.solidus.send(name) == value) end end end diff --git a/lib/solidus_support/engine_extensions.rb b/lib/solidus_support/engine_extensions.rb index c3375da..54065d2 100644 --- a/lib/solidus_support/engine_extensions.rb +++ b/lib/solidus_support/engine_extensions.rb @@ -15,9 +15,9 @@ def self.included(engine) config.to_prepare(&method(:activate)) - enable_solidus_engine_support('backend') if SolidusSupport.backend_available? - enable_solidus_engine_support('frontend') if SolidusSupport.frontend_available? - enable_solidus_engine_support('api') if SolidusSupport.api_available? + enable_solidus_engine_support('backend') + enable_solidus_engine_support('frontend') + enable_solidus_engine_support('api') end end @@ -82,17 +82,23 @@ def solidus_subscribers_root # # @see #load_solidus_decorators_from def enable_solidus_engine_support(engine) - paths['app/controllers'] << "lib/controllers/#{engine}" - paths['app/views'] << "lib/views/#{engine}" + initializer "#{name}_#{engine}_paths", before: :initialize_dependency_mechanism do + if SolidusSupport.send(:"#{engine}_available?") + paths['app/controllers'] << "lib/controllers/#{engine}" + paths['app/views'] << "lib/views/#{engine}" + end + end - path = root.join("lib/decorators/#{engine}") + if SolidusSupport.send(:"#{engine}_available?") + path = root.join("lib/decorators/#{engine}") - config.autoload_paths += path.glob('*') + config.autoload_paths += path.glob('*') - engine_context = self - config.to_prepare do - engine_context.instance_eval do - load_solidus_decorators_from(path) + engine_context = self + config.to_prepare do + engine_context.instance_eval do + load_solidus_decorators_from(path) + end end end end