class Definition::Types::Or::Conformer

Attributes

definition[RW]

Public Class Methods

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

Public Instance Methods

conform(value) click to toggle source
# File lib/definition/types/or.rb, line 31
def conform(value)
  result = first_successful_conform_or_errors(value)
  if result.is_a?(ConformResult)
    result
  else
    error = ConformError.new(definition,
                             "None of the definitions are valid for '#{definition.name}'",
                             sub_errors: result)
    ConformResult.new(value, errors: [error])
  end
end

Private Instance Methods

first_successful_conform_or_errors(value) click to toggle source
# File lib/definition/types/or.rb, line 45
def first_successful_conform_or_errors(value)
  errors = []
  definition.definitions.each do |definition|
    result = definition.conform(value)
    return result if result.passed?

    errors.push(result.error_tree)
  end

  errors.flatten
end