class Openapi3Parser::NodeFactory::ObjectFactory::NodeBuilder

Attributes

factory[R]
validatable[R]

Public Class Methods

errors(factory) click to toggle source
# File lib/openapi3_parser/node_factory/object_factory/node_builder.rb, line 7
def self.errors(factory)
  new(factory).errors
end
node_data(factory, node_context) click to toggle source
# File lib/openapi3_parser/node_factory/object_factory/node_builder.rb, line 11
def self.node_data(factory, node_context)
  new(factory).node_data(node_context)
end

Private Class Methods

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

Public Instance Methods

errors() click to toggle source
# File lib/openapi3_parser/node_factory/object_factory/node_builder.rb, line 20
def errors
  return validatable.collection if empty_and_allowed_to_be?

  TypeChecker.validate_type(validatable, type: ::Hash)

  validatable.add_errors(validate(raise_on_invalid: false)) if validatable.errors.empty?

  validatable.collection
end
node_data(node_context) click to toggle source
# File lib/openapi3_parser/node_factory/object_factory/node_builder.rb, line 30
def node_data(node_context)
  return build_node_data(node_context) if empty_and_allowed_to_be?

  TypeChecker.raise_on_invalid_type(factory.context, type: ::Hash)
  validate(raise_on_invalid: true)
  build_node_data(node_context)
end

Private Instance Methods

build_node_data(node_context) click to toggle source
# File lib/openapi3_parser/node_factory/object_factory/node_builder.rb, line 52
def build_node_data(node_context)
  return if factory.nil_input? && factory.data.nil?

  factory.data.each_with_object({}) do |(key, value), memo|
    memo[key] = resolve_value(key, value, node_context)
  end
end
determine_value_or_default(key, value) click to toggle source
# File lib/openapi3_parser/node_factory/object_factory/node_builder.rb, line 70
def determine_value_or_default(key, value)
  config = factory.field_configs[key]

  # let a field config default take precedence if value is a nil_input?
  if (value.respond_to?(:nil_input?) && value.nil_input?) || value.nil?
    default = config&.default(factory)
    default.nil? ? value : default
  else
    value
  end
end
empty_and_allowed_to_be?() click to toggle source
# File lib/openapi3_parser/node_factory/object_factory/node_builder.rb, line 44
def empty_and_allowed_to_be?
  factory.nil_input? && factory.can_use_default?
end
resolve_value(key, value, node_context) click to toggle source
# File lib/openapi3_parser/node_factory/object_factory/node_builder.rb, line 60
def resolve_value(key, value, node_context)
  resolved = determine_value_or_default(key, value)

  if resolved.respond_to?(:node)
    Node::Placeholder.new(value, key, node_context)
  else
    resolved
  end
end
validate(raise_on_invalid:) click to toggle source
# File lib/openapi3_parser/node_factory/object_factory/node_builder.rb, line 48
def validate(raise_on_invalid:)
  Validator.call(factory, raise_on_invalid: raise_on_invalid)
end