Class: Escher::Request::LegacyRequest

Inherits:
Object
  • Object
show all
Defined in:
lib/escher/request/legacy_request.rb

Constant Summary collapse

URIREGEX =

based on the example in RFC 3986, but scheme, user, password, host, port and fraement support removed, only path and query left

/^([^?#]*)(\?(.*))?$/

Instance Method Summary collapse

Constructor Details

#initialize(request) ⇒ LegacyRequest

Returns a new instance of LegacyRequest.



11
12
13
14
15
# File 'lib/escher/request/legacy_request.rb', line 11

def initialize(request)
  @request = request
  prepare_request_uri
  prepare_request_headers
end

Instance Method Details

#bodyObject

TODO: create a test for empty body (= nil)



114
115
116
117
118
119
120
121
# File 'lib/escher/request/legacy_request.rb', line 114

def body
  case @request.class.to_s
    when 'Hash'
      @request[:body] || ''
    else
      @request.body || ''
  end
end

#has_header?(key) ⇒ Boolean

Returns:

  • (Boolean)


91
92
93
94
95
96
97
98
# File 'lib/escher/request/legacy_request.rb', line 91

def has_header?(key)
  @request_headers.each { |header|
    if header[0].downcase == key.downcase
      return true
    end
  }
  return false
end

#headersObject



64
65
66
# File 'lib/escher/request/legacy_request.rb', line 64

def headers
  @request_headers
end

#hostObject



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/escher/request/legacy_request.rb', line 125

def host
  @request_headers.each { |header|
    if header[0].downcase == key.downcase
      return header[1]
    end
  }
  case @request.class.to_s
    when 'Hash'
      @request[:host]
    else
      begin
        @request.host
      rescue
        ""
      end
  end
end

#methodObject



102
103
104
105
106
107
108
109
# File 'lib/escher/request/legacy_request.rb', line 102

def method
  case @request.class.to_s
    when 'Hash'
      @request[:method]
    else
      @request.request_method
  end
end

#pathObject



145
146
147
# File 'lib/escher/request/legacy_request.rb', line 145

def path
  @request_uri.path
end

#prepare_request_headersObject



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/escher/request/legacy_request.rb', line 36

def prepare_request_headers
  @request_headers = []
  case @request.class.to_s
    when 'Hash'
      @request_headers = @request[:headers]
    when 'Sinatra::Request' # TODO: not working yet
      @request.env.each { |key, value|
        if key.downcase[0, 5] == "http_"
          @request_headers += [[key[5..-1].gsub("_", "-"), value]]
        end
      }
    when 'WEBrick::HTTPRequest'
      @request.header.each { |key, values|
        values.each { |value|
          @request_headers += [[key, value]]
        }
      }
  end
end

#prepare_request_uriObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/escher/request/legacy_request.rb', line 19

def prepare_request_uri
  case @request.class.to_s
    when 'Hash'
      uri = @request[:uri]
    else
      uri = @request.uri
  end
  fragments = uri.scan(URIREGEX)[0]
  @request_uri = Addressable::URI.new({
                                        :path => fragments[0],
                                        :query => fragments[2],
                                      })
  raise "Invalid request URI: #{@request_uri}" unless @request_uri
end

#query_valuesObject



151
152
153
# File 'lib/escher/request/legacy_request.rb', line 151

def query_values
  @request_uri.query_values(Array) || []
end

#requestObject



58
59
60
# File 'lib/escher/request/legacy_request.rb', line 58

def request
  @request
end

#set_header(key, value) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/escher/request/legacy_request.rb', line 70

def set_header(key, value)
  found = false
  @request_headers.each { |header|
    if not found and header[0].downcase == key.downcase
      header[1] = value
      found = true
    end
  }
  unless found
    @request_headers += [[key, value]]
  end
  case @request.class.to_s
    when 'Hash'
      @request[:headers] = @request_headers
    else
      @request[key] = value
  end
end