Class: GovukSidekiq::APIHeaders::ClientMiddleware

Inherits:
Object
  • Object
show all
Defined in:
lib/govuk_sidekiq/api_headers.rb

Overview

Client-side middleware runs before the pushing of the job to Redis and allows you to modify/stop the job before it gets pushed.

github.com/mperham/sidekiq/wiki/Middleware#client-side-middleware

Instance Method Summary collapse

Instance Method Details

#call(worker_class, job, queue, redis_pool) ⇒ Object



10
11
12
13
14
15
16
17
18
# File 'lib/govuk_sidekiq/api_headers.rb', line 10

def call(worker_class, job, queue, redis_pool)
  last_arg = job["args"].last

  if needs_headers(last_arg)
    job["args"] << header_arguments
  end

  yield
end

#header_argumentsObject



20
21
22
23
24
25
# File 'lib/govuk_sidekiq/api_headers.rb', line 20

def header_arguments
  {
    authenticated_user: GdsApi::GovukHeaders.headers[:x_govuk_authenticated_user],
    request_id: GdsApi::GovukHeaders.headers[:govuk_request_id],
  }
end

#needs_headers(last_arg) ⇒ Object



27
28
29
30
# File 'lib/govuk_sidekiq/api_headers.rb', line 27

def needs_headers(last_arg)
  has_args = last_arg.is_a?(Hash) && last_arg.symbolize_keys.keys.include?(:authenticated_user) && last_arg.symbolize_keys.keys.include?(:request_id)
  !has_args && header_arguments[:authenticated_user].present? && header_arguments[:request_id].present?
end