class Definition::Types::Each::Conformer
Attributes
definition[RW]
Public Class Methods
new(definition)
click to toggle source
# File lib/definition/types/each.rb, line 20 def initialize(definition) self.definition = definition end
Public Instance Methods
conform(value)
click to toggle source
# File lib/definition/types/each.rb, line 24 def conform(value) return non_array_error(value) unless value.is_a?(Array) results = conform_all(value) if results.all?(&:conformed?) ConformResult.new(results.map(&:value)) else ConformResult.new(value, errors: [ConformError.new(definition, "Not all items conform with '#{definition.name}'", sub_errors: errors(results))]) end end
Private Instance Methods
conform_all(values)
click to toggle source
# File lib/definition/types/each.rb, line 57 def conform_all(values) values.map do |value| definition.item_definition.conform(value) end end
errors(results)
click to toggle source
# File lib/definition/types/each.rb, line 42 def errors(results) errors = [] results.each_with_index do |result, index| next if result.passed? errors << KeyConformError.new( definition, "Item #{result.value.inspect} did not conform to #{definition.name}", key: index, sub_errors: result.error_tree ) end errors end
non_array_error(value)
click to toggle source
# File lib/definition/types/each.rb, line 63 def non_array_error(value) ConformResult.new(value, errors: [ ConformError.new(definition, "Non-Array value does not conform with #{definition.name}") ]) end