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 This is returned by OpenapiFirst.load.

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.

Parameters:

  • resolved (Hash)

    The resolved OpenAPI document.

  • filepath (String) (defaults to: nil)

    The file path of the OpenAPI document.



17
18
19
20
21
# File 'lib/openapi_first/definition.rb', line 17

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.



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

def filepath
  @filepath
end

#openapi_versionObject (readonly)

Returns the value of attribute openapi_version.



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

def openapi_version
  @openapi_version
end

#pathsObject (readonly)

Returns the value of attribute paths.



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

def paths
  @paths
end

Instance Method Details

#operationsArray<Operation>

Gets all the operations defined in the API description.

Returns:

  • (Array<Operation>)

    An array of Operation objects.



66
67
68
# File 'lib/openapi_first/definition.rb', line 66

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

#path(pathname) ⇒ PathItem

Gets the PathItem object for the specified path. Example:

definition.path('/pets/{id}')

Parameters:

  • pathname (String)

    The path template string.

Returns:



75
76
77
78
79
# File 'lib/openapi_first/definition.rb', line 75

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

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

#request(rack_request) ⇒ RuntimeRequest

Builds a RuntimeRequest object based on the Rack request.

Parameters:

  • rack_request (Rack::Request)

    The Rack request object.

Returns:



45
46
47
48
49
50
51
52
53
54
# File 'lib/openapi_first/definition.rb', line 45

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) ⇒ RuntimeResponse

Builds a RuntimeResponse object based on the Rack request and response.

Parameters:

  • rack_request (Rack::Request)

    The Rack request object.

  • rack_response (Rack::Response)

    The Rack response object.

Returns:



60
61
62
# File 'lib/openapi_first/definition.rb', line 60

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

#validate_request(rack_request, raise_error: false) ⇒ RuntimeRequest

Validates the request against the API description.

Parameters:

  • rack_request (Rack::Request)

    The Rack request object.

  • raise_error (Boolean) (defaults to: false)

    Whether to raise an error if validation fails.

Returns:



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

def validate_request(rack_request, raise_error: false)
  validated = request(rack_request).tap(&:validate)
  validated.error&.raise! if raise_error
  validated
end

#validate_response(rack_request, rack_response, raise_error: false) ⇒ RuntimeResponse

Validates the response against the API description.

Parameters:

  • rack_request (Rack::Request)

    The Rack request object.

  • rack_response (Rack::Response)

    The Rack response object.

  • raise_error (Boolean) (defaults to: false)

    Whether to raise an error if validation fails.

Returns:



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

def validate_response(rack_request, rack_response, raise_error: false)
  request(rack_request).validate_response(rack_response, raise_error:)
end