Module: OpenapiFirst

Defined in:
lib/openapi_first.rb,
lib/openapi_first/test.rb,
lib/openapi_first/errors.rb,
lib/openapi_first/header.rb,
lib/openapi_first/router.rb,
lib/openapi_first/builder.rb,
lib/openapi_first/failure.rb,
lib/openapi_first/request.rb,
lib/openapi_first/version.rb,
lib/openapi_first/registry.rb,
lib/openapi_first/response.rb,
lib/openapi_first/test/app.rb,
lib/openapi_first/definition.rb,
lib/openapi_first/file_loader.rb,
lib/openapi_first/schema/hash.rb,
lib/openapi_first/ref_resolver.rb,
lib/openapi_first/test/methods.rb,
lib/openapi_first/test/observe.rb,
lib/openapi_first/configuration.rb,
lib/openapi_first/test/callable.rb,
lib/openapi_first/test/coverage.rb,
lib/openapi_first/error_response.rb,
lib/openapi_first/parsed_request.rb,
lib/openapi_first/response_parser.rb,
lib/openapi_first/request_validator.rb,
lib/openapi_first/validated_request.rb,
lib/openapi_first/response_validator.rb,
lib/openapi_first/test/configuration.rb,
lib/openapi_first/test/coverage/plan.rb,
lib/openapi_first/test/plain_helpers.rb,
lib/openapi_first/validated_response.rb,
lib/openapi_first/child_configuration.rb,
lib/openapi_first/router/find_content.rb,
lib/openapi_first/request_body_parsers.rb,
lib/openapi_first/router/find_response.rb,
lib/openapi_first/router/path_template.rb,
lib/openapi_first/response_body_parsers.rb,
lib/openapi_first/test/coverage/tracker.rb,
lib/openapi_first/test/minitest_helpers.rb,
lib/openapi_first/error_responses/default.rb,
lib/openapi_first/error_responses/jsonapi.rb,
lib/openapi_first/schema/validation_error.rb,
lib/openapi_first/validators/request_body.rb,
lib/openapi_first/schema/validation_result.rb,
lib/openapi_first/test/coverage/route_task.rb,
lib/openapi_first/test/observer_middleware.rb,
lib/openapi_first/validators/response_body.rb,
lib/openapi_first/test/coverage/request_task.rb,
lib/openapi_first/test/coverage/response_task.rb,
lib/openapi_first/validators/response_headers.rb,
lib/openapi_first/test/coverage/covered_request.rb,
lib/openapi_first/validators/request_parameters.rb,
lib/openapi_first/middlewares/request_validation.rb,
lib/openapi_first/test/coverage/covered_response.rb,
lib/openapi_first/middlewares/response_validation.rb,
lib/openapi_first/test/coverage/terminal_formatter.rb

Overview

OpenapiFirst is a toolchain to build HTTP APIS based on OpenAPI API descriptions.

Defined Under Namespace

Modules: ErrorResponse, ErrorResponses, Middlewares, Schema, Test, Validators Classes: AlreadyRegisteredError, Builder, ChildConfiguration, Configuration, Definition, Error, Failure, FileNotFoundError, Header, NotFoundError, NotRegisteredError, ParseError, ParsedRequest, ParsedResponse, Request, RequestInvalidError, RequestValidator, Response, ResponseInvalidError, ResponseNotFoundError, ResponseParser, ResponseValidator, Router, ValidatedRequest, ValidatedResponse

Constant Summary collapse

REQUEST =

Key in rack to find instance of Request

'openapi.request'
FAILURE =
:openapi_first_validation_failure
VERSION =
'3.2.1'

Class Method Summary collapse

Class Method Details

.configurationConfiguration

Returns:



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

def self.configuration
  @configuration ||= Configuration.new
end

.configure {|Configuration| ... } ⇒ Configuration

Yields:

Returns:



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

def self.configure
  yield configuration if block_given?
end

.find_error_response(name) ⇒ Class

Returns The error response class.

Parameters:

Returns:

  • The error response class



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

def self.find_error_response(name)
  ERROR_RESPONSES.fetch(name) do
    raise "Unknown error response: #{name}. " \
          'Register your error response class via `OpenapiFirst.register_error_response(name, klass)`. ' \
          "Registered error responses are: #{ERROR_RESPONSES.keys.join(', ')}."
  end
end

.load(filepath_or_definition, only: nil, path_prefix: nil) ⇒ Definition

Load and dereference an OpenAPI spec file or return the Definition if it’s already loaded true/false

Parameters:

  • The path to the file or a Definition object

  • (defaults to: nil)

    An optional proc to filter paths. It is called with the path string and should return

  • (defaults to: nil)

    An optional path prefix, that is not documented, that all requests begin with.

Returns:

Raises:



62
63
64
65
66
67
68
69
70
71
# File 'lib/openapi_first.rb', line 62

def self.load(filepath_or_definition, only: nil, path_prefix: nil, &)
  return filepath_or_definition if filepath_or_definition.is_a?(Definition)
  return self[filepath_or_definition] if filepath_or_definition.is_a?(Symbol)

  filepath = filepath_or_definition
  raise FileNotFoundError, "File not found: #{filepath}" unless File.exist?(filepath)

  contents = FileLoader.load(filepath)
  parse(contents, only:, filepath:, path_prefix:, &)
end

.parse(contents, only: nil, filepath: nil, path_prefix: nil) ⇒ Definition

Parse a dereferenced Hash TODO: This needs to work with unresolved contents as well

Returns:



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

def self.parse(contents, only: nil, filepath: nil, path_prefix: nil, &)
  contents = ::JSON.parse(::JSON.generate(contents)) # Deeply stringify keys, because of YAML. See https://github.com/ahx/openapi_first/issues/367
  contents['paths'].filter!(&->(key, _) { only.call(key) }) if only
  Definition.new(contents, filepath, path_prefix, &)
end

.register_error_response(name, klass) ⇒ Object

Register an error response class

Parameters:

  • A class that includes / implements OpenapiFirst::ErrorResponse



42
43
44
# File 'lib/openapi_first.rb', line 42

def self.register_error_response(name, klass)
  ERROR_RESPONSES[name.to_sym] = klass
end