Sha256: a88eb85f8200a6c484d6c617e6ebe8bb0d4d077f3191873be9ed94d28528d25c

Contents?: true

Size: 1.55 KB

Versions: 7

Compression:

Stored size: 1.55 KB

Contents

module Pacer::Routes

  # Additional iteration methods that allow for rapid data
  # manipulation in transactional graphs. Bulk operations automatically
  # manage transactions in larger batches rather than on every
  # element created or removed or every property set.
  module BulkOperations
    # Like bulk_job that also returns an array of results
    def bulk_map(size = nil, target_graph = nil)
      result = []
      bulk_job(size, target_graph) do |e|
        result << yield(e)
      end
      result
    end

    # Iterates over each element in the route, controlling
    # transactions so that they are only committed once every
    # +size+ records.
    def bulk_job(size = nil, target_graph = nil)
      target_graph ||= graph
      if target_graph and not target_graph.in_bulk_job?
        begin
          target_graph.in_bulk_job = true
          size ||= target_graph.bulk_job_size
          counter = 0
          target_graph.transaction(nesting: true) do |commit, rollback|
            print "Bulk job ->" if Pacer.verbose?
            each_slice(size) do |slice|
              print " #{counter}" if Pacer.verbose?
              counter += size
              slice.each do |element|
                yield element
              end
              commit.call
            end
          end
        ensure
          puts '!' if Pacer.verbose?
          target_graph.in_bulk_job = false
        end
      elsif target_graph
        each do |element|
          yield element
        end
      else
        raise 'No graph in route for bulk job'
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
pacer-1.4.0-java lib/pacer/route/mixin/bulk_operations.rb
pacer-1.3.5-java lib/pacer/route/mixin/bulk_operations.rb
pacer-1.3.4-java lib/pacer/route/mixin/bulk_operations.rb
pacer-1.3.3-java lib/pacer/route/mixin/bulk_operations.rb
pacer-1.3.2-java lib/pacer/route/mixin/bulk_operations.rb
pacer-1.3.1-java lib/pacer/route/mixin/bulk_operations.rb
pacer-1.2.0-java lib/pacer/route/mixin/bulk_operations.rb