class StoreModel::Types::OneBase
Implements ActiveModel::Type::Value type for handling an instance of StoreModel::Model
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/one_base.rb, line 21 def cast_value(_value) raise NotImplementedError end
changed_in_place?(raw_old_value, new_value)
click to toggle source
Determines whether the mutable value has been modified since it was read
@param raw_old_value [Object] old value @param new_value [Object] new value
@return [Boolean]
# File lib/store_model/types/one_base.rb, line 31 def changed_in_place?(raw_old_value, new_value) cast_value(raw_old_value) != new_value end
type()
click to toggle source
Returns type
@return [Symbol]
# File lib/store_model/types/one_base.rb, line 12 def type raise NotImplementedError end
Protected Instance Methods
model_instance(_value)
click to toggle source
# File lib/store_model/types/one_base.rb, line 41 def model_instance(_value) raise NotImplementedError end
raise_cast_error(_value)
click to toggle source
# File lib/store_model/types/one_base.rb, line 37 def raise_cast_error(_value) raise NotImplementedError end
Private Instance Methods
decode_and_initialize(value)
click to toggle source
rubocop:disable Style/RescueModifier
# File lib/store_model/types/one_base.rb, line 48 def decode_and_initialize(value) decoded = ActiveSupport::JSON.decode(value) rescue nil model_instance(decoded) unless decoded.nil? rescue ActiveModel::UnknownAttributeError => e handle_unknown_attribute(decoded, e) end
handle_unknown_attribute(value, exception)
click to toggle source
rubocop:enable Style/RescueModifier
# File lib/store_model/types/one_base.rb, line 56 def handle_unknown_attribute(value, exception) attribute = exception.attribute.to_sym value_symbolized = value.symbolize_keys value_symbolized = value_symbolized[:attributes] if value_symbolized.key?(:attributes) cast_value(value_symbolized.except(attribute)).tap do |configuration| configuration.unknown_attributes[attribute.to_s] = value_symbolized[attribute] end end