[ANN] Multiblocks 0.1.0 -- emulating Smalltalk type multiblock calls

Hi list, group,

I'm glad to announce:

Multiblocks

···

===========

A framework for defining callgroups, that is, a group of methods which
behave in a somewhat Smalltalkish way, ie. they appear to be one method
which can take multiple blocks.

Location
--------

The homepage is

http://www.creo.hu/~csaba/ruby/multiblocks/

There is also a Rubyforge project page:

http://rubyforge.org/projects/multiblocks/

Distributed as gem, zip, and tarball (a quick link to this):

http://www.creo.hu/~csaba/ruby/multiblocks/download/multiblocks-0.1.0.tar.gz

under the Ruby License.

Example
-------

In following example a callgroup will be created, where the calls in the
group take keys and blocks, and upon execution, the blocks are called in
order according to the keys.

  class PermuteBlocks
    callgroup(:do,:&)
    def sanitizer
      @grpargv[-1][1].size == 1 and @grpargv[-1][2]
    end
    grp_finalizer :end do
      @grpargv.sort_by {|a| a[1]}.each {|a| a[2][] }
    end
  end

  PermuteBlocks.new.do(2){puts "a"}.&(1){puts "b"}.&(3){puts "c"}.end
  p PermuteBlocks.callgroups

produces:

  b
  a
  c
  {:@grpargv=>{:calls=>[:do, :&], :sanitizer=>:sanitizer, :finalizers=>[:end]}}

It can be also useful if one needs keyword arguments with reflection.
That is, instead of writing something like

  Server.start(:port => 1234, :dir => "/tmp/foo", :user => "nobody")

one could write

  Server.port(1234).dir("/tmp/foo").user("nobody").start

Further features
--------
    * thread safe
    * provides a clean and simple way for structuring arguments of
      complex method calls

Documentation
-------------

Rdoc. Online version at

http://www.creo.hu/~csaba/ruby/multiblocks/rdoc

Csaba