Class: Dommy::Rack::HeaderStore
- Inherits:
-
Object
- Object
- Dommy::Rack::HeaderStore
- 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
-
#basic_auth(user, password) ⇒ Object
HTTP Basic auth: sets a persistent Authorization header.
-
#bearer(token) ⇒ Object
Bearer-token auth: sets a persistent Authorization header.
- #delete(name) ⇒ Object
-
#initialize ⇒ HeaderStore
constructor
A new instance of HeaderStore.
-
#merge(override) ⇒ Object
The headers to send for one request: the stored defaults with the per-request ‘override` applied on top.
- #set(name, value) ⇒ Object
-
#to_h ⇒ Object
A copy of the stored headers.
Constructor Details
#initialize ⇒ HeaderStore
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_h ⇒ Object
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 |