diff options
Diffstat (limited to 'actionpack/lib')
-rw-r--r-- | actionpack/lib/action_dispatch/http/headers.rb | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/actionpack/lib/action_dispatch/http/headers.rb b/actionpack/lib/action_dispatch/http/headers.rb index 29cd6a0c27..cd133d6b99 100644 --- a/actionpack/lib/action_dispatch/http/headers.rb +++ b/actionpack/lib/action_dispatch/http/headers.rb @@ -19,14 +19,16 @@ module ActionDispatch include Enumerable attr_reader :env - def initialize(env = {}) + def initialize(env = {}) # :nodoc: @env = env end + # Returns the value for the given key mapped to @env. def [](key) @env[env_name(key)] end + # Set the given value for the key mapped to @env. def []=(key, value) @env[env_name(key)] = value end @@ -34,6 +36,12 @@ module ActionDispatch def key?(key); @env.key? key; end alias :include? :key? + + # Returns the value for the given key mapped to @env. + # If the key can’t be found, there are several options: + # with no other arguments, it will raise an KeyError exception; + # If the optional code block is specified, then that will be run and its + # result returned. def fetch(key, *args, &block) @env.fetch env_name(key), *args, &block end @@ -42,12 +50,18 @@ module ActionDispatch @env.each(&block) end + + # Returns a new Http::Headers instance containing the contents of + # <tt>headers_or_env</tt> and the original instance. def merge(headers_or_env) headers = Http::Headers.new(env.dup) headers.merge!(headers_or_env) headers end + # Adds the contents of <tt>headers_or_env</tt> to original instance + # entries with duplicate keys are overwritten with the values from + # <tt>headers_or_env</tt>. def merge!(headers_or_env) headers_or_env.each do |key, value| self[env_name(key)] = value @@ -55,6 +69,8 @@ module ActionDispatch end private + # Converts a HTTP header name to an environment variable name if it is + # not contained within the headers hash. def env_name(key) key = key.to_s if key =~ HTTP_HEADER |