class GraphQL::StaticValidation::RequiredArgumentsArePresent

Public Instance Methods

validate(context) click to toggle source
# File lib/graphql/static_validation/rules/required_arguments_are_present.rb, line 7
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 Instance Methods

assert_required_args(ast_node, defn, context) click to toggle source
# File lib/graphql/static_validation/rules/required_arguments_are_present.rb, line 25
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
validate_directive(ast_directive, context) click to toggle source
# File lib/graphql/static_validation/rules/required_arguments_are_present.rb, line 15
def validate_directive(ast_directive, context)
  directive_defn = context.schema.directives[ast_directive.name]
  assert_required_args(ast_directive, directive_defn, context)
end
validate_field(ast_field, context) click to toggle source
# File lib/graphql/static_validation/rules/required_arguments_are_present.rb, line 20
def validate_field(ast_field, context)
  defn = context.field_definition
  assert_required_args(ast_field, defn, context)
end