From 8d42de41230b13ab0b86a42e5ee7e7e93d5f6b35 Mon Sep 17 00:00:00 2001 From: Chris Salzberg Date: Tue, 8 May 2018 09:36:28 +0900 Subject: [PATCH 1/2] Use module_eval to define locale accessor methods These are accessors so they may be called often, better to optimize for dispatch speed (eval) over definition speed (define_method). --- lib/mobility/plugins/locale_accessors.rb | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/lib/mobility/plugins/locale_accessors.rb b/lib/mobility/plugins/locale_accessors.rb index 2034f1865..bbc1e1b5b 100644 --- a/lib/mobility/plugins/locale_accessors.rb +++ b/lib/mobility/plugins/locale_accessors.rb @@ -56,28 +56,32 @@ def define_reader(name, locale) warning_message = "locale passed as option to locale accessor will be ignored" normalized_locale = Mobility.normalize_locale(locale) - define_method "#{name}_#{normalized_locale}" do |**options| + module_eval <<-EOM, __FILE__, __LINE__ + 1 + def #{name}_#{normalized_locale}(**options) return super() if options.delete(:super) - warn warning_message if options[:locale] - public_send(name, **options, locale: locale) + warn "#{warning_message}" if options[:locale] + #{name}(**options, locale: :'#{locale}') end - define_method "#{name}_#{normalized_locale}?" do |**options| + def #{name}_#{normalized_locale}?(**options) return super() if options.delete(:super) - warn warning_message if options[:locale] - public_send("#{name}?", **options, locale: locale) + warn "#{warning_message}" if options[:locale] + #{name}?(**options, locale: :'#{locale}') end + EOM end def define_writer(name, locale) warning_message = "locale passed as option to locale accessor will be ignored" normalized_locale = Mobility.normalize_locale(locale) - define_method "#{name}_#{normalized_locale}=" do |value, **options| + module_eval <<-EOM, __FILE__, __LINE__ + 1 + def #{name}_#{normalized_locale}=(value, **options) return super(value) if options.delete(:super) - warn warning_message if options[:locale] - public_send("#{name}=", value, **options, locale: locale) + warn "#{warning_message}" if options[:locale] + public_send(:#{name}=, value, **options, locale: :'#{locale}') end + EOM end end end From 25440a6199a25611c53f98ef79d5afaa7cb8eacc Mon Sep 17 00:00:00 2001 From: Chris Salzberg Date: Tue, 8 May 2018 09:39:29 +0900 Subject: [PATCH 2/2] Avoid creating extra hash object --- lib/mobility/plugins/locale_accessors.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/mobility/plugins/locale_accessors.rb b/lib/mobility/plugins/locale_accessors.rb index bbc1e1b5b..89886c377 100644 --- a/lib/mobility/plugins/locale_accessors.rb +++ b/lib/mobility/plugins/locale_accessors.rb @@ -57,13 +57,13 @@ def define_reader(name, locale) normalized_locale = Mobility.normalize_locale(locale) module_eval <<-EOM, __FILE__, __LINE__ + 1 - def #{name}_#{normalized_locale}(**options) + def #{name}_#{normalized_locale}(options = {}) return super() if options.delete(:super) warn "#{warning_message}" if options[:locale] #{name}(**options, locale: :'#{locale}') end - def #{name}_#{normalized_locale}?(**options) + def #{name}_#{normalized_locale}?(options = {}) return super() if options.delete(:super) warn "#{warning_message}" if options[:locale] #{name}?(**options, locale: :'#{locale}') @@ -76,7 +76,7 @@ def define_writer(name, locale) normalized_locale = Mobility.normalize_locale(locale) module_eval <<-EOM, __FILE__, __LINE__ + 1 - def #{name}_#{normalized_locale}=(value, **options) + def #{name}_#{normalized_locale}=(value, options = {}) return super(value) if options.delete(:super) warn "#{warning_message}" if options[:locale] public_send(:#{name}=, value, **options, locale: :'#{locale}')