123456789_123456789_123456789_123456789_123456789_

Class: ActionDispatch::Http::Headers

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Instance Chain:
self, ::Enumerable
Inherits: Object
Defined in: actionpack/lib/action_dispatch/http/headers.rb

Overview

Provides access to the request’s HTTP headers from the environment.

env     = { "CONTENT_TYPE" => "text/plain", "HTTP_USER_AGENT" => "curl/7.43.0" }
headers = ActionDispatch::Http::Headers.from_hash(env)
headers["Content-Type"] # => "text/plain"
headers["User-Agent"] # => "curl/7.43.0"

Also note that when headers are mapped to CGI-like variables by the ::Rack server, both dashes and underscores are converted to underscores. This ambiguity cannot be resolved at this stage anymore. Both underscores and dashes have to be interpreted as if they were originally sent as dashes.

# GET / HTTP/1.1
# ...
# User-Agent: curl/7.43.0
# X_Custom_Header: token

headers["X_Custom_Header"] # => nil
headers["X-Custom-Header"] # => "token"

Constant Summary

Class Method Summary

Instance Attribute Summary

::Enumerable - Included

#many?

Returns true if the enumerable has more than 1 element.

Instance Method Summary

::Enumerable - Included

#exclude?

The negative of the Enumerable#include?.

#index_by

Convert an enumerable to a hash.

#pluck

Convert an enumerable to an array based on the given key.

#sum

Calculates a sum from the elements.

#without

Returns a copy of the enumerable without the specified elements.

Class Method Details

.from_hash(hash)

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 50

def self.from_hash(hash)
  new ActionDispatch::Request.new hash
end

Instance Method Details

#[](key)

Returns the value for the given key mapped to @env.

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 59

def [](key)
  @req.get_header env_name(key)
end

#[]=(key, value)

Sets the given value for the key mapped to @env.

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 64

def []=(key, value)
  @req.set_header env_name(key), value
end

#add(key, value)

Add a value to a multivalued header like Vary or Accept-Encoding.

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 69

def add(key, value)
  @req.add_header env_name(key), value
end

#each(&block)

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 95

def each(&block)
  @req.each_header(&block)
end

#env

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 116

def env; @req.env.dup; end

#fetch(key, default = DEFAULT)

Returns the value for the given key mapped to @env.

If the key is not found and an optional code block is not provided, raises a KeyError exception.

If the code block is provided, then it will be run and its result returned.

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 87

def fetch(key, default = DEFAULT)
  @req.fetch_header(env_name(key)) do
    return default unless default == DEFAULT
    return yield if block_given?
    raise KeyError, key
  end
end

#include?(key)

Alias for #key?.

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 76

alias :include? :key?

#key?(key) ⇒ Boolean Also known as: #include?

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 73

def key?(key)
  @req.has_header? env_name(key)
end

#merge(headers_or_env)

Returns a new Headers instance containing the contents of headers_or_env and the original instance.

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 101

def merge(headers_or_env)
  headers = @req.dup.headers
  headers.merge!(headers_or_env)
  headers
end

#merge!(headers_or_env)

Adds the contents of headers_or_env to original instance entries; duplicate keys are overwritten with the values from headers_or_env.

[ GitHub ]

  
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 110

def merge!(headers_or_env)
  headers_or_env.each do |key, value|
    @req.set_header env_name(key), value
  end
end