class GraphQL::StaticValidation::UniqueDirectivesPerLocation

Constants

NODES_WITH_DIRECTIVES

Public Instance Methods

validate(context) click to toggle source
# File lib/graphql/static_validation/rules/unique_directives_per_location.rb, line 10
def validate(context)
  NODES_WITH_DIRECTIVES.each do |node_class|
    context.visitor[node_class] << ->(node, _) {
      validate_directives(node, context) unless node.directives.empty?
    }
  end
end

Private Instance Methods

validate_directives(node, context) click to toggle source
# File lib/graphql/static_validation/rules/unique_directives_per_location.rb, line 20
def validate_directives(node, context)
  used_directives = {}

  node.directives.each do |ast_directive|
    directive_name = ast_directive.name
    if used_directives[directive_name]
      context.errors << message(
        "The directive \"#{directive_name}\" can only be used once at this location.",
        [used_directives[directive_name], ast_directive],
        context: context
      )
    else
      used_directives[directive_name] = ast_directive
    end
  end
end