Sha256: 71b7c69c95400b5703b98748be0f4538d54edc1cabeeeec897b41488a883b500

Contents?: true

Size: 1.38 KB

Versions: 20

Compression:

Stored size: 1.38 KB

Contents

module GraphQL
  module StaticValidation
    class RequiredArgumentsArePresent
      include GraphQL::StaticValidation::Message::MessageHelper

      def validate(context)
        v = context.visitor
        v[GraphQL::Language::Nodes::Field] << -> (node, parent) { validate_field(node, context) }
        v[GraphQL::Language::Nodes::Directive] << -> (node, parent) { validate_directive(node, context) }
      end

      private

      def validate_directive(ast_directive, context)
        directive_defn = context.schema.directives[ast_directive.name]
        assert_required_args(ast_directive, directive_defn, context)
      end

      def validate_field(ast_field, context)
        return if context.skip_field?(ast_field.name)
        defn = context.field_definition
        assert_required_args(ast_field, defn, context)
      end

      def assert_required_args(ast_node, defn, context)
        present_argument_names = ast_node.arguments.map(&:name)
        required_argument_names = defn.arguments.values
          .select { |a| a.type.kind.non_null? }
          .map(&:name)

        missing_names = required_argument_names - present_argument_names
        if missing_names.any?
          context.errors << message("#{ast_node.class.name.split("::").last} '#{ast_node.name}' is missing required arguments: #{missing_names.join(", ")}", ast_node, context: context)
        end
      end
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
graphql-0.19.3 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.19.2 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.19.1 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.19.0 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.18.15 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.18.14 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.18.13 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.18.12 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.18.11 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.18.10 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.18.9 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.18.8 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.18.7 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.18.6 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.18.5 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.18.4 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.18.3 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.18.2 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.18.1 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.18.0 lib/graphql/static_validation/rules/required_arguments_are_present.rb