Class: GraphQL::StaticValidation::Validator
- Inherits:
-
Object
- Object
- GraphQL::StaticValidation::Validator
- Defined in:
- lib/graphql/static_validation/validator.rb
Overview
Initialized with a GraphQL::Schema, then it can validate Language::Nodes::Documentss based on that schema.
By default, it's used by Query
Instance Method Summary collapse
-
#initialize(schema:, rules: GraphQL::StaticValidation::ALL_RULES) ⇒ Validator
constructor
A new instance of Validator.
-
#validate(query, validate: true) ⇒ Array<Hash>
Validate
query
against the schema.
Constructor Details
#initialize(schema:, rules: GraphQL::StaticValidation::ALL_RULES) ⇒ Validator
Returns a new instance of Validator.
16 17 18 19 |
# File 'lib/graphql/static_validation/validator.rb', line 16 def initialize(schema:, rules: GraphQL::StaticValidation::ALL_RULES) @schema = schema @rules = rules end |
Instance Method Details
#validate(query, validate: true) ⇒ Array<Hash>
Validate query
against the schema. Returns an array of message hashes.
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/graphql/static_validation/validator.rb', line 24 def validate(query, validate: true) query.trace("validate", { validate: validate, query: query }) do context = GraphQL::StaticValidation::ValidationContext.new(query) rewrite = GraphQL::InternalRepresentation::Rewrite.new # Put this first so its enters and exits are always called rewrite.validate(context) # If the caller opted out of validation, don't attach these if validate @rules.each do |rules| rules.new.validate(context) end end context.visitor.visit rewrite_result = rewrite.document # Post-validation: allow validators to register handlers on rewritten query nodes GraphQL::InternalRepresentation::Visit.visit_each_node(rewrite_result.operation_definitions, context.each_irep_node_handlers) { errors: context.errors, # If there were errors, the irep is garbage irep: context.errors.any? ? nil : rewrite_result, } end end |