Class: GraphQL::Stitching::Executor

Inherits:
Object
  • Object
show all
Defined in:
lib/graphql/stitching/executor.rb,
lib/graphql/stitching/executor/shaper.rb,
lib/graphql/stitching/executor/path_access.rb,
lib/graphql/stitching/executor/root_source.rb,
lib/graphql/stitching/executor/type_resolver_source.rb

Overview

Executor handles executing upon a planned request. All planned steps are initiated, their results merged, and loaded keys are collected for batching subsequent steps. Final execution results are then shaped to match the request selection.

Defined Under Namespace

Modules: PathAccess Classes: RootSource, Shaper, TypeResolverSource

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(request, data: {}, errors: [], after: Planner::ROOT_INDEX, nonblocking: false) ⇒ Executor

Builds a new executor.

Parameters:

  • request (Request)

    the stitching request to execute.

  • nonblocking (Boolean) (defaults to: false)

    specifies if the dataloader should use async concurrency.



31
32
33
34
35
36
37
38
39
# File 'lib/graphql/stitching/executor.rb', line 31

def initialize(request, data: {}, errors: [], after: Planner::ROOT_INDEX, nonblocking: false)
  @request = request
  @data = data
  @errors = errors
  @after = after
  @query_count = 0
  @exec_cycles = 0
  @dataloader = GraphQL::Dataloader.new(nonblocking: nonblocking)
end

Instance Attribute Details

#dataHash (readonly)

Returns an aggregate data payload to return.

Returns:

  • (Hash)

    an aggregate data payload to return.



20
21
22
# File 'lib/graphql/stitching/executor.rb', line 20

def data
  @data
end

#errorsArray<Hash> (readonly)

Returns aggregate GraphQL errors to return.

Returns:

  • (Array<Hash>)

    aggregate GraphQL errors to return.



23
24
25
# File 'lib/graphql/stitching/executor.rb', line 23

def errors
  @errors
end

#query_countInteger

Returns tally of queries performed while executing.

Returns:

  • (Integer)

    tally of queries performed while executing.



26
27
28
# File 'lib/graphql/stitching/executor.rb', line 26

def query_count
  @query_count
end

#requestRequest (readonly)

Returns the stitching request to execute.

Returns:

  • (Request)

    the stitching request to execute.



17
18
19
# File 'lib/graphql/stitching/executor.rb', line 17

def request
  @request
end

Instance Method Details

#perform(raw: false) ⇒ Object



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

def perform(raw: false)
  exec!([@after])
  result = {}

  if @data && @data.length > 0
    result["data"] = raw ? @data : Shaper.new(@request).perform!(@data)
  end

  if @errors.length > 0
    result["errors"] = @errors
  end
  
  GraphQL::Query::Result.new(query: @request, values: result)
end