module ActsEnumTranslable::ActiveModel::Concern::ClassMethods

Public Instance Methods

acts_enum_translable(options = {}) click to toggle source

Pega o nome da class corrente, verifica se tem enums e cria os metodos em tempo de execucao

Returns:

@return [Method] method_translable

# File lib/acts_enum_translable/active_model/concern.rb, line 15
def acts_enum_translable(options = {})
  cattr_accessor :class_name
  klass = (options[:class_name] || self)
  add_runtime_methods(klass) if klass.defined_enums?
end

Private Instance Methods

add_runtime_methods(klass) click to toggle source

Cria metodos em tempo de execucao com sufixo _translable

Parameters:

@param klass [Array] recebe um array com os enums definidos em uma class/model

Returns:

@return [Method] retorna methods com sufixo _translable baseados nas keys dos enums

# File lib/acts_enum_translable/active_model/concern.rb, line 30
def add_runtime_methods(klass)
  klass.defined_enums.keys.each do |enum_key|
    define_method :"#{enum_key}_translable" do
      trans_key = self.class.i18n_key(enum_key, send(enum_key))
      return I18n.t(trans_key, locale: I18n.locale) if I18n.exists? trans_key
      return send(enum_key).humanize
    end
  end
end