Class: CGIMethods
- Defined in:
- lib/action_controller/cgi_ext/cgi_methods.rb
Overview
Static methods for parsing the query and request parameters that can be used in a CGI extension class or testing in isolation.
Class Method Summary collapse
- .parse_formatted_request_parameters(format, raw_post_data) ⇒ Object
-
.parse_query_parameters(query_string) ⇒ Object
Returns a hash with the pairs from the query string.
-
.parse_request_parameters(params) ⇒ Object
Returns the request (POST/GET) parameters in a parsed form where pairs such as “customer[street]” / “Somewhere cool!” are translated into a full hash hierarchy, like { “customer” => { “address” => { “street” => “Somewhere cool!” } } }.
Class Method Details
.parse_formatted_request_parameters(format, raw_post_data) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/action_controller/cgi_ext/cgi_methods.rb', line 60 def self.parse_formatted_request_parameters(format, raw_post_data) case format when :xml return XmlSimple.xml_in(raw_post_data, 'ForceArray' => false) when :yaml return YAML.load(raw_post_data) end rescue Object => e { "exception" => "#{e.} (#{e.class})", "backtrace" => e.backtrace, "raw_post_data" => raw_post_data, "format" => format } end |
.parse_query_parameters(query_string) ⇒ Object
Returns a hash with the pairs from the query string. The implicit hash construction that is done in parse_request_params is not done here.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/action_controller/cgi_ext/cgi_methods.rb', line 10 def CGIMethods.parse_query_parameters(query_string) parsed_params = {} query_string.split(/[&;]/).each { |p| # Ignore repeated delimiters. next if p.empty? k, v = p.split('=',2) v = nil if (v && v.empty?) k = CGI.unescape(k) if k v = CGI.unescape(v) if v unless k.include?(?[) parsed_params[k] = v else keys = split_key(k) last_key = keys.pop last_key = keys.pop if (use_array = last_key.empty?) parent = keys.inject(parsed_params) {|h, k| h[k] ||= {}} if use_array then (parent[last_key] ||= []) << v else parent[last_key] = v end end } parsed_params end |
.parse_request_parameters(params) ⇒ Object
Returns the request (POST/GET) parameters in a parsed form where pairs such as “customer[street]” / “Somewhere cool!” are translated into a full hash hierarchy, like { “customer” => { “address” => { “street” => “Somewhere cool!” } } }
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/action_controller/cgi_ext/cgi_methods.rb', line 43 def CGIMethods.parse_request_parameters(params) parsed_params = {} for key, value in params value = [value] if key =~ /.*\[\]$/ unless key.include?('[') # much faster to test for the most common case first (GET) # and avoid the call to build_deep_hash parsed_params[key] = get_typed_value(value[0]) else build_deep_hash(get_typed_value(value[0]), parsed_params, get_levels(key)) end end parsed_params end |