class Faraday::Utils::Headers
A case-insensitive Hash that preserves the original case of a header when set.
Adapted from Rack::Utils::HeaderHash
Constants
- KeyMap
-
symbol -> string mapper + cache
Attributes
Public Class Methods
Source
# File lib/faraday/utils/headers.rb, line 14 def self.allocate new_self = super new_self.initialize_names new_self end
Calls superclass method
Source
# File lib/faraday/utils/headers.rb, line 10 def self.from(value) new(value) end
Source
# File lib/faraday/utils/headers.rb, line 20 def initialize(hash = nil) super() @names = {} update(hash || {}) end
Calls superclass method
Public Instance Methods
Source
# File lib/faraday/utils/headers.rb, line 52 def [](key) key = KeyMap[key] super(key) || super(@names[key.downcase]) end
Calls superclass method
Source
# File lib/faraday/utils/headers.rb, line 57 def []=(key, val) key = KeyMap[key] key = (@names[key.downcase] ||= key) # join multiple values with a comma val = val.to_ary.join(', ') if val.respond_to?(:to_ary) super(key, val) end
Calls superclass method
Source
# File lib/faraday/utils/headers.rb, line 71 def delete(key) key = KeyMap[key] key = @names[key.downcase] return unless key @names.delete key.downcase super(key) end
Calls superclass method
Source
# File lib/faraday/utils/headers.rb, line 65 def fetch(key, *args, &block) key = KeyMap[key] key = @names.fetch(key.downcase, key) super(key, *args, &block) end
Calls superclass method
Source
# File lib/faraday/utils/headers.rb, line 80 def include?(key) @names.include? key.downcase end
Source
# File lib/faraday/utils/headers.rb, line 31 def initialize_copy(other) super @names = other.names.dup end
on dup/clone, we need to duplicate @names hash
Calls superclass method
Source
# File lib/faraday/utils/headers.rb, line 26 def initialize_names @names = {} end
Source
# File lib/faraday/utils/headers.rb, line 95 def merge(other) hash = dup hash.merge! other end
Source
# File lib/faraday/utils/headers.rb, line 88 def merge!(other) other.each { |k, v| self[k] = v } self end
Also aliased as: update
Source
# File lib/faraday/utils/headers.rb, line 111 def parse(header_string) return unless header_string && !header_string.empty? headers = header_string.split(/\r\n/) # Find the last set of response headers. start_index = headers.rindex { |x| x.match(%r{^HTTP/}) } || 0 last_response = headers.slice(start_index, headers.size) last_response .tap { |a| a.shift if a.first.start_with?('HTTP/') } .map { |h| h.split(/:\s*/, 2) } # split key and value .reject { |p| p[0].nil? } # ignore blank lines .each { |key, value| add_parsed(key, value) } end
Source
# File lib/faraday/utils/headers.rb, line 100 def replace(other) clear @names.clear update other self end
Source
# File lib/faraday/utils/headers.rb, line 107 def to_hash ::Hash.new.update(self) end
Private Instance Methods
Source
# File lib/faraday/utils/headers.rb, line 134 def add_parsed(key, value) self[key] ? self[key] << ', ' << value : self[key] = value end
Join multiple values with a comma.