Class: Errordeck::RequestHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/errordeck/request_handler.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(request) ⇒ RequestHandler

Returns a new instance of RequestHandler.



9
10
11
# File 'lib/errordeck/request_handler.rb', line 9

def initialize(request)
  @request = request
end

Instance Attribute Details

#requestObject

Returns the value of attribute request.



7
8
9
# File 'lib/errordeck/request_handler.rb', line 7

def request
  @request
end

Class Method Details

.parse_from_rack_env(rack_env) ⇒ Object



50
51
52
53
# File 'lib/errordeck/request_handler.rb', line 50

def self.parse_from_rack_env(rack_env)
  request = set_request_from_env(rack_env.dup)
  new(request)
end

.parse_query_string(query_string) ⇒ Object



110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/errordeck/request_handler.rb', line 110

def self.parse_query_string(query_string)
  return query_string if query_string.is_a?(Hash)

  query_string.split("&").each_with_object({}) do |pair, hash|
    key, value = pair.split("=").map { |part| CGI.unescape(part) }
    if hash.key?(key)
      hash[key] = Array(hash[key])
      hash[key] << value
    else
      hash[key] = value
    end
  end
end

.request_hash(rack_env) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/errordeck/request_handler.rb', line 23

def self.request_hash(rack_env)
  request = {}
  rack_env = rack_env.dup.transform_keys { |k| k.to_s.upcase }

  if rack_env["REQUEST_URI"] || rack_env["URL"]
    url = URI.parse(rack_env["REQUEST_URI"] || rack_env["URL"])
    url.scheme ||= rack_env["RACK.URL_SCHEME"] || "https"
    url.host ||= rack_env["HTTP_HOST"] || "localhost"
  else
    scheme = rack_env["RACK.URL_SCHEME"] || "https"
    host = rack_env["HTTP_HOST"] || "localhost"
    path = rack_env["PATH_INFO"] || "/"
    query_string = rack_env["QUERY_STRING"] || ""
    url = URI.parse("#{scheme}://#{host}#{path}")
    url.query = query_string unless query_string.empty?
  end

  request[:url] = url.to_s
  request[:query_string] = url.query || ""
  request[:params] = rack_env["PARAMS"] || parse_query_string(request[:query_string])
  request[:method] = rack_env["REQUEST_METHOD"] || "GET"
  request[:cookies] =
    rack_env["HTTP_COOKIE"] || rack_env["COOKIES"] ? parse_query_string(rack_env["HTTP_COOKIE"] || rack_env["COOKIES"]) : {}
  request[:headers] = (rack_env["HEADERS"] || rack_env).select { |k, _| k.start_with?("HTTP_") }
  request
end

.set_request_from_env(rack_env) ⇒ Object



13
14
15
16
17
18
19
20
21
# File 'lib/errordeck/request_handler.rb', line 13

def self.set_request_from_env(rack_env)
  if defined?(Sinatra)
    Sinatra::Request.new(rack_env)
  elsif defined?(Rack)
    Rack::Request.new(rack_env)
  else
    request_hash(rack_env)
  end
end

Instance Method Details

#actionObject



83
84
85
# File 'lib/errordeck/request_handler.rb', line 83

def action
  params["action"]
end

#controllerObject



79
80
81
# File 'lib/errordeck/request_handler.rb', line 79

def controller
  params["controller"]
end

#cookiesObject



91
92
93
# File 'lib/errordeck/request_handler.rb', line 91

def cookies
  @request[:cookies] || @request.cookies || {}
end

#headersObject



95
96
97
# File 'lib/errordeck/request_handler.rb', line 95

def headers
  @request[:headers] || @request.env || {}
end

#methodObject



55
56
57
58
59
60
61
# File 'lib/errordeck/request_handler.rb', line 55

def method
  if @request.respond_to?(:request_method)
    @request.request_method
  else
    @request[:method]
  end
end

#paramsObject



71
72
73
74
75
76
77
# File 'lib/errordeck/request_handler.rb', line 71

def params
  if @request.respond_to?(:params)
    (request.env["action_dispatch.request.parameters"] || request.params).to_hash || {}
  else
    @request[:params] || {}
  end
end

#query_stringObject



87
88
89
# File 'lib/errordeck/request_handler.rb', line 87

def query_string
  @request[:query_string] || @request.query_string
end

#to_hashObject



99
100
101
102
103
104
105
106
107
108
# File 'lib/errordeck/request_handler.rb', line 99

def to_hash
  {
    method: method,
    url: url,
    query_string: query_string,
    cookies: cookies,
    headers: headers,
    params: params
  }
end

#urlObject



63
64
65
66
67
68
69
# File 'lib/errordeck/request_handler.rb', line 63

def url
  if @request.respond_to?(:url)
    @request.url
  else
    @request[:url]
  end
end