Module: BetterEnum::Extension

Defined in:
lib/better_enum/extension.rb

Instance Method Summary collapse

Instance Method Details

#enum(definitions) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/better_enum/extension.rb', line 3

def enum(definitions)
  super
  klass = self
  definitions.each do |name, values|
    enum_values = send(name.to_s.pluralize)
    singleton_class.send(:define_method, :"#{name}_label") do |key|
      I18n.t(key, default: key.to_s.humanize, scope: [:activerecord, :enums, self.name.underscore.to_sym, name])
    end
    singleton_class.send(:define_method, :"#{name}_value") { |key| enum_values[key] }
    singleton_class.send(:define_method, :"#{name}_labels") do
      enum_values.each_with_object({}) { |(key, value), labels| labels[key] = send(:"#{name}_label", key) }.with_indifferent_access
    end
    _enum_methods_module.module_eval do
      define_method(:"#{name}_label") do
        send(name) && I18n.t((key = send(name).to_sym), default: key.to_s.humanize, scope: [:activerecord, :enums, klass.name.underscore.to_sym, name])
      end
      define_method(:"#{name}_value") { send(name) && enum_values[send(name)] }
    end
  end
end