class Soda::Middleware::Chain

Constants

Entry

Attributes

entries[R]

Public Class Methods

new() click to toggle source
# File lib/soda/middleware/chain.rb, line 12
def initialize
  @entries = []
end

Public Instance Methods

add(klass, *args) click to toggle source
# File lib/soda/middleware/chain.rb, line 20
def add(klass, *args)
  remove(klass)
  entries << Entry.new(klass, args)
end
each() click to toggle source
# File lib/soda/middleware/chain.rb, line 16
def each
  entries.each(&:block)
end
insert_at(index, klass, *args) click to toggle source
# File lib/soda/middleware/chain.rb, line 29
def insert_at(index, klass, *args)
  entries.insert(index, Entry.new(klass, args))
end
remove(klass) click to toggle source
# File lib/soda/middleware/chain.rb, line 25
def remove(klass)
  entries.delete_if { |entry| entry.klass == klass }
end
use(*args) { || ... } click to toggle source
# File lib/soda/middleware/chain.rb, line 33
def use(*args)
  traverse(entries.dup, args) do
    yield
  end
end

Private Instance Methods

traverse(copy, args) { || ... } click to toggle source
# File lib/soda/middleware/chain.rb, line 43
def traverse(copy, args)
  if copy.empty?
    yield
  else
    entry = copy.shift
    inst  = entry.build

    inst.call(*args) do
      traverse(copy, args) { yield }
    end
  end
end