class Virtus::Attribute::Collection

Collection attribute handles enumerable-like types

Handles coercing members to the designated member type.

Constants

Type

FIXME: temporary hack, remove when Axiom::Type works with EV as #member_type

Attributes

member_type[R]

@api private

Public Class Methods

build_type(definition) click to toggle source

@api private

# File lib/virtus/attribute/collection.rb, line 63
def self.build_type(definition)
  Type.infer(definition.type, definition.primitive)
end
merge_options!(type, options) click to toggle source

@api private

# File lib/virtus/attribute/collection.rb, line 68
def self.merge_options!(type, options)
  options[:member_type] ||= Attribute.build(type.member_type, strict: options[:strict])
end

Public Instance Methods

coerce(value) click to toggle source

@api public

Calls superclass method Virtus::Attribute.coerce
# File lib/virtus/attribute/collection.rb, line 73
def coerce(value)
  coerced = super

  return coerced unless coerced.respond_to?(:each_with_object)

  coerced.each_with_object(primitive.new) do |entry, collection|
    collection << member_type.coerce(entry)
  end
end
finalize() click to toggle source

@api private

Calls superclass method Virtus::Attribute#finalize
# File lib/virtus/attribute/collection.rb, line 84
def finalize
  return self if finalized?
  @member_type = @options[:member_type].finalize
  super
end
finalized?() click to toggle source

@api private

Calls superclass method Virtus::Attribute#finalized?
# File lib/virtus/attribute/collection.rb, line 91
def finalized?
  super && member_type.finalized?
end