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