Class: GraphQL::Parallel::ExecutionStrategy::OperationResolution

Inherits:
Query::SerialExecution::OperationResolution
  • Object
show all
Defined in:
lib/graphql/parallel/execution_strategy.rb

Instance Method Summary collapse

Instance Method Details

#finish_all_futures(result_object) ⇒ Object

Recurse over result_object, finding any futures and getting their finished values.



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/graphql/parallel/execution_strategy.rb', line 40

def finish_all_futures(result_object)
  if result_object.is_a?(GraphQL::Parallel::FutureFieldResolution)
    resolved_value = finish_all_futures(result_object.result)
  elsif result_object.is_a?(Hash)
    result_object.each do |key, value|
      result_object[key] = finish_all_futures(value)
    end
    resolved_value = result_object
  elsif result_object.is_a?(Array)
    resolved_value = result_object.map { |v| finish_all_futures(v) }
  else
    resolved_value = result_object
  end
  resolved_value

end

#resultObject



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/graphql/parallel/execution_strategy.rb', line 25

def result
  result_futures = super
  if execution_strategy.has_futures?
    finished_result = finish_all_futures(result_futures)
  else
    # Don't bother re-traversing the result if there are no futures.
    finished_result = result_futures
  end
ensure
  execution_strategy.pool.terminate
  finished_result
end