Class: Circuitry::Middleware::Chain
- Inherits:
-
Object
- Object
- Circuitry::Middleware::Chain
- Includes:
- Enumerable
- Defined in:
- lib/circuitry/middleware/chain.rb
Instance Method Summary collapse
- #add(klass, *args) ⇒ Object
- #build ⇒ Object
- #clear ⇒ Object
- #each(&block) ⇒ Object
- #entries ⇒ Object
- #exists?(klass) ⇒ Boolean
-
#initialize {|_self| ... } ⇒ Chain
constructor
A new instance of Chain.
- #insert_after(old_klass, new_klass, *args) ⇒ Object
- #insert_before(old_klass, new_klass, *args) ⇒ Object
- #invoke(*args) ⇒ Object
- #prepend(klass, *args) ⇒ Object
- #remove(klass) ⇒ Object
Constructor Details
#initialize {|_self| ... } ⇒ Chain
Returns a new instance of Chain.
8 9 10 |
# File 'lib/circuitry/middleware/chain.rb', line 8 def initialize yield self if block_given? end |
Instance Method Details
#add(klass, *args) ⇒ Object
20 21 22 23 |
# File 'lib/circuitry/middleware/chain.rb', line 20 def add(klass, *args) remove(klass) if exists?(klass) entries << Entry.new(klass, *args) end |
#build ⇒ Object
50 51 52 |
# File 'lib/circuitry/middleware/chain.rb', line 50 def build map(&:build) end |
#clear ⇒ Object
54 55 56 |
# File 'lib/circuitry/middleware/chain.rb', line 54 def clear entries.clear end |
#each(&block) ⇒ Object
12 13 14 |
# File 'lib/circuitry/middleware/chain.rb', line 12 def each(&block) entries.each(&block) end |
#entries ⇒ Object
16 17 18 |
# File 'lib/circuitry/middleware/chain.rb', line 16 def entries @entries ||= [] end |
#exists?(klass) ⇒ Boolean
46 47 48 |
# File 'lib/circuitry/middleware/chain.rb', line 46 def exists?(klass) any? { |entry| entry.klass == klass } end |
#insert_after(old_klass, new_klass, *args) ⇒ Object
40 41 42 43 44 |
# File 'lib/circuitry/middleware/chain.rb', line 40 def insert_after(old_klass, new_klass, *args) new_entry = build_or_replace_entry(new_klass, *args) i = entries.index { |entry| entry.klass == old_klass } || entries.size - 1 entries.insert(i + 1, new_entry) end |
#insert_before(old_klass, new_klass, *args) ⇒ Object
34 35 36 37 38 |
# File 'lib/circuitry/middleware/chain.rb', line 34 def insert_before(old_klass, new_klass, *args) new_entry = build_or_replace_entry(new_klass, *args) i = entries.index { |entry| entry.klass == old_klass } || 0 entries.insert(i, new_entry) end |
#invoke(*args) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/circuitry/middleware/chain.rb', line 58 def invoke(*args) chain = build.dup traverse_chain = lambda do if chain.empty? yield else chain.shift.call(*args, &traverse_chain) end end traverse_chain.call end |
#prepend(klass, *args) ⇒ Object
29 30 31 32 |
# File 'lib/circuitry/middleware/chain.rb', line 29 def prepend(klass, *args) remove(klass) if exists?(klass) entries.unshift(Entry.new(klass, *args)) end |
#remove(klass) ⇒ Object
25 26 27 |
# File 'lib/circuitry/middleware/chain.rb', line 25 def remove(klass) entries.delete_if { |entry| entry.klass == klass } end |