class Circuitry::Middleware::Chain
Public Class Methods
new() { |self| ... }
click to toggle source
# File lib/circuitry/middleware/chain.rb, line 8 def initialize yield self if block_given? end
Public Instance Methods
add(klass, *args)
click to toggle source
# File lib/circuitry/middleware/chain.rb, line 20 def add(klass, *args) remove(klass) if exists?(klass) entries << Entry.new(klass, *args) end
build()
click to toggle source
# File lib/circuitry/middleware/chain.rb, line 50 def build map(&:build) end
clear()
click to toggle source
# File lib/circuitry/middleware/chain.rb, line 54 def clear entries.clear end
each(&block)
click to toggle source
# File lib/circuitry/middleware/chain.rb, line 12 def each(&block) entries.each(&block) end
entries()
click to toggle source
# File lib/circuitry/middleware/chain.rb, line 16 def entries @entries ||= [] end
exists?(klass)
click to toggle source
# File lib/circuitry/middleware/chain.rb, line 46 def exists?(klass) any? { |entry| entry.klass == klass } end
insert_after(old_klass, new_klass, *args)
click to toggle source
# 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)
click to toggle source
# 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) { || ... }
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# File lib/circuitry/middleware/chain.rb, line 25 def remove(klass) entries.delete_if { |entry| entry.klass == klass } end
Private Instance Methods
build_or_replace_entry(klass, *args)
click to toggle source
# File lib/circuitry/middleware/chain.rb, line 74 def build_or_replace_entry(klass, *args) i = entries.index { |entry| entry.klass == klass } entry = i.nil? ? Entry.new(klass, *args) : entries.delete_at(i) if entry.args == args entry else Entry.new(klass, *args) end end