Module: Pacer::Routes::BulkOperations

Included in:
PathsRoute, RouteOperations
Defined in:
lib/pacer/route/mixin/bulk_operations.rb

Overview

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.

Instance Method Summary collapse

Instance Method Details

#bulk_job(size = nil, target_graph = nil) ⇒ Object

Iterates over each element in the route, controlling transactions so that they are only committed once every size records.



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/pacer/route/mixin/bulk_operations.rb', line 20

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
      each_slice(size) do |slice|
        print counter if Pacer.verbose?
        counter += size
        target_graph.managed_manual_transaction do
          target_graph.unmanaged_transactions do
            slice.each do |element|
              yield element
            end
          end
          print '.' if Pacer.verbose?
        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

#bulk_map(size = nil, target_graph = nil) ⇒ Object

Like bulk_job that also returns an array of results



9
10
11
12
13
14
15
# File 'lib/pacer/route/mixin/bulk_operations.rb', line 9

def bulk_map(size = nil, target_graph = nil)
  result = []
  bulk_job(size, target_graph) do |e|
    result << yield(e)
  end
  result
end