class Defer::Block

Public Class Methods

run(base, &block) click to toggle source
# File lib/defer/block.rb, line 5
def self.run(base, &block)
  new(base).run(&block)
end

Public Instance Methods

defer(&block) click to toggle source
# File lib/defer/block.rb, line 19
def defer(&block)
  _stack.unshift(block)
end
recover() click to toggle source
# File lib/defer/block.rb, line 23
def recover
  @_recovered = true
  @_exception
end
run(&block) click to toggle source
# File lib/defer/block.rb, line 9
def run(&block)
  ret = instance_eval(&block)
rescue Exception => e
  @_exception = e
ensure
  _cleanup
  raise @_exception if @_exception && !@_recovered
  ret
end

Private Instance Methods

_cleanup() click to toggle source
# File lib/defer/block.rb, line 34
def _cleanup
  _stack.each do |blk|
    blk.call
  end
end
_stack() click to toggle source
# File lib/defer/block.rb, line 30
def _stack
  @_stack ||= []
end