public
Description: Simple map/reduce in Ruby
Homepage: http://romeda.org/blog/2007/04/mapreduce-in-36-lines-of-ruby.html
Clone URL: git://github.com/defunkt/mapreducerb.git
mapreducerb / mapreduce_enumerable.rb
100644 24 lines (19 sloc) 0.481 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
require 'rubygems'
require 'ringy_dingy'
require 'ruby2ruby'
 
module Enumerable
  def dmap(&block)
    each_with_index do |element,idx|
      ring_server.write([:dmap, Process.pid, block.to_ruby, element, idx])
    end
 
    results = []
    while results.size < size
      result, idx = ring_server.take([:dmap, Process.pid, nil, nil]).last(2)
      results[idx] = result
    end
 
    results
  end
 
  def ring_server
    @ring_server ||= RingyDingy.new(nil).ring_server
  end
end