Skip to content

Commit

Permalink
Merge pull request sidekiq#2029 from seuros/prepend
Browse files Browse the repository at this point in the history
Introduce chain#prepend
  • Loading branch information
mperham committed Oct 28, 2014
2 parents 1f89a88 + 0ef3114 commit d503d96
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 1 deletion.
3 changes: 2 additions & 1 deletion Changes.md
Expand Up @@ -2,11 +2,12 @@ HEAD
-----------

- Fix typo for generator test file name [dlackty, #2016]
- Add Sidekiq::Middleware::Chain#prepend [seuros, #2029]

3.2.6
-----------

- Deprecate delay extension for ActionMailer 4.2+ . [#1933]
- Deprecate delay extension for ActionMailer 4.2+ . [seuros, #1933]
- Poll interval tuning now accounts for dead processes [epchris, #1984]
- Add non-production environment to Web UI page titles [JacobEvelyn, #2004]

Expand Down
5 changes: 5 additions & 0 deletions lib/sidekiq/middleware/chain.rb
Expand Up @@ -89,6 +89,11 @@ def add(klass, *args)
entries << Entry.new(klass, *args)
end

def prepend(klass, *args)
remove(klass) if exists?(klass)
entries.insert(0, Entry.new(klass, *args))
end

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)
Expand Down
9 changes: 9 additions & 0 deletions test/test_middleware.rb
Expand Up @@ -96,6 +96,15 @@ def call(*args)
assert_equal 1, chain.count
end

it 'correctly prepends middleware' do
chain = Sidekiq::Middleware::Chain.new
chain_entries = chain.entries
chain.add CustomMiddleware
chain.prepend YetAnotherCustomMiddleware
assert_equal YetAnotherCustomMiddleware, chain_entries.first.klass
assert_equal CustomMiddleware, chain_entries.last.klass
end

it 'allows middleware to abruptly stop processing rest of chain' do
recorder = []
chain = Sidekiq::Middleware::Chain.new
Expand Down

0 comments on commit d503d96

Please sign in to comment.