Sha256: 8d056f30fe5c724422c0658b21b2e704ab787a2d32bd8931eef5f24d4adf2025

Contents?: true

Size: 1.13 KB

Versions: 4

Compression:

Stored size: 1.13 KB

Contents

module Puma
  module Utils
    # Performs URI escaping so that you can construct proper
    # query strings faster.  Use this rather than the cgi.rb
    # version since it's faster.  (Stolen from Camping).
    def self.escape(s)
      s.to_s.gsub(/([^ a-zA-Z0-9_.-]+)/n) {
        '%'+$1.unpack('H2'*$1.size).join('%').upcase
      }.tr(' ', '+') 
    end


    # Unescapes a URI escaped string. (Stolen from Camping).
    def self.unescape(s)
      s.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n){
        [$1.delete('%')].pack('H*')
      } 
    end

    # Parses a query string by breaking it up at the '&' 
    # and ';' characters.  You can also use this to parse
    # cookies by changing the characters used in the second
    # parameter (which defaults to '&;'.
    def self.query_parse(qs, d = '&;')
      params = {}

      qs.split(/[#{d}] */n).each do |p|
        k, v = unescape(p).split('=', 2)

        if cur = params[k]
          if cur.kind_of? Array
            params[k] << v
          else
            params[k] = [cur, v]
          end
        else
          params[k] = v
        end
      end

      return params
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
puma-0.8.2-java lib/puma/utils.rb
puma-0.8.2 lib/puma/utils.rb
puma-0.8.1 lib/puma/utils.rb
puma-0.8.0 lib/puma/utils.rb