Class: GraphQL::StaticValidation::ComplexityValidator

Inherits:
Object
  • Object
show all
Includes:
Message::MessageHelper
Defined in:
lib/graphql/static_validation/complexity_validator.rb

Instance Method Summary collapse

Methods included from Message::MessageHelper

#message

Constructor Details

#initialize(max_fields:, list_multiplier:) ⇒ ComplexityValidator

Returns a new instance of ComplexityValidator.



4
5
6
7
# File 'lib/graphql/static_validation/complexity_validator.rb', line 4

def initialize(max_fields:, list_multiplier:)
  @max_fields = max_fields
  @list_multiplier = list_multiplier
end

Instance Method Details

#validate(context) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/graphql/static_validation/complexity_validator.rb', line 9

def validate(context)
  visitor = context.visitor
  complexity = 0
  visitor[GraphQL::Language::Nodes::Field] << -> (node, parent) {
    field_type = field_definition.type
    if field_type.kind.list?
      complexity += list_multiplier
    else
      complexity += 1
    end
  }

  visitor[GraphQL::Language::Nodes::Document].exit << -> (node, parent) {
    if complexity > @max_fields
      context.errors << message("This query is too complex. Request fewer fields.", node)
    end
  }
end