Module: RubyEnum::ActiveRecord::AttrEnum::ClassMethods

Defined in:
lib/ruby_enum/active_record.rb

Instance Method Summary collapse

Instance Method Details

#_define_attr_setter_for(name) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/ruby_enum/active_record.rb', line 46

def _define_attr_setter_for(name)
  define_method "#{name}=" do |new_value|
    if new_value.present? && !new_value.is_a?(RubyEnum)
      enum_class_name = self.class.attr_enums[name][:class_name]
      raise "You are trying to assign a `#{new_value.class.name}` value " \
        "to enumeration attribute `#{name}` which is not supported. " \
        "You must use `#{enum_class_name}` values instead."
    end

    super(new_value.try(:value))
  end
end

#attr_enum(name, opts = {}) ⇒ Object



10
11
12
13
14
# File 'lib/ruby_enum/active_record.rb', line 10

def attr_enum(name, opts = {})
  _create_attr_descriptor_for(name, opts)
  _define_attr_getter_for name
  _define_attr_setter_for name
end

#attr_enumsObject



16
17
18
# File 'lib/ruby_enum/active_record.rb', line 16

def attr_enums
  @_attr_enums ||= {}
end