Class: ActiveRecord::Enum::EnumType

Inherits:
Type::Value
  • Object
show all
Defined in:
activerecord/lib/active_record/enum.rb

Overview

:nodoc:

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, mapping, subtype, raise_on_invalid_values: true) ⇒ EnumType

Returns a new instance of EnumType.



182
183
184
185
186
187
# File 'activerecord/lib/active_record/enum.rb', line 182

def initialize(name, mapping, subtype, raise_on_invalid_values: true)
  @name = name
  @mapping = mapping
  @subtype = subtype
  @_raise_on_invalid_values = raise_on_invalid_values
end

Instance Attribute Details

#subtypeObject (readonly)

Returns the value of attribute subtype.



219
220
221
# File 'activerecord/lib/active_record/enum.rb', line 219

def subtype
  @subtype
end

Instance Method Details

#assert_valid_value(value) ⇒ Object



211
212
213
214
215
216
217
# File 'activerecord/lib/active_record/enum.rb', line 211

def assert_valid_value(value)
  return unless @_raise_on_invalid_values

  unless value.blank? || mapping.has_key?(value) || mapping.has_value?(value)
    raise ArgumentError, "'#{value}' is not a valid #{name}"
  end
end

#cast(value) ⇒ Object



189
190
191
192
193
194
195
196
197
# File 'activerecord/lib/active_record/enum.rb', line 189

def cast(value)
  if mapping.has_key?(value)
    value.to_s
  elsif mapping.has_value?(value)
    mapping.key(value)
  else
    value.presence
  end
end

#deserialize(value) ⇒ Object



199
200
201
# File 'activerecord/lib/active_record/enum.rb', line 199

def deserialize(value)
  mapping.key(subtype.deserialize(value))
end

#serializable?(value, &block) ⇒ Boolean

Returns:

  • (Boolean)


207
208
209
# File 'activerecord/lib/active_record/enum.rb', line 207

def serializable?(value, &block)
  subtype.serializable?(mapping.fetch(value, value), &block)
end

#serialize(value) ⇒ Object



203
204
205
# File 'activerecord/lib/active_record/enum.rb', line 203

def serialize(value)
  subtype.serialize(mapping.fetch(value, value))
end