class Openapi3Parser::NodeFactory::Array::ValidNodeBuilder
Attributes
factory[R]
validatable[R]
Public Class Methods
data(factory, parent_context)
click to toggle source
# File lib/openapi3_parser/node_factory/array.rb, line 107 def self.data(factory, parent_context) new(factory).data(parent_context) end
errors(factory)
click to toggle source
# File lib/openapi3_parser/node_factory/array.rb, line 103 def self.errors(factory) new(factory).errors end
Private Class Methods
new(factory)
click to toggle source
# File lib/openapi3_parser/node_factory/array.rb, line 111 def initialize(factory) @factory = factory @validatable = Validation::Validatable.new(factory) end
Public Instance Methods
data(parent_context)
click to toggle source
# File lib/openapi3_parser/node_factory/array.rb, line 126 def data(parent_context) if factory.use_default? return factory.default.nil? ? nil : build_node_data(parent_context) end TypeChecker.raise_on_invalid_type(factory.context, type: ::Array) check_values(raise_on_invalid: true) validate(raise_on_invalid: true) build_node_data(parent_context) end
errors()
click to toggle source
# File lib/openapi3_parser/node_factory/array.rb, line 116 def errors return validatable.collection if factory.nil_input? TypeChecker.validate_type(validatable, type: ::Array) return validatable.collection if validatable.errors.any? collate_errors validatable.collection end
Private Instance Methods
build_node_data(parent_context)
click to toggle source
# File lib/openapi3_parser/node_factory/array.rb, line 144 def build_node_data(parent_context) factory.data.each_with_index.map do |value, i| next value unless value.respond_to?(:node) Node::Placeholder.new(value, i, parent_context) end end
check_field_type(context, raise_on_invalid)
click to toggle source
# File lib/openapi3_parser/node_factory/array.rb, line 170 def check_field_type(context, raise_on_invalid) if raise_on_invalid TypeChecker.raise_on_invalid_type(context, type: factory.value_input_type) else TypeChecker.validate_type(validatable, type: factory.value_input_type, context: context) end end
check_values(raise_on_invalid: false)
click to toggle source
# File lib/openapi3_parser/node_factory/array.rb, line 161 def check_values(raise_on_invalid: false) return unless factory.value_input_type factory.context.input.each_with_index do |value, index| check_field_type(Context.next_field(factory.context, index, value), raise_on_invalid) end end
collate_errors()
click to toggle source
# File lib/openapi3_parser/node_factory/array.rb, line 152 def collate_errors check_values(raise_on_invalid: false) validate(raise_on_invalid: false) factory.data.each do |value| validatable.add_errors(value.errors) if value.respond_to?(:errors) end end
run_validation()
click to toggle source
# File lib/openapi3_parser/node_factory/array.rb, line 192 def run_validation if factory.validation.is_a?(Symbol) factory.send(:validation, validatable) else factory.validation&.call(validatable) end end
validate(raise_on_invalid: false)
click to toggle source
# File lib/openapi3_parser/node_factory/array.rb, line 181 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