Class: OpenapiFirst::BodyParserMiddleware

Inherits:
Object
  • Object
show all
Defined in:
lib/openapi_first/body_parser_middleware.rb

Constant Summary collapse

RACK_INPUT =
'rack.input'
ROUTER_PARSED_BODY =
'router.parsed_body'

Instance Method Summary collapse

Constructor Details

#initialize(app, options = {}) ⇒ BodyParserMiddleware

Returns a new instance of BodyParserMiddleware.



7
8
9
10
# File 'lib/openapi_first/body_parser_middleware.rb', line 7

def initialize(app, options = {})
  @app = app
  @raise = options.fetch(:raise_error, false)
end

Instance Method Details

#call(env) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/openapi_first/body_parser_middleware.rb', line 15

def call(env)
  env[ROUTER_PARSED_BODY] = parse_body(env)
  @app.call(env)
rescue BodyParsingError => e
  raise if @raise

  err = { title: "Failed to parse body as #{env['CONTENT_TYPE']}", status: '400' }
  err[:detail] = e.cause unless ENV['RACK_ENV'] == 'production'
  errors = [err]

  Rack::Response.new(
    MultiJson.dump(errors: errors),
    400,
    Rack::CONTENT_TYPE => 'application/vnd.api+json'
  ).finish
end