class Openapi3Parser::NodeFactory::Field::ValidNodeBuilder

Attributes

factory[R]
validatable[R]

Public Class Methods

data(factory) click to toggle source
# File lib/openapi3_parser/node_factory/field.rb, line 62
def self.data(factory)
  new(factory).data
end
errors(factory) click to toggle source
# File lib/openapi3_parser/node_factory/field.rb, line 58
def self.errors(factory)
  new(factory).errors
end

Private Class Methods

new(factory) click to toggle source
# File lib/openapi3_parser/node_factory/field.rb, line 66
def initialize(factory)
  @factory = factory
  @validatable = Validation::Validatable.new(factory)
end

Public Instance Methods

data() click to toggle source
# File lib/openapi3_parser/node_factory/field.rb, line 81
def data
  return default_value if factory.nil_input?

  TypeChecker.raise_on_invalid_type(factory.context,
                                    type: factory.input_type)
  validate(raise_on_invalid: true)
  factory.data
end
errors() click to toggle source
# File lib/openapi3_parser/node_factory/field.rb, line 71
def errors
  return validatable.collection if factory.nil_input?

  TypeChecker.validate_type(validatable, type: factory.input_type)
  return validatable.collection if validatable.errors.any?

  validate(raise_on_invalid: false)
  validatable.collection
end

Private Instance Methods

default_value() click to toggle source
# File lib/openapi3_parser/node_factory/field.rb, line 96
def default_value
  if factory.nil_input? && factory.default.nil?
    nil
  else
    factory.data
  end
end
run_validation() click to toggle source
# File lib/openapi3_parser/node_factory/field.rb, line 115
def run_validation
  if factory.validation.is_a?(Symbol)
    factory.send(factory.validation, validatable)
  else
    factory.validation&.call(validatable)
  end
end
validate(raise_on_invalid: false) click to toggle source
# File lib/openapi3_parser/node_factory/field.rb, line 104
def validate(raise_on_invalid: false)
  run_validation

  return if !raise_on_invalid || validatable.errors.empty?

  first_error = validatable.errors.first
  raise Openapi3Parser::Error::InvalidData,
        "Invalid data for #{first_error.context.location_summary}: "\
        "#{first_error.message}"
end