• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

I made a small utility library named Wormhole. The library enables us to communicate between caller and callee.

Here is a simple example of use.

   1  require 'rubygems'
   2  require 'wormhole'
   3  
   4  def foo(array)
   5    array << :foo # (1)
   6    Wormhole.throw array
   7    array << :baz # (3)
   8  end
   9  
  10  result = Wormhole.catch do
  11    foo []
  12  end.return do |array|
  13    array << :bar # (2)
  14  end
  15  puts result.inspect # => [:foo, :bar, :baz]

First, the block passed to Wormhole.catch, the caller, is evaluated. The foo method, the callee, throw an array object passing through the wormhole. Then the array is caught by the last block passed to a return method. A block parameter of the block is the array. Finally, the process goes back to the point 3 after the last block ends. A return value of the foo method is returned via the return method.

By using this utility, you can participate to a depth of a complicated system from a safer position.

At the end, you can install this utility from the GitHub by using gem command like this.

   1  % sudo gem sources -a http://gems.github.com
   2  % sudo gem install genki-wormhole

Have fun!

posted by Png takiuchi on Sat 5 Jul 2008 at 01:53 with 2 comments

Comments:

Face Hongli almost 16 years ago.

What is the advantage over a regular 'yield', like this?

 def foo(array)
   array << :foo
   yield(array)
   array << :baz
 end

 foo do |array|
   array << :bar
 end
Png 瀧内元気 almost 16 years ago.

Suppose there is a black box system between your codes, like this:

caller -> blackbox -> callee

The wormhole enable us to pass anything through the black box to callee from caller without any modifications to the black box.

Vice-versa.

caller <- blackbox <- callee

For example, the black box tends to be a framework such as Ruby on Rails, the callee is a callback and the caller is your application code.

or Preview
Social Bookmarks
  • Delicious
  • B_entry654
  • Clip_16_12_w
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ