class Shoryuken::Middleware::Chain
Attributes
entries[R]
Public Class Methods
new() { |self| ... }
click to toggle source
# File lib/shoryuken/middleware/chain.rb, line 47 def initialize @entries = [] yield self if block_given? end
Public Instance Methods
add(klass, *args)
click to toggle source
# File lib/shoryuken/middleware/chain.rb, line 60 def add(klass, *args) entries << Entry.new(klass, *args) unless exists?(klass) end
clear()
click to toggle source
# File lib/shoryuken/middleware/chain.rb, line 90 def clear entries.clear end
dup()
click to toggle source
# File lib/shoryuken/middleware/chain.rb, line 52 def dup self.class.new.tap { |new_chain| new_chain.entries.replace(entries) } end
exists?(klass)
click to toggle source
# File lib/shoryuken/middleware/chain.rb, line 82 def exists?(klass) entries.any? { |entry| entry.klass == klass } end
insert_after(oldklass, newklass, *args)
click to toggle source
# File lib/shoryuken/middleware/chain.rb, line 75 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.find_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/shoryuken/middleware/chain.rb, line 68 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.find_index { |entry| entry.klass == oldklass } || 0 entries.insert(i, new_entry) end
invoke(*args, &final_action)
click to toggle source
# File lib/shoryuken/middleware/chain.rb, line 94 def invoke(*args, &final_action) chain = retrieve.dup traverse_chain = lambda do if chain.empty? final_action.call else chain.shift.call(*args, &traverse_chain) end end traverse_chain.call end
prepend(klass, *args)
click to toggle source
# File lib/shoryuken/middleware/chain.rb, line 64 def prepend(klass, *args) entries.insert(0, Entry.new(klass, *args)) unless exists?(klass) end
remove(klass)
click to toggle source
# File lib/shoryuken/middleware/chain.rb, line 56 def remove(klass) entries.delete_if { |entry| entry.klass == klass } end
retrieve()
click to toggle source
# File lib/shoryuken/middleware/chain.rb, line 86 def retrieve entries.map(&:make_new) end