class GraphQL::StaticValidation::ValidationContext
The validation context gets passed to each validator.
It exposes a {GraphQL::Language::Visitor} where validators may add hooks. ({Language::Visitor#visit} is called in {Validator#validate})
It provides access to the schema & fragments which validators may read from.
It holds a list of errors which each validator may add to.
It also provides limited access to the {TypeStack} instance, which tracks state as you climb in and out of different fields.
Attributes
Public Class Methods
# File lib/graphql/static_validation/validation_context.rb, line 21 def initialize(query) @query = query @literal_validator = LiteralValidator.new(context: query.context) @errors = [] @visitor = GraphQL::Language::Visitor.new(document) @type_stack = GraphQL::StaticValidation::TypeStack.new(schema, visitor) definition_dependencies = DefinitionDependencies.mount(self) @on_dependency_resolve_handlers = [] @each_irep_node_handlers = [] visitor[GraphQL::Language::Nodes::Document].leave << ->(_n, _p) { @dependencies = definition_dependencies.dependency_map { |defn, spreads, frag| @on_dependency_resolve_handlers.each { |h| h.call(defn, spreads, frag) } } } end
Public Instance Methods
@return [GraphQL::Argument, nil] The most-recently-entered GraphQL::Argument
, if currently inside one
# File lib/graphql/static_validation/validation_context.rb, line 75 def argument_definition # Don't get the _last_ one because that's the current one. # Get the second-to-last one, which is the parent of the current one. @type_stack.argument_definitions[-2] end
@return [GraphQL::Directive, nil] The most-recently-entered GraphQL::Directive
, if currently inside one
# File lib/graphql/static_validation/validation_context.rb, line 70 def directive_definition @type_stack.directive_definitions.last end
# File lib/graphql/static_validation/validation_context.rb, line 45 def each_irep_node(&handler) @each_irep_node_handlers << handler end
@return [GraphQL::Field, nil] The most-recently-entered GraphQL::Field
, if currently inside one
# File lib/graphql/static_validation/validation_context.rb, line 60 def field_definition @type_stack.field_definitions.last end
# File lib/graphql/static_validation/validation_context.rb, line 41 def object_types @type_stack.object_types end
# File lib/graphql/static_validation/validation_context.rb, line 37 def on_dependency_resolve(&handler) @on_dependency_resolve_handlers << handler end
@return [GraphQL::BaseType] The type which the current type came from
# File lib/graphql/static_validation/validation_context.rb, line 55 def parent_type_definition object_types[-2] end
@return [Array<String>] Field
names to get to the current field
# File lib/graphql/static_validation/validation_context.rb, line 65 def path @type_stack.path.dup end
@return [GraphQL::BaseType] The current object type
# File lib/graphql/static_validation/validation_context.rb, line 50 def type_definition object_types.last end
# File lib/graphql/static_validation/validation_context.rb, line 81 def valid_literal?(ast_value, type) @literal_validator.validate(ast_value, type) end