Class: OpenapiFirst::Definition

Inherits:
Object
  • Object
show all
Defined in:
lib/openapi_first/definition.rb,
lib/openapi_first/definition/response.rb,
lib/openapi_first/definition/operation.rb,
lib/openapi_first/definition/path_item.rb,
lib/openapi_first/definition/responses.rb,
lib/openapi_first/definition/request_body.rb

Overview

Represents an OpenAPI API Description document

Defined Under Namespace

Classes: Operation, PathItem, RequestBody, Response

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resolved, filepath = nil) ⇒ Definition

Returns a new instance of Definition.



12
13
14
15
16
# File 'lib/openapi_first/definition.rb', line 12

def initialize(resolved, filepath = nil)
  @filepath = filepath
  @paths = resolved['paths']
  @openapi_version = detect_version(resolved)
end

Instance Attribute Details

#filepathObject (readonly)

Returns the value of attribute filepath.



10
11
12
# File 'lib/openapi_first/definition.rb', line 10

def filepath
  @filepath
end

#openapi_versionObject (readonly)

Returns the value of attribute openapi_version.



10
11
12
# File 'lib/openapi_first/definition.rb', line 10

def openapi_version
  @openapi_version
end

#pathsObject (readonly)

Returns the value of attribute paths.



10
11
12
# File 'lib/openapi_first/definition.rb', line 10

def paths
  @paths
end

Instance Method Details

#operationsObject



33
34
35
# File 'lib/openapi_first/definition.rb', line 33

def operations
  @operations ||= path_items.flat_map(&:operations)
end

#path(pathname) ⇒ Object



37
38
39
40
41
# File 'lib/openapi_first/definition.rb', line 37

def path(pathname)
  return unless paths.key?(pathname)

  PathItem.new(pathname, paths[pathname], openapi_version:)
end

#request(rack_request) ⇒ Object



18
19
20
21
22
23
24
25
26
27
# File 'lib/openapi_first/definition.rb', line 18

def request(rack_request)
  path_item, path_params = find_path_item_and_params(rack_request.path)
  operation = path_item&.operation(rack_request.request_method.downcase)
  RuntimeRequest.new(
    request: rack_request,
    path_item:,
    operation:,
    path_params:
  )
end

#response(rack_request, rack_response) ⇒ Object



29
30
31
# File 'lib/openapi_first/definition.rb', line 29

def response(rack_request, rack_response)
  request(rack_request).response(rack_response)
end