Sha256: 24dca1fc5b35504160bdb170cecd54d8a85d8da92ef8b569dc10783670b4fe04

Contents?: true

Size: 1.23 KB

Versions: 20

Compression:

Stored size: 1.23 KB

Contents

class GraphQL::StaticValidation::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)
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
graphql-0.12.1 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.12.0 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.11.1 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.11.0 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.10.9 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.10.8 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.10.7 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.10.6 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.10.5 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.10.4 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.10.3 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.10.2 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.10.1 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.10.0 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.9.5 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.9.4 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.9.3 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.9.2 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.8.1 lib/graphql/static_validation/rules/required_arguments_are_present.rb
graphql-0.8.0 lib/graphql/static_validation/rules/required_arguments_are_present.rb