Class: M2R::Headers

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/m2r/headers.rb

Overview

Normalize headers access so that it is not case-sensitive

Instance Method Summary collapse

Constructor Details

#initialize(hash = {}, compatible = false) ⇒ Headers

Returns a new instance of Headers.



13
14
15
16
17
18
19
# File 'lib/m2r/headers.rb', line 13

def initialize(hash = {}, compatible = false)
  @headers = hash and return if compatible
  @headers = hash.inject({}) do |headers,(header,value)|
    headers[transform_key(header)] = value
    headers
  end
end

Instance Method Details

#[](header) ⇒ String?

Get header



24
25
26
# File 'lib/m2r/headers.rb', line 24

def [](header)
  @headers[transform_key(header)]
end

#[]=(header, value) ⇒ String

Set header



32
33
34
# File 'lib/m2r/headers.rb', line 32

def []=(header, value)
  @headers[transform_key(header)] = value
end

#delete(header) ⇒ String?

Delete header



39
40
41
# File 'lib/m2r/headers.rb', line 39

def delete(header)
  @headers.delete(transform_key(header))
end

#each {|header, value| ... } ⇒ Hash, Enumerator

Iterate over headers

Yields:

  • HTTP header and its value

Yield Parameters:

  • header (String)

    HTTP Header name (downcased)

  • value (String)

    HTTP Header value



48
49
50
# File 'lib/m2r/headers.rb', line 48

def each(&proc)
  @headers.each(&proc)
end

#empty?Boolean



70
71
72
# File 'lib/m2r/headers.rb', line 70

def empty?
  @headers.empty?
end

#rackify(env = {}) ⇒ Hash

Fill Hash with Headers compatibile with Rack standard. Every header except for Content-Length and Content-Type is capitalized, underscored, and prefixed with HTTP. Content-Length and Content-Type are not prefixed (according to the spec)



60
61
62
63
64
65
66
67
68
# File 'lib/m2r/headers.rb', line 60

def rackify(env = {})
  @headers.each do |header, value|
    key = "HTTP_" + header.upcase.gsub("-", "_")
    env[key] = value
  end
  env["CONTENT_LENGTH"] = env.delete("HTTP_CONTENT_LENGTH") if env.key?("HTTP_CONTENT_LENGTH")
  env["CONTENT_TYPE"]   = env.delete("HTTP_CONTENT_TYPE")   if env.key?("HTTP_CONTENT_TYPE")
  env
end