Class: Sidekiq::Middleware::Chain
- Inherits:
-
Object
- Object
- Sidekiq::Middleware::Chain
- Includes:
- Enumerable
- Defined in:
- lib/sidekiq/middleware/chain.rb
Instance Method Summary collapse
- #add(klass, *args) ⇒ Object
- #clear ⇒ Object
- #each(&block) ⇒ Object
- #empty? ⇒ Boolean
- #entries ⇒ Object
- #exists?(klass) ⇒ Boolean
-
#initialize(config = nil) {|_self| ... } ⇒ Chain
constructor
A new instance of Chain.
- #initialize_copy(copy) ⇒ Object
- #insert_after(oldklass, newklass, *args) ⇒ Object
- #insert_before(oldklass, newklass, *args) ⇒ Object
- #invoke(*args) ⇒ Object
- #prepend(klass, *args) ⇒ Object
- #remove(klass) ⇒ Object
- #retrieve ⇒ Object
Constructor Details
#initialize(config = nil) {|_self| ... } ⇒ Chain
Returns a new instance of Chain.
84 85 86 87 88 |
# File 'lib/sidekiq/middleware/chain.rb', line 84 def initialize(config = nil) @config = config @entries = nil yield self if block_given? end |
Instance Method Details
#add(klass, *args) ⇒ Object
98 99 100 101 |
# File 'lib/sidekiq/middleware/chain.rb', line 98 def add(klass, *args) remove(klass) entries << Entry.new(@config, klass, *args) end |
#clear ⇒ Object
134 135 136 |
# File 'lib/sidekiq/middleware/chain.rb', line 134 def clear entries.clear end |
#each(&block) ⇒ Object
80 81 82 |
# File 'lib/sidekiq/middleware/chain.rb', line 80 def each(&block) entries.each(&block) end |
#empty? ⇒ Boolean
126 127 128 |
# File 'lib/sidekiq/middleware/chain.rb', line 126 def empty? @entries.nil? || @entries.empty? end |
#entries ⇒ Object
90 91 92 |
# File 'lib/sidekiq/middleware/chain.rb', line 90 def entries @entries ||= [] end |
#exists?(klass) ⇒ Boolean
122 123 124 |
# File 'lib/sidekiq/middleware/chain.rb', line 122 def exists?(klass) any? { |entry| entry.klass == klass } end |
#initialize_copy(copy) ⇒ Object
76 77 78 |
# File 'lib/sidekiq/middleware/chain.rb', line 76 def initialize_copy(copy) copy.instance_variable_set(:@entries, entries.dup) end |
#insert_after(oldklass, newklass, *args) ⇒ Object
115 116 117 118 119 120 |
# File 'lib/sidekiq/middleware/chain.rb', line 115 def insert_after(oldklass, newklass, *args) i = entries.index { |entry| entry.klass == newklass } new_entry = i.nil? ? Entry.new(@config, 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) ⇒ Object
108 109 110 111 112 113 |
# File 'lib/sidekiq/middleware/chain.rb', line 108 def insert_before(oldklass, newklass, *args) i = entries.index { |entry| entry.klass == newklass } new_entry = i.nil? ? Entry.new(@config, newklass, *args) : entries.delete_at(i) i = entries.index { |entry| entry.klass == oldklass } || 0 entries.insert(i, new_entry) end |
#invoke(*args) ⇒ Object
138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/sidekiq/middleware/chain.rb', line 138 def invoke(*args) return yield if empty? chain = retrieve traverse_chain = proc do if chain.empty? yield else chain.shift.call(*args, &traverse_chain) end end traverse_chain.call end |
#prepend(klass, *args) ⇒ Object
103 104 105 106 |
# File 'lib/sidekiq/middleware/chain.rb', line 103 def prepend(klass, *args) remove(klass) entries.insert(0, Entry.new(@config, klass, *args)) end |
#remove(klass) ⇒ Object
94 95 96 |
# File 'lib/sidekiq/middleware/chain.rb', line 94 def remove(klass) entries.delete_if { |entry| entry.klass == klass } end |
#retrieve ⇒ Object
130 131 132 |
# File 'lib/sidekiq/middleware/chain.rb', line 130 def retrieve map(&:make_new) end |