Class: GraphQL::Analysis::AST::QueryDepth

Inherits:
Analyzer
  • Object
show all
Defined in:
lib/graphql/analysis/ast/query_depth.rb

Direct Known Subclasses

MaxQueryDepth

Instance Method Summary collapse

Methods inherited from Analyzer

#analyze?, #visit?

Constructor Details

#initialize(query) ⇒ QueryDepth

Returns a new instance of QueryDepth.



28
29
30
31
32
33
# File 'lib/graphql/analysis/ast/query_depth.rb', line 28

def initialize(query)
  @max_depth = 0
  @current_depth = 0
  @count_introspection_fields = query.schema.count_introspection_fields
  super
end

Instance Method Details

#on_enter_field(node, parent, visitor) ⇒ Object



35
36
37
38
39
40
41
# File 'lib/graphql/analysis/ast/query_depth.rb', line 35

def on_enter_field(node, parent, visitor)
  return if visitor.skipping? ||
    visitor.visiting_fragment_definition? ||
      (@count_introspection_fields == false && visitor.field_definition.introspection?)

  @current_depth += 1
end

#on_leave_field(node, parent, visitor) ⇒ Object



43
44
45
46
47
48
49
50
51
52
# File 'lib/graphql/analysis/ast/query_depth.rb', line 43

def on_leave_field(node, parent, visitor)
  return if visitor.skipping? ||
    visitor.visiting_fragment_definition? ||
    (@count_introspection_fields == false && visitor.field_definition.introspection?)

  if @max_depth < @current_depth
    @max_depth = @current_depth
  end
  @current_depth -= 1
end

#resultObject



54
55
56
# File 'lib/graphql/analysis/ast/query_depth.rb', line 54

def result
  @max_depth
end