Class: GraphQL::Language::Mutator

Inherits:
Object
  • Object
show all
Defined in:
lib/graphql/language/mutator.rb

Instance Method Summary collapse

Constructor Details

#initialize(document) ⇒ Mutator

Returns a new instance of Mutator.



7
8
9
# File 'lib/graphql/language/mutator.rb', line 7

def initialize(document)
  @document = document
end

Instance Method Details

#prepend_selection(selection) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/graphql/language/mutator.rb', line 25

def prepend_selection(selection)
  on_selections = -> (node, parent) {
    return if !node.selections.any?
    # TODO: Simplify if AbstractNode#eql? is implemented
    existing_selections = Set.new(node.selections.map { |s| s.respond_to?(:name) ? s.name : nil }.compact)
    selections_to_prepend = [selection].reject { |s| existing_selections.include?(s.name) }
    node.selections = selections_to_prepend + node.selections
  }

  visitor = Visitor.new(@document)
  visitor[Nodes::Field].leave << on_selections
  visitor[Nodes::FragmentDefinition].leave << on_selections
  visitor[Nodes::InlineFragment].leave << on_selections
  visitor[Nodes::OperationDefinition].leave << on_selections
  visitor.visit

  nil
end

#rename_definitions(definitions) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/graphql/language/mutator.rb', line 11

def rename_definitions(definitions)
  rename_node = -> (node, parent) {
    node.name = definitions.fetch(node.name, node.name)
  }

  visitor = Visitor.new(@document)
  visitor[Nodes::FragmentDefinition].leave << rename_node
  visitor[Nodes::OperationDefinition].leave << rename_node
  visitor[Nodes::FragmentSpread].leave << rename_node
  visitor.visit

  nil
end