Class: Sniffer::Middleware::Chain

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/sniffer/middleware/chain.rb

Overview

Stores all the middleware configs

Instance Method Summary collapse

Instance Method Details

#add(klass, *args) ⇒ Object



40
41
42
# File 'lib/sniffer/middleware/chain.rb', line 40

def add(klass, *args)
  entries.push(Entry.new(klass, *args))
end

#each(&block) ⇒ Object



36
37
38
# File 'lib/sniffer/middleware/chain.rb', line 36

def each(&block)
  entries.each(&block)
end

#entriesObject



32
33
34
# File 'lib/sniffer/middleware/chain.rb', line 32

def entries
  @entries ||= []
end

#invoke_request(*args) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
# File 'lib/sniffer/middleware/chain.rb', line 48

def invoke_request(*args)
  chain = map(&:make_new).dup
  traverse_chain = lambda do
    if chain.empty?
      yield
    else
      chain.shift.request(*args, &traverse_chain)
    end
  end
  traverse_chain.call
end

#invoke_response(*args) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
# File 'lib/sniffer/middleware/chain.rb', line 60

def invoke_response(*args)
  chain = map(&:make_new).dup
  traverse_chain = lambda do
    if chain.empty?
      yield
    else
      chain.shift.response(*args, &traverse_chain)
    end
  end
  traverse_chain.call
end

#remove(klass) ⇒ Object



44
45
46
# File 'lib/sniffer/middleware/chain.rb', line 44

def remove(klass)
  entries.delete_if { |entry| entry.klass == klass }
end