class MultiBackgroundJob::MiddlewareChain
Middleware
is code configured to run before/after push a new job. It is patterned after Rack middleware for some modification before push the job to the server
To add a middleware:
MultiBackgroundJob.configure
do |config|
config.middleware do |chain| chain.add MyMiddleware end
end
This is an example of a minimal middleware, note the method must return the result or the job will not push the server.
class MyMiddleware
def call(job, conn_pool) puts "Before push" result = yield puts "After push" result end
end
Attributes
entries[R]
Public Class Methods
new() { |self| ... }
click to toggle source
# File lib/multi_background_job/middleware_chain.rb, line 39 def initialize @entries = [] yield self if block_given? end
Public Instance Methods
add(klass, *args)
click to toggle source
# File lib/multi_background_job/middleware_chain.rb, line 48 def add(klass, *args) remove(klass) if exists?(klass) entries << Entry.new(klass, *args) end
clear()
click to toggle source
# File lib/multi_background_job/middleware_chain.rb, line 80 def clear entries.clear end
each(&block)
click to toggle source
# File lib/multi_background_job/middleware_chain.rb, line 35 def each(&block) entries.each(&block) end
exists?(klass)
click to toggle source
# File lib/multi_background_job/middleware_chain.rb, line 72 def exists?(klass) any? { |entry| entry.klass == klass } end
initialize_copy(copy)
click to toggle source
# File lib/multi_background_job/middleware_chain.rb, line 31 def initialize_copy(copy) copy.instance_variable_set(:@entries, entries.dup) end
insert_after(oldklass, newklass, *args)
click to toggle source
# File lib/multi_background_job/middleware_chain.rb, line 65 def insert_after(oldklass, newklass, *args) i = entries.index { |entry| entry.klass == newklass } new_entry = i.nil? ? Entry.new(newklass, *args) : entries.delete_at(i) i = entries.index { |entry| entry.klass == oldklass } || entries.count - 1 entries.insert(i+1, new_entry) end
insert_before(oldklass, newklass, *args)
click to toggle source
# File lib/multi_background_job/middleware_chain.rb, line 58 def insert_before(oldklass, newklass, *args) i = entries.index { |entry| entry.klass == newklass } new_entry = i.nil? ? Entry.new(newklass, *args) : entries.delete_at(i) i = entries.index { |entry| entry.klass == oldklass } || 0 entries.insert(i, new_entry) end
invoke(*args) { || ... }
click to toggle source
# File lib/multi_background_job/middleware_chain.rb, line 84 def invoke(*args) chain = retrieve.dup traverse_chain = lambda do if chain.empty? yield else chain.pop.call(*args, &traverse_chain) end end traverse_chain.call end
prepend(klass, *args)
click to toggle source
# File lib/multi_background_job/middleware_chain.rb, line 53 def prepend(klass, *args) remove(klass) if exists?(klass) entries.insert(0, Entry.new(klass, *args)) end
remove(klass)
click to toggle source
# File lib/multi_background_job/middleware_chain.rb, line 44 def remove(klass) entries.delete_if { |entry| entry.klass == klass } end
retrieve()
click to toggle source
# File lib/multi_background_job/middleware_chain.rb, line 76 def retrieve map(&:make_new) end