Class: OpenapiFirst::RuntimeRequest

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

Overview

RuntimeRequest represents how an incoming request (Rack::Request) matches a request definition.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(request:, path_item:, operation:, path_params:) ⇒ RuntimeRequest

Returns a new instance of RuntimeRequest.



14
15
16
17
18
19
# File 'lib/openapi_first/runtime_request.rb', line 14

def initialize(request:, path_item:, operation:, path_params:)
  @request = request
  @path_item = path_item
  @operation = operation
  @original_path_params = path_params
end

Instance Attribute Details

#operationObject (readonly)

Returns the value of attribute operation.



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

def operation
  @operation
end

#path_itemObject (readonly)

Returns the value of attribute path_item.



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

def path_item
  @path_item
end

Instance Method Details

#bodyObject Also known as: parsed_body



73
74
75
# File 'lib/openapi_first/runtime_request.rb', line 73

def body
  @body ||= BodyParser.new.parse(request, request.media_type)
end

#cookiesObject



66
67
68
69
70
71
# File 'lib/openapi_first/runtime_request.rb', line 66

def cookies
  return {} unless operation.cookie_parameters

  @cookies ||=
    OpenapiParameters::Cookie.new(operation.cookie_parameters).unpack(request.env[Rack::HTTP_COOKIE]) || {}
end

#headersObject



60
61
62
63
64
# File 'lib/openapi_first/runtime_request.rb', line 60

def headers
  return {} unless operation.header_parameters

  @headers ||= OpenapiParameters::Header.new(operation.header_parameters).unpack_env(request.env) || {}
end

#known?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/openapi_first/runtime_request.rb', line 27

def known?
  known_path? && known_request_method?
end

#known_path?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/openapi_first/runtime_request.rb', line 31

def known_path?
  !!path_item
end

#known_request_method?Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/openapi_first/runtime_request.rb', line 35

def known_request_method?
  !!operation
end

#paramsObject

Merged path and query parameters



40
41
42
# File 'lib/openapi_first/runtime_request.rb', line 40

def params
  @params ||= query.merge(path_parameters)
end

#path_parametersObject



44
45
46
47
48
49
# File 'lib/openapi_first/runtime_request.rb', line 44

def path_parameters
  return {} unless operation.path_parameters

  @path_parameters ||=
    OpenapiParameters::Path.new(operation.path_parameters).unpack(@original_path_params) || {}
end

#queryObject Also known as: query_parameters



51
52
53
54
55
56
# File 'lib/openapi_first/runtime_request.rb', line 51

def query
  return {} unless operation.query_parameters

  @query ||=
    OpenapiParameters::Query.new(operation.query_parameters).unpack(request.env[Rack::QUERY_STRING]) || {}
end

#response(rack_response) ⇒ Object



87
88
89
# File 'lib/openapi_first/runtime_request.rb', line 87

def response(rack_response)
  RuntimeResponse.new(operation, rack_response)
end

#validateObject



78
79
80
# File 'lib/openapi_first/runtime_request.rb', line 78

def validate
  RequestValidation::Validator.new(operation).validate(self)
end

#validate!Object



82
83
84
85
# File 'lib/openapi_first/runtime_request.rb', line 82

def validate!
  error = validate
  error&.raise!
end