Sha256: b5c4698319b0bb584736003aae1b9ebe0d6c864e0bf5a6fce6869e1ab8c4e2bc

Contents?: true

Size: 946 Bytes

Versions: 1

Compression:

Stored size: 946 Bytes

Contents

# frozen_string_literal: true
module GraphQL
  module StaticValidation
    module RequiredArgumentsArePresent
      def on_field(node, _parent)
        assert_required_args(node, field_definition)
        super
      end

      def on_directive(node, _parent)
        directive_defn = context.schema.directives[node.name]
        assert_required_args(node, directive_defn)
        super
      end

      private

      def assert_required_args(ast_node, defn)
        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?
          add_error("#{ast_node.class.name.split("::").last} '#{ast_node.name}' is missing required arguments: #{missing_names.join(", ")}", ast_node)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
graphql-1.9.0.pre1 lib/graphql/static_validation/rules/required_arguments_are_present.rb