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