class GraphQL::StaticValidation::BaseVisitor

Attributes

context[R]
object_types[R]

@return [Array<GraphQL::ObjectType>] Types whose scope we've entered

Public Class Methods

including_rules(rules, rewrite: true) click to toggle source

Build a class to visit the AST and perform validation, or use a pre-built class if rules is `ALL_RULES` or empty. @param rules [Array<Module, Class>] @param rewrite [Boolean] if `false`, don't include rewrite @return [Class] A class for validating `rules` during visitation

# File lib/graphql/static_validation/base_visitor.rb, line 37
def self.including_rules(rules, rewrite: true)
  if rules.empty?
    if rewrite
      NoValidateVisitor
    else
      # It's not doing _anything?!?_
      BaseVisitor
    end
  elsif rules == ALL_RULES
    if rewrite
      DefaultVisitor
    else
      InterpreterVisitor
    end
  else
    visitor_class = Class.new(self) do
      include(GraphQL::StaticValidation::DefinitionDependencies)
    end

    rules.reverse_each do |r|
      # If it's a class, it gets attached later.
      if !r.is_a?(Class)
        visitor_class.include(r)
      end
    end

    if rewrite
      visitor_class.include(GraphQL::InternalRepresentation::Rewrite)
    end
    visitor_class.include(ContextMethods)
    visitor_class
  end
end
new(document, context) click to toggle source
Calls superclass method GraphQL::Language::Visitor::new
# File lib/graphql/static_validation/base_visitor.rb, line 5
def initialize(document, context)
  @path = []
  @object_types = []
  @directives = []
  @field_definitions = []
  @argument_definitions = []
  @directive_definitions = []
  @context = context
  @schema = context.schema
  super(document)
end

Public Instance Methods

path() click to toggle source

@return [Array<String>] The nesting of the current position in the AST

# File lib/graphql/static_validation/base_visitor.rb, line 28
def path
  @path.dup
end
rewrite_document() click to toggle source

This will be overwritten by {InternalRepresentation::Rewrite} if it's included

# File lib/graphql/static_validation/base_visitor.rb, line 18
def rewrite_document
  nil
end

Private Instance Methods

add_error(error, path: nil) click to toggle source
# File lib/graphql/static_validation/base_visitor.rb, line 207
def add_error(error, path: nil)
  if @context.too_many_errors?
    throw :too_many_validation_errors
  end
  error.path ||= (path || @path.dup)
  context.errors << error
end