Class: GraphQL::Schema::Mutation

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

Overview

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 :errors, [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, get_field, global_id_field, included, inherited, own_fields

Methods inherited from Resolver

argument, arguments_loads_as_type, #authorized?, complexity, extras, field_options, #initialize, null, #ready?, #resolve, resolve_method, #resolve_with_support

Methods included from GraphQL::Schema::Member::HasPath

#path

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

#add_argument, #argument, #argument_class, #arguments, #own_arguments

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

#accessible?, #authorized?, #default_graphql_name, #description, #graphql_name, #introspection, #mutation, #name, #overridden_graphql_name, #to_graphql, #visible?

Constructor Details

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

Class Method Details

.field(*args, &block) ⇒ Object

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



89
90
91
92
93
94
95
# File 'lib/graphql/schema/mutation.rb', line 89

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

An object class to use for deriving return types

Parameters:

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

    Defaults to Object

Returns:

  • (Class)


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

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

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

.visible?(context) ⇒ Boolean

Returns:



107
108
109
# File 'lib/graphql/schema/mutation.rb', line 107

def visible?(context)
  true
end