Module: Mongoid::EnumMapper::ClassMethods

Defined in:
lib/mongoid/enum_mapper/define_enum.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#current_enumsObject (readonly)

Returns the value of attribute current_enums.



32
33
34
# File 'lib/mongoid/enum_mapper/define_enum.rb', line 32

def current_enums
  @current_enums
end

Instance Method Details

#define_enum(enum_field, enum_mapping = {}) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/mongoid/enum_mapper/define_enum.rb', line 34

def define_enum(enum_field, enum_mapping = {})
  field :"#{enum_field}", type: Integer, default: 0

  set_enum_mapping_constant(enum_field, enum_mapping)
  set_current_enum_fields(enum_field)

  enum_value = :"@#{enum_field}"

  define_method(enum_field) do
    instance_variable_get(enum_value) ||
    instance_variable_set(enum_value, enum_mapping.find { |_, value| value == self[enum_field] }.try(:[], 0))
  end

  define_method(:"#{enum_field}=") do |key|
    reset_enum_mapping_cache(enum_field: enum_field, key: key)
  end
end

#set_current_enum_fields(name) ⇒ Object



57
58
59
60
# File 'lib/mongoid/enum_mapper/define_enum.rb', line 57

def set_current_enum_fields(name)
  @current_enums ||= []
  @current_enums << name.to_s
end

#set_enum_mapping_constant(name, value) ⇒ Object



52
53
54
55
# File 'lib/mongoid/enum_mapper/define_enum.rb', line 52

def set_enum_mapping_constant(name, value)
  const_name = name.to_s.upcase
  const_set(const_name, value.freeze)
end