Class: GraphQL::Schema::Mutation

Inherits:
Resolver
  • Object
show all
Extended by:
GraphQL::Schema::Member::HasFields, Resolver::HasPayloadType
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::HasFields

GraphQL::Schema::Member::HasFields::CONFLICT_FIELD_NAMES, GraphQL::Schema::Member::HasFields::GRAPHQL_RUBY_KEYWORDS, GraphQL::Schema::Member::HasFields::RUBY_KEYWORDS

Constants included from Resolver::HasPayloadType

Resolver::HasPayloadType::NO_INTERFACES

Constants included from GraphQL::Schema::Member::HasArguments

GraphQL::Schema::Member::HasArguments::NO_ARGUMENTS

Constants included from FindInheritedValue::EmptyObjects

FindInheritedValue::EmptyObjects::EMPTY_ARRAY, FindInheritedValue::EmptyObjects::EMPTY_HASH

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, #field, #object

Class Method Summary collapse

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

add_field, all_field_definitions, field, field_class, fields, get_field, global_id_field, own_fields

Methods included from Resolver::HasPayloadType

field, field_class, object_class, payload_type

Methods inherited from Resolver

argument, #arguments, #authorized?, broadcastable, broadcastable?, complexity, #dataloader, extension, extensions, extras, field_options, has_max_page_size?, #initialize, max_page_size, null, #ready?, #resolve, resolve_method, #resolve_with_support, type, type_expr, #unauthorized_object

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

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

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

#add_argument, #all_argument_definitions, #argument, #argument_class, #arguments, #arguments_statically_coercible?, #coerce_arguments, #get_argument, #own_arguments, #validate_directive_argument

Methods included from GraphQL::Schema::Member::HasValidators

#validates, #validators

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

#path

Constructor Details

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

Class Method Details

.field(*args, **kwargs, &block) ⇒ Object

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



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

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

.visible?(context) ⇒ Boolean

Returns:



75
76
77
# File 'lib/graphql/schema/mutation.rb', line 75

def visible?(context)
  true
end