Class: Spyder::HeaderStore

Inherits:
Object
  • Object
show all
Defined in:
lib/spyder/header_store.rb

Defined Under Namespace

Classes: MissingHeaderError

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#dictObject (readonly)

headers, indexed. All keys are lower case



11
12
13
# File 'lib/spyder/header_store.rb', line 11

def dict
  @dict
end

#kindObject

either :request or :response



14
15
16
# File 'lib/spyder/header_store.rb', line 14

def kind
  @kind
end

#orderedObject (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

Raises:



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