Class: Hanami::Middleware::BodyParser

Inherits:
Object
  • Object
show all
Extended by:
ClassInterface
Defined in:
lib/hanami/middleware/body_parser.rb,
lib/hanami/middleware/body_parser/errors.rb,
lib/hanami/middleware/body_parser/parser.rb,
lib/hanami/middleware/body_parser/json_parser.rb,
lib/hanami/middleware/body_parser/class_interface.rb

Overview

HTTP request body parser

Since:

  • 1.3.0

Defined Under Namespace

Modules: ClassInterface Classes: BodyParsingError, InvalidParserError, JsonParser, Parser, UnknownParserError

Constant Summary collapse

CONTENT_TYPE =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Since:

  • 1.3.0

"CONTENT_TYPE"
MEDIA_TYPE_MATCHER =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Since:

  • 1.3.0

/\s*[;,]\s*/
RACK_INPUT =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Since:

  • 1.3.0

"rack.input"
ROUTER_PARAMS =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Since:

  • 1.3.0

"router.params"
FALLBACK_KEY =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

Since:

  • 1.3.0

"_"

Instance Method Summary collapse

Methods included from ClassInterface

build, build_parsers, new

Constructor Details

#initialize(app, parsers) ⇒ BodyParser

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of BodyParser.

Since:

  • 1.3.0



36
37
38
39
# File 'lib/hanami/middleware/body_parser.rb', line 36

def initialize(app, parsers)
  @app = app
  @parsers = parsers
end

Instance Method Details

#call(env) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Since:

  • 1.3.0



41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/hanami/middleware/body_parser.rb', line 41

def call(env)
  body = env[RACK_INPUT].read
  return @app.call(env) if body.empty?

  env[RACK_INPUT].rewind # somebody might try to read this stream

  if (parser = @parsers[media_type(env)])
    env[Router::ROUTER_PARSED_BODY] = parser.parse(body)
    env[ROUTER_PARAMS] = _symbolize(env[Router::ROUTER_PARSED_BODY])
  end

  @app.call(env)
end