class Excon::Headers

def [](key)

def [](key)
  @downcased[key.to_s.downcase]
end

def []=(key, value)

def []=(key, value)
  raw_writer(key, value)
  @downcased[key.to_s.downcase] = value
end

def assoc(obj)

def assoc(obj)
  @downcased.assoc(obj.downcase)
end

def delete(key, &proc)

def delete(key, &proc)
  raw_delete(key, &proc)
  @downcased.delete(key.to_s.downcase, &proc)
end

def fetch(key, default = nil, &proc)

def fetch(key, default = nil, &proc)
  if proc
    @downcased.fetch(key.to_s.downcase, &proc)
  else
    @downcased.fetch(key.to_s.downcase, default)
  end
end

def has_key?(key)

def has_key?(key)
  raw_key?(key) || @downcased.has_key?(key.to_s.downcase)
end

def initialize

def initialize
  super
  @downcased = {}
end

def merge(other_hash)

def merge(other_hash)
  self.dup.merge!(other_hash)
end

def merge!(other_hash)

def merge!(other_hash)
  other_hash.each do |key, value|
    self[key] = value
  end
  raw_merge!(other_hash)
end

def rehash

def rehash
  @downcased.rehash
  raw_rehash
end

def values_at(*keys)

def values_at(*keys)
  @downcased.values_at(*keys.map {|key| key.to_s.downcase})
end