class Definition::Types::And::Conformer

Attributes

definition[RW]

Public Class Methods

new(definition) click to toggle source
# File lib/definition/types/and.rb, line 27
def initialize(definition)
  self.definition = definition
end

Public Instance Methods

conform(value) click to toggle source
# File lib/definition/types/and.rb, line 31
def conform(value)
  results = conform_all(value)

  if results.all?(&:conformed?)
    ConformResult.new(results.last.value)
  else
    ConformResult.new(value, errors: [
                        ConformError.new(definition, "Not all definitions are valid for '#{definition.name}'",
                                         sub_errors: results.map(&:error_tree).flatten)
                      ])
  end
end

Private Instance Methods

conform_all(value) click to toggle source
# File lib/definition/types/and.rb, line 48
def conform_all(value)
  results = []
  definition.definitions.each do |definition|
    result = definition.conform(value)
    value = result.value
    results << result
    break unless result.passed?
  end
  results
end