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
|