Class: Spyder::HeaderStore
- Inherits:
-
Object
- Object
- Spyder::HeaderStore
- Defined in:
- lib/spyder/header_store.rb
Defined Under Namespace
Classes: MissingHeaderError
Instance Attribute Summary collapse
-
#dict ⇒ Object
readonly
headers, indexed.
-
#kind ⇒ Object
either :request or :response.
-
#ordered ⇒ Object
readonly
headers as they have been received.
Instance Method Summary collapse
- #add_header(key, value) ⇒ Object
- #fetch(key, default_value = nil) ⇒ Object
- #get!(key) ⇒ Object
-
#initialize(kind = nil) ⇒ HeaderStore
constructor
A new instance of HeaderStore.
- #set_header(key, value) ⇒ Object
Constructor Details
#initialize(kind = nil) ⇒ HeaderStore
Returns a new instance of HeaderStore.
16 17 18 19 20 |
# File 'lib/spyder/header_store.rb', line 16 def initialize kind=nil @kind = kind @ordered = [] @dict = {} end |
Instance Attribute Details
#dict ⇒ Object (readonly)
headers, indexed. All keys are lower case
11 12 13 |
# File 'lib/spyder/header_store.rb', line 11 def dict @dict end |
#kind ⇒ Object
either :request or :response
14 15 16 |
# File 'lib/spyder/header_store.rb', line 14 def kind @kind end |
#ordered ⇒ Object (readonly)
headers as they have been received. Untransformed and in order
8 9 10 |
# File 'lib/spyder/header_store.rb', line 8 def ordered @ordered end |
Instance Method Details
#add_header(key, value) ⇒ Object
35 36 37 38 |
# File 'lib/spyder/header_store.rb', line 35 def add_header key, value @ordered << [key, value] @dict[key.downcase] = value end |
#fetch(key, default_value = nil) ⇒ Object
22 23 24 25 26 27 |
# File 'lib/spyder/header_store.rb', line 22 def fetch key, default_value=nil value = @dict.fetch(key.downcase, default_value) return value unless value == nil return yield(key) if block_given? nil end |
#get!(key) ⇒ Object
29 30 31 32 33 |
# File 'lib/spyder/header_store.rb', line 29 def get! key value = fetch key raise MissingHeaderError.new(key) if value == nil value end |
#set_header(key, value) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/spyder/header_store.rb', line 40 def set_header key, value key_lower = key.downcase if @kind == :response && key_lower == 'set-cookie' add_header key_lower, value else @dict[key_lower] = value oh_index = @ordered.find_index { |k, v| k.downcase == key_lower } if oh_index @ordered[oh_index][1] = value else @ordered << [key, value] end end end |