Simple native Channel object for Ruby MRI

(c) 2009 Lourens Naudé (methodmissing), James Tucker (raggi) 

http://github.com/methodmissing/channel

This library works with Ruby 1.8 and 1.9 and is a more efficient implementation of the following Ruby code :

class RubyChannel
  def initialize
    @subscribers = []
  end
  def subscribe(&b)
    @subscribers << b
    self
  end
  def <<(o)
    @subscribers.each { |s| s.call(o) }
  end
end

Use cases :

* In process message dispatch
* Parsers and protocols with a message, error and warning channel 
* Facilitates decoupled notification and callback patterns

Caveats :

* Fixed width channel size for very thin, and fast, subscriber management

Examples :

counter = 0
ch = Channel.new.subscribe{|obj| counter += obj }
ch << 3
ch << -2
counter #=> 1

Todo :

* A deferrable mode that notifies on a background thread (pending 1.9)
* More flexible notification mechanism through integration with http://github.com/methodmissing/callback/tree/master 
* Filters

To run the test suite:

rake

To run the benchmarks:

rake bench