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
- #bytesize(string) ⇒ Object
-
#encode_param(k, v) ⇒ Object
URL encodes query parameters: single k=v, or a URL encoded array, if v is an array of values.
- #encode_query(uri, query) ⇒ Object
- #escape(s) ⇒ Object
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 |