123456789_123456789_123456789_123456789_123456789_

Class: ActionDispatch::Http::Headers

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

Overview

Action Dispatch HTTP Headers

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

#compact_blank

Returns a new ::Array without the blank items.

#exclude?

The negative of the Enumerable#include?.

#excluding

Returns a copy of the enumerable excluding the specified elements.

#in_order_of

Returns a new ::Array where the order has been set to that provided in the series, based on the key of the objects in the original enumerable.

#including

Returns a new array that includes the passed elements.

#index_by

Convert an enumerable to a hash, using the block result as the key and the element as the value.

#index_with

Convert an enumerable to a hash, using the element as the key and the block result as the value.

#maximum

Calculates the maximum from the extracted elements.

#minimum

Calculates the minimum from the extracted elements.

#pick

Extract the given key from the first element in the enumerable.

#pluck

Extract the given key from each element in the enumerable.

#sole

Returns the sole item in the enumerable.

#without
#as_json

::ActiveSupport::EnumerableCoreExt::Constants - Included

Constructor Details

.new(request) ⇒ Headers

This method is for internal use only.
[ GitHub ]

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

def initialize(request) # :nodoc:
  @req = request
end

Class Method Details

.from_hash(hash)

[ GitHub ]

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

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 63

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 68

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 73

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

#each(&block)

[ GitHub ]

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

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

#env

[ GitHub ]

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

def env; @req.env.dup; end

#env_name(key) (private)

Converts an HTTP header name to an environment variable name if it is not contained within the headers hash.

[ GitHub ]

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

def env_name(key)
  key = key.to_s
  if HTTP_HEADER.match?(key)
    key = key.upcase
    key.tr!("-", "_")
    key.prepend("HTTP_") unless CGI_VARIABLES.include?(key)
  end
  key
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 90

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 80

alias :include? :key?

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

[ GitHub ]

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

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 104

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 112

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