Sha256: 996d2b471995ea7e6ff4b26e6700ef9baf7da428874f8a30bbb252eff3654178
Contents?: true
Size: 1.32 KB
Versions: 5
Compression:
Stored size: 1.32 KB
Contents
# Exception-based Event Hooks # Copyright (c) 2004 Thomas Sawyer, All Rights Reserved # hookse.rb =begin = Exception-based Event Hooks Provides an Event Hooks system designed on top of Ruby's built-in Exception system. == Example def dothis2 puts 'pre' hook :quitit puts 'post' end def tryit2 begin puts "BEFORE" dothis2 puts "AFTER" rescue EventHook event :quitit do puts "HERE" end end end tryit2 == Authenticate Copyright (c) 2004 Thomas Sawyer Ruby License =end class EventHook < Exception attr_reader :name, :cc def initialize(name, cc) @name = name @cc = cc end def call @cc.call end end module Kernel def hook(sym) callcc{ |c| raise EventHook.new(sym, c) } end def event(sym) if $!.name == sym yield $!.call end end end # # Test # =begin require 'test/unit' class T attr_reader :a def dothis @a << '{' hook :here @a << '}' end def tryit @a = '' begin @a << "[" dothis @a << "]" rescue EventHook event :here do @a << "HERE" end end end end class TC_Cut < Test::Unit::TestCase def test_run t = T.new t.tryit assert_equal('[{HERE}]', t.a) end end =end
Version data entries
5 entries across 5 versions & 1 rubygems
Version | Path |
---|---|
facets-1.4.1 | forge/more/hookse.rb |
facets-1.4.2 | forge/more/hookse.rb |
facets-1.4.3 | forge/more/hookse.rb |
facets-1.4.4 | forge/more/hookse.rb |
facets-1.4.5 | snip/more/hookse.rb |