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.
Attributes
max_errors
[R]
Integer | Float
on_dependency_resolve_handlers
[R]
Array[^(GraphQL::Language::Nodes::OperationDefinition | GraphQL::Language::Nodes::FragmentDefinition, Array[GraphQL::Language::Nodes::FragmentSpread], GraphQL::Language::Nodes::FragmentDefinition) → void]
schema
[R]
singleton(GraphQL::Schema)
Public Class Methods
(GraphQL::Query query, singleton(GraphQL::StaticValidation::BaseVisitor) visitor_class, Integer? max_errors) → void
Source
# File lib/graphql/static_validation/validation_context.rb, line 40 def initialize(query, visitor_class, max_errors) @query = query #: GraphQL::Query @types = query.types #: GraphQL::Schema::Visibility::Profile | GraphQL::Schema::Warden::VisibilityProfile @schema = query.schema #: singleton(GraphQL::Schema) @input_values = query.input_values #: GraphQL::Execution::InputValues @errors = [] #: Array[GraphQL::StaticValidation::Error] @max_errors = max_errors || Float::INFINITY #: Integer | Float @on_dependency_resolve_handlers = [] #: Array[^(GraphQL::Language::Nodes::OperationDefinition | GraphQL::Language::Nodes::FragmentDefinition, Array[GraphQL::Language::Nodes::FragmentSpread], GraphQL::Language::Nodes::FragmentDefinition) -> void] @visitor = visitor_class.new(document, self) #: GraphQL::StaticValidation::BaseVisitor end
Public Instance Methods
# File lib/graphql/static_validation/validation_context.rb, line 89 def did_you_mean_suggestion(name, options) if did_you_mean = schema.did_you_mean suggestions = did_you_mean.const_get(:SpellChecker).new(dictionary: options).correct(name) case suggestions.size when 0 "" when 1 " (Did you mean `#{suggestions.first}`?)" else last_sugg = suggestions.pop " (Did you mean #{suggestions.map {|s| "`#{s}`"}.join(", ")} or `#{last_sugg}`?)" end end end
() { (GraphQL::Language::Nodes::OperationDefinition | GraphQL::Language::Nodes::FragmentDefinition, Array[GraphQL::Language::Nodes::FragmentSpread], GraphQL::Language::Nodes::FragmentDefinition) → void } → void
Source
# File lib/graphql/static_validation/validation_context.rb, line 57 def on_dependency_resolve(&handler) @on_dependency_resolve_handlers << handler end
() → Hash[String, singleton(GraphQL::Schema::Directive)]
Source
# File lib/graphql/static_validation/validation_context.rb, line 84 def schema_directives @schema_directives ||= schema.directives #: Hash[String, singleton(GraphQL::Schema::Directive)]? end
() → bool
Source
# File lib/graphql/static_validation/validation_context.rb, line 79 def too_many_errors? @errors.length >= @max_errors end
(untyped ast_value, GraphQL::Schema::Member::type_definition | GraphQL::Schema::NonNull | GraphQL::Schema::List type) → GraphQL::Query::InputValidationResult
Source
# File lib/graphql/static_validation/validation_context.rb, line 65 def validate_literal(ast_value, type) @input_values.value_from_ast(ast_value, type, validate: true) GraphQL::Query::InputValidationResult::VALID rescue Execution::InputValues::InvalidLiteralError => err if err.explanation Query::InputValidationResult.from_problem(err.explanation) else INVALID_RESULT end rescue CoercionError => coercion_err Query::InputValidationResult.from_problem(coercion_err.message, message: coercion_err.message, extensions: coercion_err.extensions) end