Class: Shoryuken::Middleware::Chain
- Inherits:
-
Object
- Object
- Shoryuken::Middleware::Chain
- Defined in:
- lib/shoryuken/middleware/chain.rb
Instance Attribute Summary collapse
-
#entries ⇒ Object
readonly
Returns the value of attribute entries.
Instance Method Summary collapse
- #add(klass, *args) ⇒ Object
- #clear ⇒ Object
- #dup ⇒ Object
- #exists?(klass) ⇒ Boolean
-
#initialize {|_self| ... } ⇒ Chain
constructor
A new instance of Chain.
- #insert_after(oldklass, newklass, *args) ⇒ Object
- #insert_before(oldklass, newklass, *args) ⇒ Object
- #invoke(*args, &final_action) ⇒ Object
- #prepend(klass, *args) ⇒ Object
- #remove(klass) ⇒ Object
- #retrieve ⇒ Object
Constructor Details
#initialize {|_self| ... } ⇒ Chain
Returns a new instance of Chain.
49 50 51 52 |
# File 'lib/shoryuken/middleware/chain.rb', line 49 def initialize @entries = [] yield self if block_given? end |
Instance Attribute Details
#entries ⇒ Object (readonly)
Returns the value of attribute entries.
47 48 49 |
# File 'lib/shoryuken/middleware/chain.rb', line 47 def entries @entries end |
Instance Method Details
#add(klass, *args) ⇒ Object
62 63 64 |
# File 'lib/shoryuken/middleware/chain.rb', line 62 def add(klass, *args) entries << Entry.new(klass, *args) unless exists?(klass) end |
#clear ⇒ Object
92 93 94 |
# File 'lib/shoryuken/middleware/chain.rb', line 92 def clear entries.clear end |
#dup ⇒ Object
54 55 56 |
# File 'lib/shoryuken/middleware/chain.rb', line 54 def dup self.class.new.tap { |new_chain| new_chain.entries.replace(entries) } end |
#exists?(klass) ⇒ Boolean
84 85 86 |
# File 'lib/shoryuken/middleware/chain.rb', line 84 def exists?(klass) entries.any? { |entry| entry.klass == klass } end |
#insert_after(oldklass, newklass, *args) ⇒ Object
77 78 79 80 81 82 |
# File 'lib/shoryuken/middleware/chain.rb', line 77 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) ⇒ Object
70 71 72 73 74 75 |
# File 'lib/shoryuken/middleware/chain.rb', line 70 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) ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/shoryuken/middleware/chain.rb', line 96 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) ⇒ Object
66 67 68 |
# File 'lib/shoryuken/middleware/chain.rb', line 66 def prepend(klass, *args) entries.insert(0, Entry.new(klass, *args)) unless exists?(klass) end |
#remove(klass) ⇒ Object
58 59 60 |
# File 'lib/shoryuken/middleware/chain.rb', line 58 def remove(klass) entries.delete_if { |entry| entry.klass == klass } end |
#retrieve ⇒ Object
88 89 90 |
# File 'lib/shoryuken/middleware/chain.rb', line 88 def retrieve entries.map(&:make_new) end |