Sha256: dbeb813c83700750d365c6e93d2084195defe21f7587b048f1e7e2d7076b0cfb

Contents?: true

Size: 553 Bytes

Versions: 2

Compression:

Stored size: 553 Bytes

Contents

module DepthFirst
  # Base parallel aggregator class
  class ParallelAggregator < Task
    TASKS = [].freeze
    KEY   = nil

    def perform
      key   = self.class::KEY
      value = self.class::TASKS.map { |task| execute_promise(task) }
                               .reduce([]) { |a, e| resolve_promise(a, e) }
      { key => value }
    end

    private

    def execute_promise(task)
      Concurrent::Promise.new { task.new(options).perform }.execute
    end

    def resolve_promise(arr, result)
      arr.push(result.value)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
depth_first-0.0.5 lib/depth_first/parallel_aggregator.rb
depth_first-0.0.4 lib/depth_first/parallel_aggregator.rb