Module: TranslateEnum::ClassMethods

Defined in:
lib/translate_enum.rb

Overview

include TranslateEnum in ActiveModel or ActiveRecord

Instance Method Summary collapse

Instance Method Details

#translate_enum(attribute, &block) ⇒ Object

Examples:

class User < ActiveRecord::Base
  include TranslateEnum
  enum status: %i(active archived)
  translate_enum :status
end

User.translated_status(:active) #=> "Active translation"


19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/translate_enum.rb', line 19

def translate_enum(attribute, &block)
  builder = Builder.new(self, attribute, &block)

  # User.translated_status(:active)
  define_singleton_method(builder.method_name_singular) do |key|
    I18n.translate("#{builder.i18n_scope}.#{builder.i18n_location(key)}", default: builder.i18n_default_location(key))
  end

  # @return [Array]
  # @example
  #   f.select_field :gender, f.object.class.translated_genders
  define_singleton_method(builder.method_name_plural) do
    public_send(builder.enum_klass_method_name).map do |key, value|
      [public_send(builder.method_name_singular, key), key, value]
    end
  end

  # @return [String]
  # @example
  #   @user.translated_gender
  define_method(builder.method_name_singular) do
    if (key = public_send(builder.enum_instance_method_name)).present?
      self.class.public_send(builder.method_name_singular, key)
    end
  end
end