class Rack::Headers

Rack::Headers is a Hash subclass that downcases all keys. It’s designed to be used by rack applications that don’t implement the Rack 3 SPEC (by using non-lowercase response header keys), automatically handling the downcasing of keys.

Constants

KNOWN_HEADERS

Public Class Methods

# File lib/rack/headers.rb, line 91
def self.[](*items)
  if items.length % 2 != 0
    if items.length == 1 && items.first.is_a?(Hash)
      new.merge!(items.first)
    else
      raise ArgumentError, "odd number of arguments for Rack::Headers"
    end
  else
    hash = new
    loop do
      break if items.length == 0
      key = items.shift
      value = items.shift
      hash[key] = value
    end
    hash
  end
end

Public Instance Methods

Calls superclass method
# File lib/rack/headers.rb, line 110
def [](key)
  super(downcase_key(key))
end
Calls superclass method
# File lib/rack/headers.rb, line 114
def []=(key, value)
  super(KNOWN_HEADERS[key] || key.downcase.freeze, value)
end
Also aliased as: store
Calls superclass method
# File lib/rack/headers.rb, line 119
def assoc(key)
  super(downcase_key(key))
end
# File lib/rack/headers.rb, line 123
def compare_by_identity
  raise TypeError, "Rack::Headers cannot compare by identity, use regular Hash"
end
Calls superclass method
# File lib/rack/headers.rb, line 127
def delete(key)
  super(downcase_key(key))
end
Calls superclass method
# File lib/rack/headers.rb, line 131
def dig(key, *a)
  super(downcase_key(key), *a)
end

:nocov:

Calls superclass method
# File lib/rack/headers.rb, line 227
def except(*a)
  super(*a.map!{|key| downcase_key(key)})
end
Calls superclass method
# File lib/rack/headers.rb, line 135
def fetch(key, *default, &block)
  key = downcase_key(key)
  super
end
Calls superclass method
# File lib/rack/headers.rb, line 140
def fetch_values(*a)
  super(*a.map!{|key| downcase_key(key)})
end
Calls superclass method
# File lib/rack/headers.rb, line 144
def has_key?(key)
  super(downcase_key(key))
end
Also aliased as: include?, key?, member?
# File lib/rack/headers.rb, line 151
def invert
  hash = self.class.new
  each{|key, value| hash[value] = key}
  hash
end
# File lib/rack/headers.rb, line 157
def merge(hash, &block)
  dup.merge!(hash, &block)
end
# File lib/rack/headers.rb, line 161
def reject(&block)
  hash = dup
  hash.reject!(&block)
  hash
end
# File lib/rack/headers.rb, line 167
def replace(hash)
  clear
  update(hash)
end
# File lib/rack/headers.rb, line 172
def select(&block)
  hash = dup
  hash.select!(&block)
  hash
end

:nocov:

# File lib/rack/headers.rb, line 205
def slice(*a)
  h = self.class.new
  a.each{|k| h[k] = self[k] if has_key?(k)}
  h
end
# File lib/rack/headers.rb, line 178
def to_proc
  lambda{|x| self[x]}
end
# File lib/rack/headers.rb, line 211
def transform_keys(&block)
  dup.transform_keys!(&block)
end
# File lib/rack/headers.rb, line 215
def transform_keys!
  hash = self.class.new
  each do |k, v|
    hash[yield k] = v
  end
  replace(hash)
end
# File lib/rack/headers.rb, line 182
def transform_values(&block)
  dup.transform_values!(&block)
end
# File lib/rack/headers.rb, line 186
def update(hash, &block)
  hash.each do |key, value|
    self[key] = if block_given? && include?(key)
      block.call(key, self[key], value)
    else
      value
    end
  end
  self
end
Also aliased as: merge!
# File lib/rack/headers.rb, line 198
def values_at(*keys)
  keys.map{|key| self[key]}
end