module Formulario class Field class Collection < Field include Enumerable def fields raw_value end def values fields.map(&:value) end alias :value :values def self.[](type) Class.new(self).tap { |typed_class| typed_class.field_types = type_for(type) } end def exceptional? fields.any?(&:exceptional?) end def each(&block) fields.each(&block) end private def self.build(raw_value) new Array(raw_value).map { |value| field_types.for(value) } end def self.field_types @field_types ||= Field end def self.field_types=(type) @field_types = type end end end end