Module: Qeweney::RequestInfoMethods

Included in:
Request
Defined in:
lib/qeweney/request_info.rb

Constant Summary collapse

QUERY_KV_REGEXP =
/([^=]+)(?:=(.*))?/
/^([^=]+)=(.*)$/.freeze
SEMICOLON =
';'

Instance Method Summary collapse

Instance Method Details

#accept_encodingObject

TODO: should return encodings in client’s order of preference (and take into account q weights)



96
97
98
99
100
101
# File 'lib/qeweney/request_info.rb', line 96

def accept_encoding
  encoding = @headers['accept-encoding']
  return [] unless encoding

  encoding.split(',').map { |i| i.strip }
end

#connectionObject



15
16
17
# File 'lib/qeweney/request_info.rb', line 15

def connection
  @headers['connection']
end

#cookiesObject



103
104
105
# File 'lib/qeweney/request_info.rb', line 103

def cookies
  @cookies ||= parse_cookies(headers['cookie'])
end

#forwarded_forObject



90
91
92
# File 'lib/qeweney/request_info.rb', line 90

def forwarded_for
  @headers['x-forwarded-for']
end

#full_uriObject



59
60
61
# File 'lib/qeweney/request_info.rb', line 59

def full_uri
  @full_uri = "#{scheme}://#{host}#{uri}"
end

#hostObject Also known as: authority



10
11
12
# File 'lib/qeweney/request_info.rb', line 10

def host
  @headers['host'] || @headers[':authority']
end

#methodObject



31
32
33
# File 'lib/qeweney/request_info.rb', line 31

def method
  @method ||= @headers[':method'].downcase
end

#parse_cookies(cookies) ⇒ Object



110
111
112
113
114
115
116
117
118
119
# File 'lib/qeweney/request_info.rb', line 110

def parse_cookies(cookies)
  return {} unless cookies

  cookies.split(SEMICOLON).each_with_object({}) do |c, h|
    raise BadRequestError, 'Invalid cookie format' unless c.strip =~ COOKIE_RE

    key, value = Regexp.last_match[1..2]
    h[key] = EscapeUtils.unescape_uri(value)
  end
end

#parse_query(query) ⇒ Object



79
80
81
82
83
84
# File 'lib/qeweney/request_info.rb', line 79

def parse_query(query)
  query.split('&').each_with_object({}) do |kv, h|
    k, v = kv.match(QUERY_KV_REGEXP)[1..2]
    h[k.to_sym] = v ? URI.decode_www_form_component(v) : true
  end
end

#pathObject



63
64
65
# File 'lib/qeweney/request_info.rb', line 63

def path
  @path ||= uri.path
end

#protocolObject



27
28
29
# File 'lib/qeweney/request_info.rb', line 27

def protocol
  @protocol ||= @adapter.protocol
end

#queryObject



71
72
73
74
75
# File 'lib/qeweney/request_info.rb', line 71

def query
  return @query if @query

  @query = (q = uri.query) ? parse_query(q) : {}
end

#query_stringObject



67
68
69
# File 'lib/qeweney/request_info.rb', line 67

def query_string
  @query_string ||= uri.query
end

#request_idObject



86
87
88
# File 'lib/qeweney/request_info.rb', line 86

def request_id
  @headers['x-request-id']
end

#rewrite!(src, replacement) ⇒ Qeweney::Request

Rewrites the request path by replacing the given src with the given replacement.

Parameters:

  • src (String, Regexp)

    src pattern

  • replacement (String)

    replacement

Returns:



45
46
47
48
49
50
51
52
53
# File 'lib/qeweney/request_info.rb', line 45

def rewrite!(src, replacement)
  @headers[':path'] = @headers[':path']
    .gsub(src, replacement)
    .gsub('//', '/')
  @path = nil
  @uri = nil
  @full_uri = nil
  self
end

#schemeObject



35
36
37
# File 'lib/qeweney/request_info.rb', line 35

def scheme
  @scheme ||= @headers[':scheme']
end

#upgrade_protocolObject



19
20
21
# File 'lib/qeweney/request_info.rb', line 19

def upgrade_protocol
  connection == 'upgrade' && @headers['upgrade']&.downcase
end

#uriObject



55
56
57
# File 'lib/qeweney/request_info.rb', line 55

def uri
  @uri ||= URI.parse(@headers[':path'] || '')
end

#websocket_versionObject



23
24
25
# File 'lib/qeweney/request_info.rb', line 23

def websocket_version
  headers['sec-websocket-version'].to_i
end