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