Class: Dommy::Rack::HeaderStore

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

Overview

The persistent request headers a Session sends on every request, plus the auth conveniences that set them. Encapsulates the header state and the case-insensitive merge the way CookieJar encapsulates cookie state — a Session owns one HeaderStore and mutates it via set / delete / basic_auth / bearer.

HTTP header names are case-insensitive, so #delete and #merge match names case-insensitively: a per-request override replaces a stored default even when the two names differ only in case.

Instance Method Summary collapse

Constructor Details

#initializeHeaderStore

Returns a new instance of HeaderStore.



15
16
17
# File 'lib/dommy/rack/header_store.rb', line 15

def initialize
  @headers = {}
end

Instance Method Details

#basic_auth(user, password) ⇒ Object

HTTP Basic auth: sets a persistent Authorization header.



48
49
50
# File 'lib/dommy/rack/header_store.rb', line 48

def basic_auth(user, password)
  set("Authorization", "Basic #{["#{user}:#{password}"].pack("m0")}")
end

#bearer(token) ⇒ Object

Bearer-token auth: sets a persistent Authorization header.



53
54
55
# File 'lib/dommy/rack/header_store.rb', line 53

def bearer(token)
  set("Authorization", "Bearer #{token}")
end

#delete(name) ⇒ Object



27
28
29
30
31
# File 'lib/dommy/rack/header_store.rb', line 27

def delete(name)
  target = name.to_s.downcase
  @headers.delete_if { |key, _| key.downcase == target }
  self
end

#merge(override) ⇒ Object

The headers to send for one request: the stored defaults with the per-request ‘override` applied on top. An override wins even if its name differs only in case from a default.



36
37
38
39
40
41
42
43
44
45
# File 'lib/dommy/rack/header_store.rb', line 36

def merge(override)
  return @headers.dup if override.nil? || override.empty?

  merged = @headers.dup
  override.each do |name, value|
    merged.delete_if { |existing, _| existing.to_s.downcase == name.to_s.downcase }
    merged[name] = value
  end
  merged
end

#set(name, value) ⇒ Object



22
23
24
25
# File 'lib/dommy/rack/header_store.rb', line 22

def set(name, value)
  @headers[name.to_s] = value.to_s
  self
end

#to_hObject

A copy of the stored headers. Mutate via #set / #delete.



20
# File 'lib/dommy/rack/header_store.rb', line 20

def to_h = @headers.dup