Class: OpenapiFirst::ValidatedRequest

Inherits:
SimpleDelegator
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/openapi_first/validated_request.rb

Overview

A validated request. It can be valid or not.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(original_request, error:, parsed_request: nil, request_definition: nil, query_parser: nil) ⇒ ValidatedRequest

Returns a new instance of ValidatedRequest.



11
12
13
14
15
16
17
# File 'lib/openapi_first/validated_request.rb', line 11

def initialize(original_request, error:, parsed_request: nil, request_definition: nil, query_parser: nil)
  super(original_request)
  @parsed_request = parsed_request
  @error = error
  @request_definition = request_definition
  @query_parser = query_parser
end

Instance Attribute Details

#errorFailure? (readonly)

A Failure object if the request is invalid

Returns:



21
22
23
# File 'lib/openapi_first/validated_request.rb', line 21

def error
  @error
end

#request_definitionRequest? (readonly)

The request definition if this request is defined in the API description

Returns:



25
26
27
# File 'lib/openapi_first/validated_request.rb', line 25

def request_definition
  @request_definition
end

Instance Method Details

#invalid?Boolean

Checks if the request is invalid.

Returns:

  • (Boolean)


68
# File 'lib/openapi_first/validated_request.rb', line 68

def invalid? = !valid?

#known?Boolean

Returns true if the request is defined.

Returns:

  • (Boolean)


71
# File 'lib/openapi_first/validated_request.rb', line 71

def known? = request_definition != nil

#operationHash

Returns The raw OpenAPI 3 operation object.

Returns:

  • (Hash)

    The raw OpenAPI 3 operation object



33
# File 'lib/openapi_first/validated_request.rb', line 33

def_delegator :request_definition, :operation

#operation_idString?

Returns The OpenAPI 3 operationId.

Returns:

  • (String, nil)

    The OpenAPI 3 operationId



29
# File 'lib/openapi_first/validated_request.rb', line 29

def_delegator :request_definition, :operation_id

#parsed_bodyHash<String, anything>, anything

Parsed body. This parses the body according to the content type. Note that this returns the hole body, not only the fields that are defined in the OpenAPI spec. You can use JSON Schemas additionalProperties or unevaluatedProperties to return a validation error if the body contains unknown fields.

Returns:

  • (Hash<String, anything>, anything)


62
# File 'lib/openapi_first/validated_request.rb', line 62

def parsed_body = @parsed_request&.body

#parsed_cookiesHash<String, anything>

Parsed cookies. This only returns the query parameters that are defined in the OpenAPI spec.

Returns:

  • (Hash<String, anything>)


55
# File 'lib/openapi_first/validated_request.rb', line 55

def parsed_cookies = @parsed_request&.cookies || {}

#parsed_headersHash<String, anything>

Parsed headers. This only returns the query parameters that are defined in the OpenAPI spec.

Returns:

  • (Hash<String, anything>)


51
# File 'lib/openapi_first/validated_request.rb', line 51

def parsed_headers = @parsed_request&.headers || {}

#parsed_paramsHash<String, anything>

Merged path, query, body parameters. Here path has the highest precedence, then query, then body.

Returns:

  • (Hash<String, anything>)


79
80
81
# File 'lib/openapi_first/validated_request.rb', line 79

def parsed_params
  @parsed_params ||= parsed_body.to_h.merge(parsed_query, parsed_path_parameters) || {}
end

#parsed_path_parametersHash<String, anything>

Parsed path parameters

Returns:

  • (Hash<String, anything>)


43
# File 'lib/openapi_first/validated_request.rb', line 43

def parsed_path_parameters = @parsed_request&.path || {}

#parsed_queryHash<String, anything>

Parsed query parameters. This only returns the query parameters that are defined in the OpenAPI spec.

Returns:

  • (Hash<String, anything>)


47
# File 'lib/openapi_first/validated_request.rb', line 47

def parsed_query = @parsed_request&.query || {}

#unknown?Boolean

Returns true if the request is not defined.

Returns:

  • (Boolean)


74
# File 'lib/openapi_first/validated_request.rb', line 74

def unknown? = !known?

#unknown_query_parametersHash

FIXME: Optimize this so it does not have to parse the query string a second time to find unknown parameters

Returns:

  • (Hash)

    Query parameters and values that are not defined in the OpenAPI spec.



37
38
39
# File 'lib/openapi_first/validated_request.rb', line 37

def unknown_query_parameters
  @query_parser&.unknown_values(query_string)
end

#valid?Boolean

Checks if the request is valid.

Returns:

  • (Boolean)


65
# File 'lib/openapi_first/validated_request.rb', line 65

def valid? = error.nil?