Module: GraphQL::Language::OperationSlice

Defined in:
lib/graphql/language/operation_slice.rb

Class Method Summary collapse

Class Method Details

.slice(document, operation_name) ⇒ Object

Public: Return’s minimal document to represent operation.

Find’s target operation and any fragment dependencies and returns a new document with just those definitions.

document - The Nodes::Document to find definitions. operation_name - The String name of Nodes::OperationDefinition

Returns new Nodes::Document.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/graphql/language/operation_slice.rb', line 15

def self.slice(document, operation_name)
  definitions = []
  definitions << document.definitions.find { |d| d.name == operation_name }

  visitor = Visitor.new(document)
  visitor[Nodes::FragmentSpread] << -> (node, parent) {
    if fragment = document.definitions.find { |d| d.name == node.name }
      definitions << fragment
    end
  }
  visitor.visit

  Nodes::Document.new(definitions: definitions.uniq)
end