Module: Arkaan::Concerns::Enumerable::ClassMethods
- Defined in:
- lib/arkaan/concerns/enumerable.rb
Overview
Submodule holding all the static methods add to the current subclass.
Instance Method Summary collapse
- #define_getter(field_name) ⇒ Object
- #define_setter(field_name, values) ⇒ Object
- #define_values_methods(field_name, values) ⇒ Object
-
#enum_field(field_name, values, options = {}) ⇒ Object
Creates the field with the given name, set of possible values, and options.
Instance Method Details
#define_getter(field_name) ⇒ Object
33 34 35 36 37 |
# File 'lib/arkaan/concerns/enumerable.rb', line 33 def define_getter(field_name) define_method field_name do return self["enum_#{field_name}"] end end |
#define_setter(field_name, values) ⇒ Object
39 40 41 42 43 44 |
# File 'lib/arkaan/concerns/enumerable.rb', line 39 def define_setter(field_name, values) define_method "#{field_name}=" do |value| value = value.to_sym self["enum_#{field_name}"] = value if values.include? value end end |
#define_values_methods(field_name, values) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/arkaan/concerns/enumerable.rb', line 46 def define_values_methods(field_name, values) values.map(&:to_sym).each do |value| define_method "#{field_name}_#{value}!" do self["enum_#{field_name}"] = value end define_method "#{field_name}_#{value}?" do self["enum_#{field_name}"] == value end end end |
#enum_field(field_name, values, options = {}) ⇒ Object
Creates the field with the given name, set of possible values, and options.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/arkaan/concerns/enumerable.rb', line 17 def enum_field(field_name, values, = {}) returned = field :"enum_#{field_name}", type: Symbol, default: [:default] validates :"enum_#{field_name}", inclusion: { in: values.map(&:to_sym), message: 'inclusion' } define_getter(field_name) define_setter(field_name, values) define_values_methods(field_name, values) # This is to make enumerations historizable by # returning the field object created by Mongoid. returned end |