lib/graph_ql/static_validation/validator.rb in graphql-0.2.0 vs lib/graph_ql/static_validation/validator.rb in graphql-0.3.0

- old
+ new

@@ -1,48 +1,44 @@ +# Initialized with a {GraphQL::Schema}, then it can validate {GraphQL::Nodes::Documents}s based on that schema. +# +# By default, it's used by {GraphQL::Query} class GraphQL::StaticValidation::Validator - VALIDATORS = [ - GraphQL::StaticValidation::DirectivesAreDefined, - GraphQL::StaticValidation::ArgumentsAreDefined, - GraphQL::StaticValidation::RequiredArgumentsArePresent, - GraphQL::StaticValidation::ArgumentLiteralsAreCompatible, - GraphQL::StaticValidation::FragmentTypesExist, - GraphQL::StaticValidation::FragmentsAreUsed, - GraphQL::StaticValidation::FieldsAreDefinedOnType, - GraphQL::StaticValidation::FieldsWillMerge, - GraphQL::StaticValidation::FieldsHaveAppropriateSelections, - ] - - def initialize(schema:, validators: VALIDATORS) + def initialize(schema:, rules: GraphQL::StaticValidation::ALL_RULES) @schema = schema - @validators = validators + @rules = rules end def validate(document) context = Context.new(@schema, document) - @validators.each do |validator| - validator.new.validate(context) + @rules.each do |rules| + rules.new.validate(context) end context.visitor.visit(document) context.errors.map(&:to_h) end class Context attr_reader :schema, :document, :errors, :visitor, :fragments def initialize(schema, document) @schema = schema @document = document - @fragments = {} + @fragments = document.parts.each_with_object({}) do |part, memo| + part.is_a?(GraphQL::Nodes::FragmentDefinition) && memo[part.name] = part + end @errors = [] @visitor = GraphQL::Visitor.new - @visitor[GraphQL::Nodes::FragmentDefinition] << -> (node, parent) { @fragments[node.name] = node } @type_stack = GraphQL::StaticValidation::TypeStack.new(schema, visitor) end def object_types @type_stack.object_types end def field_definition @type_stack.field_definitions.last + end + + def directive_definition + @type_stack.directive_definitions.last end end end