class StoreModel::Types::EnumType
Implements ActiveModel::Type::Value type for handling Rails-like enums
Public Class Methods
new(mapping)
click to toggle source
Initializes type for mapping
@param mapping [Hash] mapping for enum values
@return [StoreModel::Types::EnumType]
# File lib/store_model/types/enum_type.rb, line 14 def initialize(mapping) @mapping = mapping end
Public Instance Methods
cast_value(value)
click to toggle source
Casts value
from DB or user to StoreModel::Model
instance
@param value [Object] a value to cast
@return StoreModel::Model
# File lib/store_model/types/enum_type.rb, line 30 def cast_value(value) return if value.blank? case value when String, Symbol then cast_symbol_value(value.to_sym) when Integer then cast_integer_value(value) else raise StoreModel::Types::CastError, "failed casting #{value.inspect}, only String, Symbol or " \ "Integer instances are allowed" end end
type()
click to toggle source
Returns type
@return [Symbol]
# File lib/store_model/types/enum_type.rb, line 21 def type :integer end
Private Instance Methods
cast_integer_value(value)
click to toggle source
# File lib/store_model/types/enum_type.rb, line 50 def cast_integer_value(value) raise_invalid_value!(value) unless @mapping.value?(value) value end
cast_symbol_value(value)
click to toggle source
# File lib/store_model/types/enum_type.rb, line 45 def cast_symbol_value(value) raise_invalid_value!(value) unless @mapping.key?(value.to_sym) @mapping[value.to_sym] end
raise_invalid_value!(value)
click to toggle source
# File lib/store_model/types/enum_type.rb, line 55 def raise_invalid_value!(value) raise ArgumentError, "invalid value '#{value}' is assigned" end