Module: Rho::RhoSupport

Defined in:
lib/rho/rhosupport.rb

Defined Under Namespace

Classes: UrlEncodedPairParser

Constant Summary collapse

ESCAPED =
/%([0-9a-fA-F]{2})/

Class Method Summary collapse

Class Method Details

._unescape(str, regex) ⇒ Object



12
# File 'lib/rho/rhosupport.rb', line 12

def _unescape(str, regex) str.gsub(regex){ $1.hex.chr } end

.parse_query_parameters(query_string) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/rho/rhosupport.rb', line 20

def parse_query_parameters(query_string)
  return {} if query_string.nil?

  pairs = query_string.split('&').collect do |chunk|
    next if chunk.empty?
    key, value = chunk.split('=', 2)
    next if key.empty?
    value = value.nil? ? nil : unescape_form(value)
    [ unescape_form(key), value ]
  end.compact

  UrlEncodedPairParser.new(pairs).result
end

.query_params(req) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/rho/rhosupport.rb', line 34

def query_params(req)
  params = {}
  unless req['id'].nil?
    params['id'] = req['id']
  end
  unless req['request-query'].nil? or req['request-query'].length == 0
    params.merge!(parse_query_parameters(req['request-query']))				
  end
  unless req['headers'].nil? or req['headers']['Content-Type'].nil?
    if 'application/x-www-form-urlencoded'.eql? req['headers']['Content-Type']
      params.merge!(parse_query_parameters(req['request-body']))
    end	
  end
  puts "Params: " + params.to_s unless params.empty?
  params
end

.unescape_form(str) ⇒ Object



16
17
18
# File 'lib/rho/rhosupport.rb', line 16

def unescape_form(str)
  _unescape(str.gsub(/\+/, " "), ESCAPED)
end

.url_encode(s) ⇒ Object



6
7
8
9
10
# File 'lib/rho/rhosupport.rb', line 6

def url_encode(s)
  s.to_s.dup.force_encoding("ASCII-8BIT").gsub(/[^a-zA-Z0-9_\-.]/n) {
    sprintf("%%%02X", $&.unpack("C")[0])
  }
end