Class: Delayed::Callback
- Inherits:
-
Object
- Object
- Delayed::Callback
- Defined in:
- lib/delayed/lifecycle.rb
Instance Method Summary collapse
- #add(type, &callback) ⇒ Object
- #execute(*args, &block) ⇒ Object
-
#initialize ⇒ Callback
constructor
A new instance of Callback.
Constructor Details
#initialize ⇒ Callback
Returns a new instance of Callback.
55 56 57 58 59 60 61 |
# File 'lib/delayed/lifecycle.rb', line 55 def initialize @before = [] @after = [] # Identity proc. Avoids special cases when there is no existing around chain. @around = lambda { |*args, &block| block.call(*args) } end |
Instance Method Details
#add(type, &callback) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/delayed/lifecycle.rb', line 70 def add(type, &callback) case type when :before @before << callback when :after @after << callback when :around chain = @around # use a local variable so that the current chain is closed over in the following lambda @around = lambda { |*a, &block| chain.call(*a) { |*b| callback.call(*b, &block) } } else raise InvalidCallback, "Invalid callback type: #{type}" end end |
#execute(*args, &block) ⇒ Object
63 64 65 66 67 68 |
# File 'lib/delayed/lifecycle.rb', line 63 def execute(*args, &block) @before.each { |c| c.call(*args) } result = @around.call(*args, &block) @after.each { |c| c.call(*args) } result end |