diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index cf132a9977..eff92d4bc1 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -225,13 +225,6 @@ Style/MapToHash: - 'lib/reporting/reports/enterprise_fee_summary/fee_summary.rb' - 'lib/tasks/sample_data/user_factory.rb' -# Offense count: 3 -Style/MissingRespondToMissing: - Exclude: - - 'app/helpers/application_helper.rb' - - 'app/models/spree/gateway.rb' - - 'app/models/spree/preferences/configuration.rb' - # Offense count: 38 Style/OpenStructUse: Exclude: diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index f7787e35b9..47e89122ba 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -45,6 +45,11 @@ module ApplicationHelper form_for(name, *(args << options.merge(builder: AngularFormBuilder)), &) end + def respond_to_missing?(method_name, include_private = false) + (method_name.to_s.end_with?('_path', + '_url') && spree.respond_to?(method_name, include_private)) || super + end + # Pass URL helper calls on to spree where applicable so that we don't need to use # spree.foo_path in any view rendered from non-spree-namespaced controllers. def method_missing(method, *args, &) diff --git a/app/models/spree/gateway.rb b/app/models/spree/gateway.rb index 9dd4046c3a..0a20269050 100644 --- a/app/models/spree/gateway.rb +++ b/app/models/spree/gateway.rb @@ -30,6 +30,10 @@ module Spree preferences.transform_keys(&:to_sym) end + def respond_to_missing?(method_name, include_private = false) + @provider.respond_to?(method_name, include_private) || super + end + def method_missing(method, *args) if @provider.nil? || !@provider.respond_to?(method) super diff --git a/app/models/spree/preferences/configuration.rb b/app/models/spree/preferences/configuration.rb index b534a31cfc..464047d390 100644 --- a/app/models/spree/preferences/configuration.rb +++ b/app/models/spree/preferences/configuration.rb @@ -27,6 +27,20 @@ module Spree class Configuration include Spree::Preferences::Preferable + class << self + def preference(name, type, *args) + super + + define_method(name) do + get_preference(name) + end + + define_method("#{name}=") do |value| + set_preference(name, value) + end + end + end + def configure yield(self) if block_given? end @@ -56,19 +70,6 @@ module Spree set_preference args[0], args[1] end - - def method_missing(method, *args) - name = method.to_s.gsub('=', '') - if has_preference? name - if method.to_s =~ /=$/ - set_preference(name, args.first) - else - get_preference name - end - else - super - end - end end end end