class Openapi3Parser::Validators::MutuallyExclusiveFields::MutuallyExclusiveFieldErrors

Attributes

input[R]
mutually_exclusive_fields[R]

Public Class Methods

new(mutually_exclusive_fields, input) click to toggle source
# File lib/openapi3_parser/validators/mutually_exclusive_fields.rb, line 66
def initialize(mutually_exclusive_fields, input)
  @mutually_exclusive_fields = mutually_exclusive_fields
  @input = input
end

Public Instance Methods

errors() click to toggle source
# File lib/openapi3_parser/validators/mutually_exclusive_fields.rb, line 79
def errors
  @errors ||= begin
    default = { required: [], exclusive: [] }
    mutually_exclusive_fields
      .each_with_object(default) do |exclusive, errors|
        add_error(errors, exclusive)
      end
  end
end
exclusive_errors() click to toggle source
# File lib/openapi3_parser/validators/mutually_exclusive_fields.rb, line 75
def exclusive_errors
  errors[:exclusive]
end
required_errors() click to toggle source
# File lib/openapi3_parser/validators/mutually_exclusive_fields.rb, line 71
def required_errors
  errors[:required]
end

Private Instance Methods

add_error(errors, mutually_exclusive) click to toggle source
# File lib/openapi3_parser/validators/mutually_exclusive_fields.rb, line 93
def add_error(errors, mutually_exclusive)
  fields = mutually_exclusive.fields
  number_non_nil = count_non_nil_fields(fields)
  if number_non_nil.zero? && mutually_exclusive.required
    errors[:required] << required_error(fields)
  elsif number_non_nil > 1
    errors[:exclusive] << exclusive_error(fields)
  end
end
count_non_nil_fields(fields) click to toggle source
# File lib/openapi3_parser/validators/mutually_exclusive_fields.rb, line 103
def count_non_nil_fields(fields)
  fields.count do |field|
    data = input[field]
    data.respond_to?(:nil_input?) ? !data.nil_input? : !data.nil?
  end
end
exclusive_error(fields) click to toggle source
# File lib/openapi3_parser/validators/mutually_exclusive_fields.rb, line 114
def exclusive_error(fields)
  "#{fields.sentence_join} are mutually exclusive fields"
end
required_error(fields) click to toggle source
# File lib/openapi3_parser/validators/mutually_exclusive_fields.rb, line 110
def required_error(fields)
  "One of #{fields.sentence_join} is required"
end