Class: Wurk::Middleware::CurrentAttributes::Load
- Inherits:
-
Object
- Object
- Wurk::Middleware::CurrentAttributes::Load
- Includes:
- ServerMiddleware
- Defined in:
- lib/wurk/middleware/current_attributes.rb
Overview
Restores each registered CurrentAttributes class for the duration
of the inner block, then puts back whatever was there before — not a
blanket reset. On a server thread the prior state is empty, so this is
equivalent to resetting; but Load also runs on the CLIENT chain (persist
registers it on both), where an enqueue happens mid-request with
request-scoped attributes already set. Resetting there would wipe the
caller's state right after perform_async. Save/restore is what Sidekiq
does and is correct on both chains. Restore runs in ensure to survive
raises and Skip.
Registered on BOTH chains, so call takes an optional 4th arg: the
client chain passes a redis_pool, the server chain stops at queue.
Instance Attribute Summary
Attributes included from ServerMiddleware
Instance Method Summary collapse
- #call(_job_or_class, job, _queue, _redis_pool = nil) ⇒ Object
-
#initialize(classes) ⇒ Load
constructor
A new instance of Load.
Methods included from ServerMiddleware
Constructor Details
#initialize(classes) ⇒ Load
Returns a new instance of Load.
85 86 87 |
# File 'lib/wurk/middleware/current_attributes.rb', line 85 def initialize(classes) @classes = classes end |
Instance Method Details
#call(_job_or_class, job, _queue, _redis_pool = nil) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/wurk/middleware/current_attributes.rb', line 89 def call(_job_or_class, job, _queue, _redis_pool = nil) previous = @classes.map { |klass| CurrentAttributes.snapshot(klass) } @classes.each_with_index do |klass, idx| CurrentAttributes.restore(klass, job[CurrentAttributes.key_for(idx)]) end yield ensure previous&.each_with_index do |attrs, idx| @classes[idx].reset CurrentAttributes.restore(@classes[idx], attrs) end end |