Class: GraphQL::Language::Mutator

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

Defined Under Namespace

Modules: LazyName

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



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/graphql/language/mutator.rb', line 34

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



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/graphql/language/mutator.rb', line 17

def rename_definitions(definitions)
  rename_node = -> (node, parent) {
    if name = definitions[node.name]
      node.extend(LazyName) if name.is_a?(Proc)
      node.name = name
    end
  }

  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