class Flipper::Api::JsonParams
Constants
- CONTENT_TYPE
- QUERY_STRING
- REQUEST_BODY
Public Class Methods
new(app)
click to toggle source
# File lib/flipper/api/json_params.rb, line 8 def initialize(app) @app = app end
Public Instance Methods
call(env)
click to toggle source
Public: Merge request body params with query string params This way can access all params with Rack::Request#params Rack does not add application/json params to Rack::Request#params Allows app to handle x-www-url-form-encoded / application/json request parameters the same way
# File lib/flipper/api/json_params.rb, line 21 def call(env) if env[CONTENT_TYPE] == 'application/json' body = env[REQUEST_BODY].read env[REQUEST_BODY].rewind update_params(env, body) end @app.call(env) end
Private Instance Methods
update_params(env, data)
click to toggle source
Rails 3.2.2.1 Rack version does not have Rack::Request#update_param Rack 1.5.0 adds update_param This method accomplishes similar functionality
# File lib/flipper/api/json_params.rb, line 35 def update_params(env, data) return if data.empty? parsed_request_body = JSON.parse(data) parsed_query_string = parse_query(env[QUERY_STRING]) parsed_query_string.merge!(parsed_request_body) parameters = build_query(parsed_query_string) env[QUERY_STRING] = parameters end