Class: Rack::Client::Headers

Inherits:
Hash
  • Object
show all
Defined in:
lib/rack/client/core/headers.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(headers = {}) ⇒ Headers

Returns a new instance of Headers.



8
9
10
11
# File 'lib/rack/client/core/headers.rb', line 8

def initialize(headers = {})
  super()
  merge!(headers)
end

Class Method Details

.from(env) ⇒ Object



4
5
6
# File 'lib/rack/client/core/headers.rb', line 4

def self.from(env)
  new env.reject {|(header,_)| header !~ %r'^HTTP_' unless %w( CONTENT_TYPE CONTENT_LENGTH ).include?(header) }
end

Instance Method Details

#clean(header) ⇒ Object



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

def clean(header)
  header.gsub(/HTTP_/, '').gsub('_', '-').gsub(/(\w+)/) do |matches|
    matches.downcase.sub(/^./) do |char|
      char.upcase
    end
  end
end

#rackify(original) ⇒ Object



38
39
40
41
42
43
44
45
46
# File 'lib/rack/client/core/headers.rb', line 38

def rackify(original)
  header =  original.upcase.gsub('-', '_')

  case header
  when 'CONTENT_TYPE', 'CONTENT_LENGTH' then header
  when /^HTTP_/                         then header
  else "HTTP_#{header}"
  end
end

#rackish?(header) ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
32
33
34
35
36
# File 'lib/rack/client/core/headers.rb', line 29

def rackish?(header)
  case header
  when 'CONTENT_TYPE', 'CONTENT_LENGTH' then true
  when /^rack[-.]/                      then true
  when /^HTTP_/                         then true
  else false
  end
end

#to_envObject



25
26
27
# File 'lib/rack/client/core/headers.rb', line 25

def to_env
  self.inject({}) {|h,(header,value)| h.update((rackish?(header) ? header : rackify(header)) => value) }
end

#to_httpObject



21
22
23
# File 'lib/rack/client/core/headers.rb', line 21

def to_http
  self.inject({}) {|h,(header,value)| h.update(clean(header) => Array(value).join("\n")) }
end