Class: GraphQL::Schema::Mutation Private

Inherits:
Resolver
  • Object
show all
Extended by:
GraphQL::Schema::Member::HasFields
Defined in:
lib/graphql/schema/mutation.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

This base class accepts configuration for a mutation root field, then it can be hooked up to your mutation root object type.

If you want to customize how this class generates types, in your base class, override the various generate_* methods.

Examples:

Creating a comment

# Define the mutation:
class Mutations::CreateComment < GraphQL::Schema::Mutation
  argument :body, String, required: true
  argument :post_id, ID, required: true

  field :comment, Types::Comment, null: true
  field :error_messages, [String], null: false

  def resolve(body:, post_id:)
    post = Post.find(post_id)
    comment = post.comments.build(body: body, author: context[:current_user])
    if comment.save
      # Successful creation, return the created object with no errors
      {
        comment: comment,
        errors: [],
      }
    else
      # Failed save, return the errors to the client
      {
        comment: nil,
        errors: comment.errors.full_messages
      }
    end
  end
end

# Hook it up to your mutation:
class Types::Mutation < GraphQL::Schema::Object
  field :create_comment, mutation: Mutations::CreateComment
end

# Call it from GraphQL:
result = MySchema.execute <<-GRAPHQL
mutation {
  createComment(postId: "1", body: "Nice Post!") {
    errors
    comment {
      body
      author {
        login
      }
    }
  }
}
GRAPHQL

See Also:

  • for an extension of this class with some conventions built-in.

Direct Known Subclasses

RelayClassicMutation

Constant Summary

Constants included from GraphQL::Schema::Member::GraphQLTypeNames

GraphQL::Schema::Member::GraphQLTypeNames::Boolean, GraphQL::Schema::Member::GraphQLTypeNames::ID, GraphQL::Schema::Member::GraphQLTypeNames::Int

Instance Attribute Summary

Attributes inherited from Resolver

#context, #object

Class Method Summary collapse

Methods included from GraphQL::Schema::Member::HasFields

add_default_resolve_module, add_field, extended, field, field_class, fields, global_id_field, included, inherited, own_fields

Methods inherited from Resolver

extras, field_options, #initialize, null, #resolve, resolve_method

Methods included from GraphQL::Schema::Member::HasArguments

#argument, #argument_class, #arguments, #own_arguments

Methods included from GraphQL::Schema::Member::BaseDSLMethods

#description, #graphql_name, #introspection, #mutation, #name, #overridden_graphql_name, #to_graphql, #unwrap

Constructor Details

This class inherits a constructor from GraphQL::Schema::Resolver

Class Method Details

.field(*args, &block) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Override this method to handle legacy-style usages of MyMutation.field



66
67
68
69
70
71
72
# File 'lib/graphql/schema/mutation.rb', line 66

def field(*args, &block)
  if args.none?
    raise ArgumentError, "#{name}.field is used for adding fields to this mutation. Use `mutation: #{name}` to attach this mutation instead."
  else
    super
  end
end

.field_class(new_class = nil) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



99
100
101
102
103
104
105
# File 'lib/graphql/schema/mutation.rb', line 99

def field_class(new_class = nil)
  if new_class
    @field_class = new_class
  else
    @field_class || find_inherited_method(:field_class, GraphQL::Schema::Field)
  end
end

.object_class(new_class = nil) ⇒ Class

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

An object class to use for deriving return types

Parameters:

  • new_class (Class, nil) (defaults to: nil)

    Defaults to Object

Returns:

  • (Class)


92
93
94
95
96
97
# File 'lib/graphql/schema/mutation.rb', line 92

def object_class(new_class = nil)
  if new_class
    @object_class = new_class
  end
  @object_class || (superclass.respond_to?(:object_class) ? superclass.object_class : GraphQL::Schema::Object)
end

.payload_type(new_payload_type = nil) ⇒ Class Also known as: type, type_expr

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Call this method to get the derived return type of the mutation, or use it as a configuration method to assign a return type instead of generating one.

Parameters:

  • new_payload_type (Class, nil) (defaults to: nil)

    If a type definition class is provided, it will be used as the return type of the mutation field

Returns:

  • (Class)

    The object type which this mutation returns.



79
80
81
82
83
84
# File 'lib/graphql/schema/mutation.rb', line 79

def payload_type(new_payload_type = nil)
  if new_payload_type
    @payload_type = new_payload_type
  end
  @payload_type ||= generate_payload_type
end