Class: HttpMimic::Headers
- Inherits:
-
Object
- Object
- HttpMimic::Headers
- Includes:
- Enumerable
- Defined in:
- lib/http_mimic/headers.rb
Overview
Case-insensitive HTTP Headers wrapper that preserves original casing
Instance Method Summary collapse
- #[](key) ⇒ Object
- #[]=(key, value) ⇒ Object
-
#add(key, value) ⇒ Object
Add header (supports duplicate headers with the same name, e.g., multiple Set-Cookie entries).
- #each(&block) ⇒ Object
- #get_all(key) ⇒ Object
-
#initialize(headers_hash = {}) ⇒ Headers
constructor
A new instance of Headers.
- #inspect ⇒ Object
- #key?(key) ⇒ Boolean (also: #has_key?, #include?)
- #keys ⇒ Object
- #to_h ⇒ Object (also: #to_hash)
- #to_s ⇒ Object
- #values ⇒ Object
Constructor Details
#initialize(headers_hash = {}) ⇒ Headers
Returns a new instance of Headers.
8 9 10 11 12 13 14 15 16 |
# File 'lib/http_mimic/headers.rb', line 8 def initialize(headers_hash = {}) @headers = {} @names = {} @multi_values = {} headers_hash.each do |key, val| self[key] = val end end |
Instance Method Details
#[](key) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/http_mimic/headers.rb', line 18 def [](key) return nil if key.nil? canonical = @names[normalize_key(key)] return nil unless canonical norm_key = normalize_key(key) if norm_key == 'set-cookie' && @multi_values.key?(norm_key) # For Set-Cookie, return an Array if multiple values exist @multi_values[norm_key].size > 1 ? @multi_values[norm_key] : @multi_values[norm_key].first else @headers[canonical] end end |
#[]=(key, value) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/http_mimic/headers.rb', line 32 def []=(key, value) return if key.nil? norm = normalize_key(key) if existing_key = @names[norm] @headers.delete(existing_key) end orig_key = key.to_s @names[norm] = orig_key @headers[orig_key] = value @multi_values[norm] = value.is_a?(Array) ? value.dup : [value] end |
#add(key, value) ⇒ Object
Add header (supports duplicate headers with the same name, e.g., multiple Set-Cookie entries)
46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/http_mimic/headers.rb', line 46 def add(key, value) return if key.nil? norm = normalize_key(key) orig_key = @names[norm] || key.to_s @names[norm] = orig_key @multi_values[norm] ||= [] @multi_values[norm] << value @headers[orig_key] = value end |
#each(&block) ⇒ Object
70 71 72 |
# File 'lib/http_mimic/headers.rb', line 70 def each(&block) @headers.each(&block) end |
#get_all(key) ⇒ Object
58 59 60 61 |
# File 'lib/http_mimic/headers.rb', line 58 def get_all(key) return [] if key.nil? @multi_values[normalize_key(key)] || [] end |
#inspect ⇒ Object
87 88 89 |
# File 'lib/http_mimic/headers.rb', line 87 def inspect "#<#{self.class.name} #{@headers.inspect}>" end |
#key?(key) ⇒ Boolean Also known as: has_key?, include?
63 64 65 66 |
# File 'lib/http_mimic/headers.rb', line 63 def key?(key) return false if key.nil? @names.key?(normalize_key(key)) end |
#keys ⇒ Object
74 75 76 |
# File 'lib/http_mimic/headers.rb', line 74 def keys @headers.keys end |
#to_h ⇒ Object Also known as: to_hash
82 83 84 |
# File 'lib/http_mimic/headers.rb', line 82 def to_h @headers.dup end |
#to_s ⇒ Object
91 92 93 |
# File 'lib/http_mimic/headers.rb', line 91 def to_s @headers.to_s end |
#values ⇒ Object
78 79 80 |
# File 'lib/http_mimic/headers.rb', line 78 def values @headers.values end |