Module: BuddyTranslatable::Core
- Defined in:
- lib/buddy_translatable/core.rb
Instance Method Summary collapse
- #define_translatable_getters(attr) ⇒ Object
- #define_translatable_key_getters(attr, default_key) ⇒ Object
- #define_translatable_key_methods(attr, keys) ⇒ Object
- #define_translatable_methods(attr, default_key) ⇒ Object
- #define_translatable_setters(attr) ⇒ Object
- #translatable(*attrs, default_key: :en, available_keys: nil) ⇒ Object
Instance Method Details
#define_translatable_getters(attr) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/buddy_translatable/core.rb', line 43 def define_translatable_getters(attr) define_method("#{attr}_data") do res = self[attr] res = new_record? ? { I18n.locale => '' } : {} unless res.present? res.symbolize_keys.with_indifferent_access end define_method(attr) do |**_args| send("#{attr}_data_for", I18n.locale) end end |
#define_translatable_key_getters(attr, default_key) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/buddy_translatable/core.rb', line 30 def define_translatable_key_getters(attr, default_key) define_method("#{attr}_data_for") do |key| value = send("#{attr}_data") value[key] || value[default_key].presence || value.values.find(&:present?) end define_method("#{attr}_for") do |key| send("#{attr}_data_for", key) end end |
#define_translatable_key_methods(attr, keys) ⇒ Object
55 56 57 58 59 60 61 |
# File 'lib/buddy_translatable/core.rb', line 55 def define_translatable_key_methods(attr, keys) keys.each do |key| define_method("#{attr}_#{key}") do send("#{attr}_data_for", key) end end end |
#define_translatable_methods(attr, default_key) ⇒ Object
13 14 15 16 17 |
# File 'lib/buddy_translatable/core.rb', line 13 def define_translatable_methods(attr, default_key) define_translatable_setters(attr) define_translatable_key_getters(attr, default_key) define_translatable_getters(attr) end |
#define_translatable_setters(attr) ⇒ Object
19 20 21 22 23 24 25 26 27 28 |
# File 'lib/buddy_translatable/core.rb', line 19 def define_translatable_setters(attr) define_method("#{attr}_data=") do |arg| data = send("#{attr}_data") self[attr] = arg.is_a?(Hash) ? arg : data.merge(I18n.locale => arg) end define_method("#{attr}=") do |arg| send("#{attr}_data=", arg) end end |
#translatable(*attrs, default_key: :en, available_keys: nil) ⇒ Object
5 6 7 8 9 10 11 |
# File 'lib/buddy_translatable/core.rb', line 5 def translatable(*attrs, default_key: :en, available_keys: nil) available_keys ||= I18n.available_locales attrs.each do |attr| define_translatable_methods(attr, default_key) define_translatable_key_methods(attr, available_keys) end end |