class GraphQL::Schema::RelayClassicMutation

Mutations that extend this base class get some conventions added for free:

These conventions were first specified by Relay Classic, but they come in handy:

@see {GraphQL::Schema::Mutation} for an example, it's basically the same.

Public Class Methods

field_options() click to toggle source

Extend {Schema::Mutation.field_options} to add the `input` argument

Calls superclass method GraphQL::Schema::Resolver.field_options
# File lib/graphql/schema/relay_classic_mutation.rb, line 62
def field_options
  sig = super
  # Arguments were added at the root, but they should be nested
  sig[:arguments].clear
  sig[:arguments][:input] = { type: input_type, required: true }
  sig
end
input_object_class(new_class = nil) click to toggle source

The base class for generated input object types @param new_class [Class] The base class to use for generating input object definitions @return [Class] The base class for this mutation's generated input object (default is {GraphQL::Schema::InputObject})

# File lib/graphql/schema/relay_classic_mutation.rb, line 45
def input_object_class(new_class = nil)
  if new_class
    @input_object_class = new_class
  end
  @input_object_class || (superclass.respond_to?(:input_object_class) ? superclass.input_object_class : GraphQL::Schema::InputObject)
end
input_type(new_input_type = nil) click to toggle source

@param new_input_type [Class, nil] If provided, it configures this mutation to accept `new_input_type` instead of generating an input type @return [Class] The generated {Schema::InputObject} class for this mutation's `input`

# File lib/graphql/schema/relay_classic_mutation.rb, line 54
def input_type(new_input_type = nil)
  if new_input_type
    @input_type = new_input_type
  end
  @input_type ||= generate_input_type
end

Private Class Methods

generate_input_type() click to toggle source

Generate the input type for the `input:` argument To customize how input objects are generated, override this method @return [Class] a subclass of {.input_object_class}

# File lib/graphql/schema/relay_classic_mutation.rb, line 75
def generate_input_type
  mutation_args = arguments
  mutation_name = graphql_name
  mutation_class = self
  Class.new(input_object_class) do
    graphql_name("#{mutation_name}Input")
    description("Autogenerated input type of #{mutation_name}")
    mutation(mutation_class)
    own_arguments.merge!(mutation_args)
    argument :client_mutation_id, String, "A unique identifier for the client performing the mutation.", required: false
  end
end

Public Instance Methods

resolve_mutation(**kwargs) click to toggle source

Override {GraphQL::Schema::Mutation#resolve_mutation} to delete `client_mutation_id` from the kwargs.

# File lib/graphql/schema/relay_classic_mutation.rb, line 29
def resolve_mutation(**kwargs)
  # This is handled by Relay::Mutation::Resolve, a bit hacky, but here we are.
  kwargs.delete(:client_mutation_id)
  if kwargs.any?
    resolve(**kwargs)
  else
    resolve
  end
end