Class: Gitlab::Testing::RequestInspectorMiddleware

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/testing/request_inspector_middleware.rb

Defined Under Namespace

Classes: Request

Constant Summary collapse

@@log_requests =
Concurrent::AtomicBoolean.new(false)
@@logged_requests =
Concurrent::Array.new
@@inject_headers =
Concurrent::Hash.new

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ RequestInspectorMiddleware

Returns a new instance of RequestInspectorMiddleware.



30
31
32
# File 'lib/gitlab/testing/request_inspector_middleware.rb', line 30

def initialize(app)
  @app = app
end

Class Method Details

.log_requests!(headers = {}) ⇒ Object

Resets the current request log and starts logging requests



15
16
17
18
19
# File 'lib/gitlab/testing/request_inspector_middleware.rb', line 15

def self.log_requests!(headers = {})
  @@inject_headers.replace(headers)
  @@logged_requests.replace([])
  @@log_requests.value = true
end

.requestsObject



26
27
28
# File 'lib/gitlab/testing/request_inspector_middleware.rb', line 26

def self.requests
  @@logged_requests
end

.stop_logging!Object

Stops logging requests



22
23
24
# File 'lib/gitlab/testing/request_inspector_middleware.rb', line 22

def self.stop_logging!
  @@log_requests.value = false
end

Instance Method Details

#call(env) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/gitlab/testing/request_inspector_middleware.rb', line 34

def call(env)
  return @app.call(env) unless @@log_requests.true?

  url = env['REQUEST_URI']
  env.merge! http_headers_env(@@inject_headers) if @@inject_headers.any?
  request_headers = env_http_headers(env)
  status, headers, body = @app.call(env)

  full_body = +''
  body.each { |b| full_body << b }

  request = Request.new(
    url: url,
    status_code: status,
    request_headers: request_headers,
    response_headers: headers,
    body: full_body
  )
  log_request request

  [status, headers, body]
end