Module: GraphQL::StaticValidation::OperationNamesAreValid

Defined in:
lib/graphql/static_validation/rules/operation_names_are_valid.rb

Instance Method Summary collapse

Instance Method Details

#initializeObject


5
6
7
8
# File 'lib/graphql/static_validation/rules/operation_names_are_valid.rb', line 5

def initialize(*)
  super
  @operation_names = Hash.new { |h, k| h[k] = [] }
end

#on_document(node, parent) ⇒ Object


15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/graphql/static_validation/rules/operation_names_are_valid.rb', line 15

def on_document(node, parent)
  super
  op_count = @operation_names.values.inject(0) { |m, v| m + v.size }

  @operation_names.each do |name, nodes|
    if name.nil? && op_count > 1
      add_error(GraphQL::StaticValidation::OperationNamesAreValidError.new(
        %|Operation name is required when multiple operations are present|,
        nodes: nodes
      ))
    elsif nodes.length > 1
      add_error(GraphQL::StaticValidation::OperationNamesAreValidError.new(
        %|Operation name "#{name}" must be unique|,
        nodes: nodes,
        name: name
      ))
    end
  end
end

#on_operation_definition(node, parent) ⇒ Object


10
11
12
13
# File 'lib/graphql/static_validation/rules/operation_names_are_valid.rb', line 10

def on_operation_definition(node, parent)
  @operation_names[node.name] << node
  super
end