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.

Parameters:

  • hash (Hash, #inject) (defaults to: {})

    Collection of headers

  • compatible (true, false) (defaults to: false)

    Whether the hash already contains downcased strings only. If so it is going to be directly as container for the 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

Parameters:

  • header (String, Symbol, #to_s)

    HTTP Header key

Returns:

  • (String, nil)

    Value of given Header, nil when not present



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

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

#[]=(header, value) ⇒ String

Set header

Parameters:

  • header (String, Symbol, #to_s)

    HTTP Header key

  • value (String)

    HTTP Header value

Returns:

  • (String)

    Set value



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

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

#delete(header) ⇒ String?

Delete header

Parameters:

  • header (String, Symbol, #to_s)

    HTTP Header key

Returns:

  • (String, nil)

    Value of deleted header, nil when was not present



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

Returns:

  • (Hash, Enumerator)


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

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

#empty?Boolean

Returns:

  • (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)

Parameters:

  • env (Hash) (defaults to: {})

    Hash representing Rack Env or compatible

Returns:

  • (Hash)

    same Hash as provided as argument.



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