Sha256: d41a5b8ad945b181f6c5088d9d2274eaa46e83df4fdd235a729509c80c8d14b8

Contents?: true

Size: 1.19 KB

Versions: 75

Compression:

Stored size: 1.19 KB

Contents

# frozen_string_literal: true
module GraphQL
  module StaticValidation
    class UniqueDirectivesPerLocation
      include GraphQL::StaticValidation::Message::MessageHelper

      NODES_WITH_DIRECTIVES = GraphQL::Language::Nodes.constants
        .map{|c| GraphQL::Language::Nodes.const_get(c)}
        .select{|c| c.is_a?(Class) && c.instance_methods.include?(:directives)}

      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

      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
    end
  end
end

Version data entries

75 entries across 75 versions & 1 rubygems

Version Path
graphql-1.8.18 lib/graphql/static_validation/rules/unique_directives_per_location.rb
graphql-1.8.17 lib/graphql/static_validation/rules/unique_directives_per_location.rb
graphql-1.8.16 lib/graphql/static_validation/rules/unique_directives_per_location.rb
graphql-1.8.15 lib/graphql/static_validation/rules/unique_directives_per_location.rb
graphql-1.8.14 lib/graphql/static_validation/rules/unique_directives_per_location.rb
graphql-1.8.13 lib/graphql/static_validation/rules/unique_directives_per_location.rb
graphql-1.8.12 lib/graphql/static_validation/rules/unique_directives_per_location.rb
graphql-1.8.11 lib/graphql/static_validation/rules/unique_directives_per_location.rb
graphql-1.8.10 lib/graphql/static_validation/rules/unique_directives_per_location.rb
graphql-1.8.9 lib/graphql/static_validation/rules/unique_directives_per_location.rb
graphql-1.8.8 lib/graphql/static_validation/rules/unique_directives_per_location.rb
graphql-1.8.7 lib/graphql/static_validation/rules/unique_directives_per_location.rb
graphql-1.8.6 lib/graphql/static_validation/rules/unique_directives_per_location.rb
graphql-1.8.5 lib/graphql/static_validation/rules/unique_directives_per_location.rb
graphql-1.8.4 lib/graphql/static_validation/rules/unique_directives_per_location.rb
graphql-1.8.3 lib/graphql/static_validation/rules/unique_directives_per_location.rb
graphql-1.8.2 lib/graphql/static_validation/rules/unique_directives_per_location.rb
graphql-1.8.1 lib/graphql/static_validation/rules/unique_directives_per_location.rb
graphql-1.8.0 lib/graphql/static_validation/rules/unique_directives_per_location.rb
graphql-1.8.0.pre11 lib/graphql/static_validation/rules/unique_directives_per_location.rb