Class: CGIMethods

Inherits:
Object show all
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

Class Method Details

.parse_formatted_request_parameters(format, raw_post_data) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
# File 'lib/action_controller/cgi_ext/cgi_methods.rb', line 51

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.message} (#{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
# 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| 
    k, v = p.split('=',2)
    v = nil if (!v.nil? && v.empty?)

    k = CGI.unescape(k) unless k.nil?
    v = CGI.unescape(v) unless v.nil?

    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
  }
  
  return 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!” } } }



36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/action_controller/cgi_ext/cgi_methods.rb', line 36

def CGIMethods.parse_request_parameters(params)
  parsed_params = {}

  for key, value in params
    value = [value] if key =~ /.*\[\]$/
    CGIMethods.build_deep_hash(
      CGIMethods.get_typed_value(value[0]),
      parsed_params, 
      CGIMethods.get_levels(key)
    )
  end

  return parsed_params
end