class GraphQL::StaticValidation::ArgumentLiteralsAreCompatible

Public Instance Methods

validate_node(parent, node, defn, context) click to toggle source
# File lib/graphql/static_validation/rules/argument_literals_are_compatible.rb, line 4
def validate_node(parent, node, defn, context)
  return if node.value.is_a?(GraphQL::Language::Nodes::VariableIdentifier)
  arg_defn = defn.arguments[node.name]
  return unless arg_defn

  begin
    valid = context.valid_literal?(node.value, arg_defn.type)
  rescue GraphQL::CoercionError => err
    error_message = err.message
  end

  return if valid

  error_message ||= begin
    kind_of_node = node_type(parent)
    error_arg_name = parent_name(parent, defn)
    "Argument '#{node.name}' on #{kind_of_node} '#{error_arg_name}' has an invalid value. Expected type '#{arg_defn.type}'."
  end

  context.errors << message(error_message, parent, context: context)
end