module Seiel::I18nGoodies::ClassMethods
Public Instance Methods
enum(definitions, namespace: :enums, namespace_skip_models: true, default_kind: nil)
click to toggle source
Decorate Rails' enum
with i18n methods.
* `Model.plural_enums.i18n`: returns an array of arrays like `['Caption', 'string', 0]` * `Model.plural_enums.for_select`: returns an array useful for an html select
@param [Hash] definitions Same as Rails' own @param [#to_s] namespace: useful for i18n scopes; default :enums @param [bool] namespace_skip_models: useful for i18n scopes; default true @param [#to_s] default_kind: useful for i18n scopes; default nil
Calls superclass method
# File lib/seiel/i18n_goodies.rb, line 86 def enum(definitions, namespace: :enums, namespace_skip_models: true, default_kind: nil) super(definitions) klass = self definitions.each do |name, _| meth = name.to_s.pluralize feature = 'i18n_extensions' with = "#{meth}_with_#{feature}" without = "#{meth}_without_#{feature}" klass.singleton_class.send(:define_method, with) { value = send(without).try :dup unless value.nil? value.extend Enums::ClassExtensions value._model = self value._enum = name value._namespace = namespace value._namespace_skip_models = namespace_skip_models value._default_kind = default_kind value end } # FIXME: buscar la manera de utilizar #prepend eigenclass = klass.singleton_class eigenclass.send(:alias_method, without, meth) eigenclass.send(:alias_method, meth, with) define_method(name) { value = super().try :dup unless value.nil? value.extend Enums::Extensions value._model = self value._enum = name value._namespace = namespace value._namespace_skip_models = namespace_skip_models value._default_kind = default_kind value end } end end
i18n(key, *args, **kws)
click to toggle source
# File lib/seiel/i18n_goodies.rb, line 44 def i18n(key, *args, **kws) if kws[:model] kws[:skip_models] = false kws[:skip_enums] = true end kws[:skip_models] = true unless kws.key?(:skip_models) skip_enums = kws.delete(:skip_enums) args.unshift :enums unless skip_enums data = {} data.merge! args.pop if args.last.is_a?(Hash) data[:scope] = i18n_scope(*args, **kws) I18n.t key, data end
i18n_scope(*args)
click to toggle source
Calls superclass method
# File lib/seiel/i18n_goodies.rb, line 28 def i18n_scope(*args) if args.empty? super else opts = args.extract_options! ( [ super(), args.shift, (opts[:skip_models] ? nil : :models), model_name.i18n_key ].compact + args.compact ).map(&:to_s) end end
status_enum(definitions)
click to toggle source
Adapts enums with i18n conventions for statuses
@param [Hash] definitions Same as Rails' own
# File lib/seiel/i18n_goodies.rb, line 68 def status_enum(definitions) enum definitions, namespace: :statuses, namespace_skip_models: false, default_kind: :captions end