diff --git a/lib/sidekiq/middleware/chain.rb b/lib/sidekiq/middleware/chain.rb index 9a53f53e..5d18bfd6 100644 --- a/lib/sidekiq/middleware/chain.rb +++ b/lib/sidekiq/middleware/chain.rb @@ -67,7 +67,6 @@ module Sidekiq module Middleware class Chain include Enumerable - attr_reader :entries def initialize_copy(copy) copy.instance_variable_set(:@entries, entries.dup) @@ -78,10 +77,14 @@ module Sidekiq end def initialize - @entries = [] + @entries = nil yield self if block_given? end + def entries + @entries ||= [] + end + def remove(klass) entries.delete_if { |entry| entry.klass == klass } end @@ -114,6 +117,10 @@ module Sidekiq any? { |entry| entry.klass == klass } end + def empty? + @entries.nil? || @entries.empty? + end + def retrieve map(&:make_new) end @@ -123,6 +130,8 @@ module Sidekiq end def invoke(*args) + return yield if empty? + chain = retrieve.dup traverse_chain = lambda do if chain.empty?