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