class Rack::JSON

Constants

APPLICATION_JSON
FORM_HASH
FORM_INPUT

Public Class Methods

new(app) click to toggle source
# File lib/rack/json.rb, line 26
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack/json.rb, line 30
def call(env)
  request = Rack::Request.new env

  if request.media_type == APPLICATION_JSON && !(body = request.body.read).empty?
    request.body.rewind
    parsed = parse_json body
    parsed = {'_json' => parsed} unless parsed.is_a? Hash

    env.update FORM_HASH  => parsed, FORM_INPUT => request.body
  end

  @app.call env

rescue json_parser_error_class => e
  on_parse_error e
end
json_parser_error_class() click to toggle source

Override to use a different parser

# File lib/rack/json.rb, line 16
def json_parser_error_class
  ::JSON::ParserError
end
on_parse_error(e) click to toggle source

Override for different error behavior

# File lib/rack/json.rb, line 21
def on_parse_error(e)
  message = "Invalid JSON"
  [400, {'Content-Length' => message.length}, [message]]
end
parse_json(json) click to toggle source

Override to use a different parser

# File lib/rack/json.rb, line 11
def parse_json(json)
  ::JSON.parse(json, :create_additions => false)
end