Sha256: 44d309a6a6d67b86f879e378e989bd2bd0bea9e908a86c506baaa0559bb09811

Contents?: true

Size: 1.17 KB

Versions: 45

Compression:

Stored size: 1.17 KB

Contents

class Hash
  # Stolen partially from Merb : http://noobkit.com/show/ruby/gems/development/merb/hash/to_params.html
  # Convert this hash to a query string:
  #   
  #   { :name => "Bob",
  #     :address => {
  #       :street => '111 Ruby Ave.',
  #       :city => 'Ruby Central',
  #       :phones => ['111-111-1111', '222-222-2222']
  #     }
  #   }.to_params
  #   #=> "name=Bob&address[city]=Ruby Central&address[phones]=111-111-1111222-222-2222&address[street]=111 Ruby Ave."
  # 
  def to_params
    params = ''
    stack = []
    
    each do |k, v|
      if v.is_a?(Hash)
        stack << [k,v]
      elsif v.is_a?(Array)
        stack << [k,Hash.from_array(v)]
      else
        params << "#{k}=#{v}&"
      end
    end
    
    stack.each do |parent, hash|
      hash.each do |k, v|
        if v.is_a?(Hash)
          stack << ["#{parent}[#{k}]", v]
        else
          params << "#{parent}[#{k}]=#{v}&"
        end
      end
    end
    
    params.chop! # trailing &
    params
  end
  
  ##
  # Builds a hash from an array with keys as array indices.
  def self.from_array(array = [])
    h = Hash.new
    array.size.times do |t|
      h[t] = array[t]
    end
    h
  end

end

Version data entries

45 entries across 45 versions & 7 rubygems

Version Path
astro-em-http-request-0.1.5 lib/em-http/core_ext/hash.rb
astro-em-http-request-0.1.6 lib/em-http/core_ext/hash.rb
camerontaylor-em-http-request-0.1.7 lib/em-http/core_ext/hash.rb
dwaite-em-http-request-0.1.10 lib/em-http/core_ext/hash.rb
dwaite-em-http-request-0.1.9 lib/em-http/core_ext/hash.rb
igrigorik-em-http-request-0.1.5 lib/em-http/core_ext/hash.rb
igrigorik-em-http-request-0.1.6 lib/em-http/core_ext/hash.rb
igrigorik-em-http-request-0.1.7 lib/em-http/core_ext/hash.rb
julien51-em-http-request-0.1.10 lib/em-http/core_ext/hash.rb
julien51-em-http-request-0.1.11 lib/em-http/core_ext/hash.rb
julien51-em-http-request-0.1.9 lib/em-http/core_ext/hash.rb
goshrine_bot-0.2.0 lib/goshrine_bot/core_ext/hash.rb
goshrine_bot-0.1.13 lib/goshrine_bot/core_ext/hash.rb
igrigorik-em-http-request-0.1.8 lib/em-http/core_ext/hash.rb
goshrine_bot-0.1.11 lib/goshrine_bot/core_ext/hash.rb
goshrine_bot-0.1.10 lib/goshrine_bot/core_ext/hash.rb
goshrine_bot-0.1.9 lib/goshrine_bot/core_ext/hash.rb
goshrine_bot-0.1.8 lib/goshrine_bot/core_ext/hash.rb
goshrine_bot-0.1.7 lib/goshrine_bot/core_ext/hash.rb
goshrine_bot-0.1.6 lib/goshrine_bot/core_ext/hash.rb