Sha256: c8332bbb0b6547c73eaeb8ac24a8a6237dc1343c123905efe6783232f4779740

Contents?: true

Size: 1003 Bytes

Versions: 19

Compression:

Stored size: 1003 Bytes

Contents

module Lederhosen

  class Buffer
    # for when you need to write out to a shitload of files.

    #
    # Create a new buffer
    #
    def initialize(args={})
      @buffer = Hash.new { |h, k| h[k] = Array.new }
      @buffer_max = args[:buffer_max] || 100_000
    end

    #
    # Add an object to the buffer
    #
    def add_to bucket, obj

      @buffer[bucket] << obj.to_s

      if @buffer[bucket].length > @buffer_max
        # write out
        File.open(bucket, 'a+') do |out|
          @buffer[bucket].each do |v|
            out.puts v
          end
        end

        # clear that bucket
        @buffer[bucket].clear
      end
    end

    def [] k
      @buffer[k]
    end

    #
    # Writes out leftover objects
    #
    def finalize
      @buffer.each_key do |bucket|
        File.open(bucket, 'a+') do |out|
          @buffer[bucket].each do |v|
            out.puts v
          end
        end
      end
      @buffer = Hash.new { |h, k| h[k] = Array.new }
    end
  
  end

end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
lederhosen-0.1.6 lib/lederhosen/buffer.rb
lederhosen-0.1.5 lib/lederhosen/buffer.rb
lederhosen-0.1.4 lib/lederhosen/buffer.rb
lederhosen-0.1.3 lib/lederhosen/buffer.rb
lederhosen-0.1.2 lib/lederhosen/buffer.rb
lederhosen-0.1.1 lib/lederhosen/buffer.rb
lederhosen-0.1.0 lib/lederhosen/buffer.rb
lederhosen-0.0.11 lib/lederhosen/buffer.rb
lederhosen-0.0.10 lib/lederhosen/buffer.rb
lederhosen-0.0.9 lib/lederhosen/buffer.rb
lederhosen-0.0.8 lib/lederhosen/buffer.rb
lederhosen-0.0.7 lib/lederhosen/buffer.rb
lederhosen-0.0.6 lib/lederhosen/buffer.rb
lederhosen-0.0.5 lib/lederhosen/buffer.rb
lederhosen-0.0.4 lib/lederhosen/buffer.rb
lederhosen-0.0.3 lib/lederhosen/buffer.rb
lederhosen-0.0.2 lib/lederhosen/buffer.rb
lederhosen-0.0.1 lib/lederhosen/buffer.rb
lederhosen-0.0.0 lib/lederhosen/buffer.rb