class StoreModel::Types::Many

Implements ActiveModel::Type::Value type for handling an array of StoreModel::Model

Public Class Methods

new(model_klass) click to toggle source

Initializes type for model class

@param model_klass [StoreModel::Model] model class to handle

@return [StoreModel::Types::Many]

# File lib/store_model/types/many.rb, line 15
def initialize(model_klass)
  @model_klass = model_klass
end

Public Instance Methods

type() click to toggle source

Returns type

@return [Symbol]

# File lib/store_model/types/many.rb, line 22
def type
  :array
end

Protected Instance Methods

cast_model_type_value(value) click to toggle source
# File lib/store_model/types/many.rb, line 34
def cast_model_type_value(value)
  model_klass_type.cast_value(value)
end
ensure_model_class(array) click to toggle source
# File lib/store_model/types/many.rb, line 28
def ensure_model_class(array)
  array.map do |object|
    object.is_a?(@model_klass) ? object : cast_model_type_value(object)
  end
end
model_klass_type() click to toggle source
# File lib/store_model/types/many.rb, line 38
def model_klass_type
  @model_klass_type ||= @model_klass.to_type
end
raise_cast_error(value) click to toggle source
# File lib/store_model/types/many.rb, line 42
def raise_cast_error(value)
  raise StoreModel::Types::CastError,
        "failed casting #{value.inspect}, only String or Array instances are allowed"
end