require 'cgi' module Jangle # This filter adds querystring variables to a request. If they are in the querystring # already, they are overwritten if @overwrite is set to true; otherwise # the original value is retained. class QuerystringAddingFilter attr_accessor :fields_to_add, :overwrite def initialize(fields_to_add={}, overwrite=false) @fields_to_add = fields_to_add @overwrite = overwrite end def filter(rack_request) LOGGER.debug "Original querystring before filtering: " + rack_request.query_string querystring_vars = rack_request.GET if @overwrite querystring_vars.merge!(@fields_to_add) { |_, _, new_val| new_val } else querystring_vars.merge!(@fields_to_add) { |_, old_val, _| old_val } end new_querystring = [] querystring_vars.each do |key, value| new_querystring.push("#{key}=" + CGI.escape(value)) end rack_request.env["rack.request.query_hash"] = querystring_vars rack_request.env["QUERY_STRING"] = new_querystring.join('&') LOGGER.debug "Querystring after filtering: " + rack_request.query_string end end end