diff --git a/lib/mobility/locale_accessors.rb b/lib/mobility/locale_accessors.rb index 8d65ac266..ce1eedda4 100644 --- a/lib/mobility/locale_accessors.rb +++ b/lib/mobility/locale_accessors.rb @@ -47,14 +47,17 @@ def initialize(*attribute_names, locales: I18n.available_locales) locales.each do |locale| normalized_locale = Mobility.normalize_locale(locale) define_method "#{name}_#{normalized_locale}" do |**options| + return super() if options.delete(:super) warn warning_message if options.delete(:locale) Mobility.with_locale(locale) { send(name, options) } end define_method "#{name}_#{normalized_locale}?" do |**options| + return super() if options.delete(:super) warn warning_message if options.delete(:locale) Mobility.with_locale(locale) { send("#{name}?", options) } end define_method "#{name}_#{normalized_locale}=" do |value, **options| + return super(value) if options.delete(:super) warn warning_message if options.delete(:locale) Mobility.with_locale(locale) { send("#{name}=", value, options) } end diff --git a/spec/mobility/locale_accessors_spec.rb b/spec/mobility/locale_accessors_spec.rb index 5df6aaf50..614a8a721 100644 --- a/spec/mobility/locale_accessors_spec.rb +++ b/spec/mobility/locale_accessors_spec.rb @@ -66,6 +66,38 @@ def title=(_value, **_); end end end end + + describe "super: true" do + it "calls super of locale accessor method" do + spy = double("model") + mod = Module.new do + define_method :title_en do + spy.title_en + end + define_method :title_en? do + spy.title_en? + end + define_method :title_en= do |value| + spy.title_en = value + end + end + base_model_class.include mod + base_model_class.include described_class.new(:title) + + instance = base_model_class.new + + aggregate_failures do + expect(spy).to receive(:title_en).and_return("model foo") + instance.title_en(super: true) + + expect(spy).to receive(:title_en?).and_return(true) + instance.title_en?(super: true) + + expect(spy).to receive(:title_en=).with("model foo") + instance.send(:title_en=, "model foo", super: true) + end + end + end end describe ".apply" do