Sha256: 07d01ba63c6bee00ed1bc3477a884ff304297b622ca18d363913e16579113174

Contents?: true

Size: 1007 Bytes

Versions: 4

Compression:

Stored size: 1007 Bytes

Contents

module Mandy
  class Reducer
    
    KEY_VALUE_SEPERATOR = "\t" unless defined?(KEY_VALUE_SEPERATOR)
    
    def initialize(input=STDIN, output=STDOUT)
      @input, @output = input, output
    end
    
    def self.compile(&blk)
      Class.new(Mandy::Reducer) do 
        self.class_eval do
          define_method(:reducer, blk) if blk
        end
      end
    end
    
    def execute
      last_key, values = nil, []
      @input.each_line do |line|
         key, value = line.split(KEY_VALUE_SEPERATOR)
         value.chomp!
         last_key = key if last_key.nil?
         if key != last_key
           reducer(last_key, values)
           last_key, values = key, []
         end
         values << value
      end
    end
    
    def emit(key, value=nil)
      key = 'nil' if key.nil?
      @output.puts(value.nil? ? key.to_s : "#{key}\t#{value}")
    end
    
    private
    
    def reducer(key,value)
      # default reducer is simply a pass-through
      emit(key, value)
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
trafficbroker-mandy-0.1.0 lib/reducer.rb
trafficbroker-mandy-0.1.1 lib/reducer.rb
trafficbroker-mandy-0.1.2 lib/reducer.rb
trafficbroker-mandy-0.1.3 lib/reducer.rb