Sha256: 343163bb3a3f0d1ea1d0e91e31dac0ed4345315eb05e11a948f3539937f8be02
Contents?: true
Size: 1.72 KB
Versions: 1
Compression:
Stored size: 1.72 KB
Contents
# frozen_string_literal: true module BuddyTranslatable module Core 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 def define_translatable_methods(attr, default_key) define_translatable_setters(attr) define_translatable_key_getters(attr, default_key) define_translatable_getters(attr) end 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 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 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 def define_translatable_key_methods(attr, keys) keys.each do |key| define_method("#{attr}_#{key}") do send("#{attr}_data_for", key) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
buddy_translatable-0.2.0 | lib/buddy_translatable/core.rb |