Class: GraphQL::Schema::RelayClassicMutation
- Defined in:
- lib/graphql/schema/relay_classic_mutation.rb
Overview
Mutations that extend this base class get some conventions added for free:
- An argument called
clientMutationIdis always added, but it’s not passed to the resolve method. The value is re-inserted to the response. (It’s for client libraries to manage optimistic updates.) - The returned object type always has a field called
clientMutationIdto support that. - The mutation accepts one argument called
input,arguments defined in the mutation class are added to that input object, which is generated by the mutation.
These conventions were first specified by Relay Classic, but they come in handy:
clientMutationIdsupports optimistic updates and cache rollbacks on the client- using a single
input:argument makes it easy to post whole JSON objects to the mutation using one GraphQL variable ($input) instead of making a separate variable for each argument.
Constant Summary
Constants included from Member::GraphQLTypeNames
Member::GraphQLTypeNames::Boolean, Member::GraphQLTypeNames::ID, Member::GraphQLTypeNames::Int
Instance Attribute Summary
Attributes inherited from Resolver
Class Method Summary collapse
-
.field_options ⇒ Object
Extend Schema::Mutation.field_options to add the
inputargument. -
.input_object_class(new_class = nil) ⇒ Class
The base class for generated input object types.
-
.input_type(new_input_type = nil) ⇒ Class
The generated InputObject class for this mutation’s
input.
Instance Method Summary collapse
-
#resolve_with_support(**kwargs) ⇒ Object
Override GraphQL::Schema::Resolver#resolve_with_support to delete
client_mutation_idfrom the kwargs.
Methods inherited from Mutation
field, field_class, object_class, payload_type, visible?
Methods included from Member::HasFields
add_default_resolve_module, #add_field, extended, #field, #field_class, #fields, #global_id_field, #included, #inherited, #own_fields
Methods inherited from Resolver
argument, arguments_loads_as_type, #authorized?, complexity, extras, #initialize, null, #ready?, #resolve, resolve_method, type, type_expr
Methods included from Member::HasPath
Methods included from Member::HasArguments
#add_argument, #argument, #argument_class, #arguments, #own_arguments
Methods included from 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_options ⇒ Object
Extend Schema::Mutation.field_options to add the input argument
57 58 59 60 61 62 63 |
# File 'lib/graphql/schema/relay_classic_mutation.rb', line 57 def 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) ⇒ Class
The base class for generated input object types
40 41 42 43 44 45 |
# File 'lib/graphql/schema/relay_classic_mutation.rb', line 40 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) ⇒ Class
Returns The generated InputObject class for this mutation’s input
49 50 51 52 53 54 |
# File 'lib/graphql/schema/relay_classic_mutation.rb', line 49 def input_type(new_input_type = nil) if new_input_type @input_type = new_input_type end @input_type ||= generate_input_type end |
Instance Method Details
#resolve_with_support(**kwargs) ⇒ Object
Override GraphQL::Schema::Resolver#resolve_with_support to
delete client_mutation_id from the kwargs.
30 31 32 33 34 |
# File 'lib/graphql/schema/relay_classic_mutation.rb', line 30 def resolve_with_support(**kwargs) # This is handled by Relay::Mutation::Resolve, a bit hacky, but here we are. kwargs.delete(:client_mutation_id) super end |