class Fakeit::Validation::Validator

Public Class Methods

new(operation) click to toggle source
# File lib/fakeit/validation/validator.rb, line 4
    def initialize(operation) = @operation = operation

    def validate(body: {}, params: {}, headers: {})
      options = OpenAPIParser::SchemaValidator::Options.new(coerce_value: true)

      validate_body(body) unless request_content_types.empty?
      @operation.validate_path_params(options)
      @operation.validate_request_parameter(params, headers, options)
    rescue StandardError => e
      raise ValidationError, e.message
    end

    private

    def validate_body(body)
      if request_content_types.include?(body[:media_type])
        @operation.validate_request_body(body[:media_type], body[:data]) if can_validate?(body[:media_type])
      else
        raise ValidationError, 'Invalid request content type' if body[:media_type]
        raise ValidationError, 'Request body is required' if request_body.required
      end
    end

    def can_validate?(media_type) = media_type =~ %r{^application/.*json} || media_type == 'multipart/form-data'

    def request_content_types = request_body&.content&.keys.to_a

    def request_body = @operation.operation_object.request_body
  end
end

Public Instance Methods

can_validate?(media_type) click to toggle source
# File lib/fakeit/validation/validator.rb, line 27
      def can_validate?(media_type) = media_type =~ %r{^application/.*json} || media_type == 'multipart/form-data'

      def request_content_types = request_body&.content&.keys.to_a

      def request_body = @operation.operation_object.request_body
    end
  end
end
request_body(= @operation.operation_object.request_body) click to toggle source
# File lib/fakeit/validation/validator.rb, line 31
  def request_body = @operation.operation_object.request_body
end
request_content_types(= request_body&.content&.keys.to_a) click to toggle source
# File lib/fakeit/validation/validator.rb, line 29
    def request_content_types = request_body&.content&.keys.to_a

    def request_body = @operation.operation_object.request_body
  end
end
validate(body: {}, params: {}, headers: {}) click to toggle source
# File lib/fakeit/validation/validator.rb, line 6
def validate(body: {}, params: {}, headers: {})
  options = OpenAPIParser::SchemaValidator::Options.new(coerce_value: true)

  validate_body(body) unless request_content_types.empty?
  @operation.validate_path_params(options)
  @operation.validate_request_parameter(params, headers, options)
rescue StandardError => e
  raise ValidationError, e.message
end
validate_body(body) click to toggle source
# File lib/fakeit/validation/validator.rb, line 18
def validate_body(body)
  if request_content_types.include?(body[:media_type])
    @operation.validate_request_body(body[:media_type], body[:data]) if can_validate?(body[:media_type])
  else
    raise ValidationError, 'Invalid request content type' if body[:media_type]
    raise ValidationError, 'Request body is required' if request_body.required
  end
end