Module: OpenapiFirst

Defined in:
lib/openapi_first.rb,
lib/openapi_first/utils.rb,
lib/openapi_first/errors.rb,
lib/openapi_first/router.rb,
lib/openapi_first/version.rb,
lib/openapi_first/operation.rb,
lib/openapi_first/definition.rb,
lib/openapi_first/use_router.rb,
lib/openapi_first/schema_validation.rb,
lib/openapi_first/validation_format.rb,
lib/openapi_first/request_validation.rb,
lib/openapi_first/response_validator.rb,
lib/openapi_first/response_validation.rb,
lib/openapi_first/body_parser_middleware.rb

Defined Under Namespace

Modules: UseRouter, Utils, ValidationFormat Classes: BodyParserMiddleware, BodyParsingError, Definition, Error, HandlerNotFoundError, NotFoundError, NotImplementedError, Operation, RequestInvalidError, RequestValidation, ResponseBodyInvalidError, ResponseCodeNotFoundError, ResponseContentTypeNotFoundError, ResponseInvalid, ResponseValidation, ResponseValidator, Router, SchemaValidation

Constant Summary collapse

OPERATION =
'openapi.operation'
PARAMS =
'openapi.params'
REQUEST_BODY =
'openapi.parsed_request_body'
HANDLER =
'openapi_first.handler'
VERSION =
'1.0.0.beta1'

Class Method Summary collapse

Class Method Details

.app(spec, namespace:, router_raise_error: false, request_validation_raise_error: false, response_validation: false) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/openapi_first.rb', line 32

def self.app(
  spec,
  namespace:,
  router_raise_error: false,
  request_validation_raise_error: false,
  response_validation: false
)
  spec = OpenapiFirst.load(spec) unless spec.is_a?(Definition)
  App.new(
    nil,
    spec,
    namespace: namespace,
    router_raise_error: router_raise_error,
    request_validation_raise_error: request_validation_raise_error,
    response_validation: response_validation
  )
end

.envObject



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

def self.env
  ENV['RACK_ENV'] || ENV['HANAMI_ENV'] || ENV.fetch('RAILS_ENV', nil)
end

.load(spec_path, only: nil) ⇒ Object



23
24
25
26
27
28
29
30
# File 'lib/openapi_first.rb', line 23

def self.load(spec_path, only: nil)
  resolved = Dir.chdir(File.dirname(spec_path)) do
    content = YAML.load_file(File.basename(spec_path))
    JsonRefs.call(content, resolve_local_ref: true, resolve_file_ref: true)
  end
  resolved['paths'].filter!(&->(key, _) { only.call(key) }) if only
  Definition.new(resolved, spec_path)
end