Module: Arkaan::Concerns::Enumerable::ClassMethods

Defined in:
lib/arkaan/concerns/enumerable.rb

Overview

Submodule holding all the static methods add to the current subclass.

Author:

Instance Method Summary collapse

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.

Parameters:

  • field_name (String)

    the name of the enumerated field.

  • values (Array<Symbol>)

    the possible values of the enumerated field.

  • options (Hash<Symbol, Any>) (defaults to: {})

    the possible options for the field.



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, options = {})
  returned = field :"enum_#{field_name}", type: Symbol, default: options[: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