class Hash

Public Class Methods

from_array(array = []) click to toggle source
# File lib/ext/hash.rb, line 60
def self.from_array(array = [])
  h = Hash.new
  array.size.times do |t|
    h[t] = array[t]
  end
  h
end

Public Instance Methods

_escape(value) click to toggle source
# File lib/ext/hash.rb, line 4
def _escape(value)
  Addressable::URI.encode(Addressable::URI.parse(value.to_s))
rescue ArgumentError
  Addressable::URI.encode(Addressable::URI.parse(value.to_s.force_encoding(Encoding::UTF_8)))
end
case_indifferent_delete(key) click to toggle source
# File lib/ext/hash.rb, line 39
def case_indifferent_delete key
  existing_keys = self.keys.map { |k| k.downcase }
  index = existing_keys.index(key.downcase)
  unless index.nil?
    self.delete(self.keys[index])
  end
end
case_indifferent_merge(incoming_hash) click to toggle source
# File lib/ext/hash.rb, line 47
def case_indifferent_merge incoming_hash
  existing_keys = self.keys.map { |k| k.downcase }

  incoming_hash.each do |key, value|
    index = existing_keys.index(key.downcase)
    if index.nil?
      self[key] = value
    else
      self[self.keys[index]] = value
    end
  end
end
to_params() click to toggle source
# File lib/ext/hash.rb, line 10
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 << "#{_escape(k)}=#{_escape(v)}&"
    end
  end

  stack.each do |parent, hash|
    parent = _escape(parent) if parent.is_a? String
    hash.each do |k, v|
      if v.is_a?(Hash)
        stack << ["#{parent}[#{k}]", v]
      else
        params << "#{parent}[#{k}]=#{_escape(v)}&"
      end
    end
  end

  params.chop!
  params
end