Class: ActionDispatch::Http::Headers
- Includes:
- Enumerable
- 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 collapse
- CGI_VARIABLES =
Set.new(%W[ AUTH_TYPE CONTENT_LENGTH CONTENT_TYPE GATEWAY_INTERFACE HTTPS PATH_INFO PATH_TRANSLATED QUERY_STRING REMOTE_ADDR REMOTE_HOST REMOTE_IDENT REMOTE_USER REQUEST_METHOD SCRIPT_NAME SERVER_NAME SERVER_PORT SERVER_PROTOCOL SERVER_SOFTWARE ]).freeze
- HTTP_HEADER =
/\A[A-Za-z0-9-]+\z/
- DEFAULT =
:nodoc:
Object.new
Class Method Summary collapse
Instance Method Summary collapse
-
#[](key) ⇒ Object
Returns the value for the given key mapped to @env.
-
#[]=(key, value) ⇒ Object
Sets the given value for the key mapped to @env.
-
#add(key, value) ⇒ Object
Add a value to a multivalued header like
Vary
orAccept-Encoding
. - #each(&block) ⇒ Object
- #env ⇒ Object
-
#fetch(key, default = DEFAULT) ⇒ Object
Returns the value for the given key mapped to @env.
-
#initialize(request) ⇒ Headers
constructor
:nodoc:.
- #key?(key) ⇒ Boolean (also: #include?)
-
#merge(headers_or_env) ⇒ Object
Returns a new Http::Headers instance containing the contents of
headers_or_env
and the original instance. -
#merge!(headers_or_env) ⇒ Object
Adds the contents of
headers_or_env
to original instance entries; duplicate keys are overwritten with the values fromheaders_or_env
.
Methods included from Enumerable
Constructor Details
#initialize(request) ⇒ Headers
:nodoc:
54 55 56 |
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 54 def initialize(request) # :nodoc: @req = request end |
Class Method Details
.from_hash(hash) ⇒ Object
50 51 52 |
# 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) ⇒ Object
Returns the value for the given key mapped to @env.
59 60 61 |
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 59 def [](key) @req.get_header env_name(key) end |
#[]=(key, value) ⇒ Object
Sets the given value for the key mapped to @env.
64 65 66 |
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 64 def []=(key, value) @req.set_header env_name(key), value end |
#add(key, value) ⇒ Object
Add a value to a multivalued header like Vary
or Accept-Encoding
.
69 70 71 |
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 69 def add(key, value) @req.add_header env_name(key), value end |
#each(&block) ⇒ Object
95 96 97 |
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 95 def each(&block) @req.each_header(&block) end |
#env ⇒ Object
116 |
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 116 def env; @req.env.dup; end |
#fetch(key, default = DEFAULT) ⇒ Object
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.
87 88 89 90 91 92 93 |
# 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 |
#key?(key) ⇒ Boolean Also known as: include?
73 74 75 |
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 73 def key?(key) @req.has_header? env_name(key) end |
#merge(headers_or_env) ⇒ Object
Returns a new Http::Headers instance containing the contents of headers_or_env
and the original instance.
101 102 103 104 105 |
# 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) ⇒ Object
Adds the contents of headers_or_env
to original instance entries; duplicate keys are overwritten with the values from headers_or_env
.
110 111 112 113 114 |
# 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 |