Module: Mongoid::EnumMapper::ClassMethods

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

Instance Method Summary collapse

Instance Method Details

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



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

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



54
55
56
57
# File 'lib/mongoid/enum_mapper/define_enum.rb', line 54

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

#set_enum_mapping_constant(name, value) ⇒ Object



49
50
51
52
# File 'lib/mongoid/enum_mapper/define_enum.rb', line 49

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