Module: Pusher::Request::QueryEncoder

Included in:
Pusher::Request
Defined in:
lib/pusher/request.rb

Overview

Query string encoding extracted with thanks from em-http-request

Instance Method Summary collapse

Instance Method Details

#bytesize(string) ⇒ Object



43
44
45
# File 'lib/pusher/request.rb', line 43

def bytesize(string)
  string.bytesize
end

#encode_param(k, v) ⇒ Object

URL encodes query parameters: single k=v, or a URL encoded array, if v is an array of values



24
25
26
27
28
29
30
# File 'lib/pusher/request.rb', line 24

def encode_param(k, v)
  if v.is_a?(Array)
    v.map { |e| escape(k) + "[]=" + escape(e) }.join("&")
  else
    escape(k) + "=" + escape(v)
  end
end

#encode_query(uri, query) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/pusher/request.rb', line 9

def encode_query(uri, query)
  encoded_query = if query.kind_of?(Hash)
    query.map { |k, v| encode_param(k, v) }.join('&')
  else
    query.to_s
  end

  if uri && !uri.query.to_s.empty?
    encoded_query = [encoded_query, uri.query].reject {|part| part.empty?}.join("&")
  end
  encoded_query.to_s.empty? ? uri.path : "#{uri.path}?#{encoded_query}"
end

#escape(s) ⇒ Object



32
33
34
35
36
37
38
39
40
# File 'lib/pusher/request.rb', line 32

def escape(s)
  if defined?(EscapeUtils)
    EscapeUtils.escape_url(s.to_s)
  else
    s.to_s.gsub(/([^a-zA-Z0-9_.-]+)/n) {
      '%'+$1.unpack('H2'*bytesize($1)).join('%').upcase
    }
  end
end