Sha256: a06f5df668124e4fbf562be86d94ef968ad50ebb712337a2bd2f636889c3d416

Contents?: true

Size: 1.11 KB

Versions: 4

Compression:

Stored size: 1.11 KB

Contents

# frozen_string_literal: true

require "active_model"

module StoreModel
  module Types
    # Implements ActiveModel::Type::Value type for handling an array of
    # StoreModel::Model
    class Many < ManyBase
      # Initializes type for model class
      #
      # @param model_klass [StoreModel::Model] model class to handle
      #
      # @return [StoreModel::Types::Many]
      def initialize(model_klass)
        @model_klass = model_klass
        super()
      end

      # Returns type
      #
      # @return [Symbol]
      def type
        :array
      end

      protected

      def ensure_model_class(array)
        array.map do |object|
          object.is_a?(@model_klass) ? object : cast_model_type_value(object)
        end
      end

      def cast_model_type_value(value)
        model_klass_type.cast_value(value)
      end

      def model_klass_type
        @model_klass_type ||= @model_klass.to_type
      end

      def raise_cast_error(value)
        raise StoreModel::Types::CastError,
              "failed casting #{value.inspect}, only String or Array instances are allowed"
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
store_model-4.2.1 lib/store_model/types/many.rb
store_model-4.2.0 lib/store_model/types/many.rb
store_model-4.1.0 lib/store_model/types/many.rb
store_model-4.0.0 lib/store_model/types/many.rb