graphql-relay

Gem Version Build Status Code Climate Test Coverage

Helpers for using graphql with Relay.

Installation

gem "graphql-relay"
bundle install

Usage

Global Ids

Global Ids provide refetching & global identification for Relay.

You should implement an object that responds to #object_from_id(global_id) & #type_from_object(object), then pass it to GraphQL::Relay::Node.create(implementation). Example

Then, you can add global id fields to your types with global_id_field definition helper. Example

Connections

Connections will provide arguments, pagination and pageInfo for Arrays or ActiveRecord::Relations. You can use the connection definition helper.

Then, implement the field. It's different than a normal field:

  • use the connection helper to define it, instead of field
  • Call #connection_type on an ObjectType for the field's return type (eg, ShipType.connection_type)
  • implement resolve to return an Array or an ActiveRecord::Relation, depending on the connection type.

Example 1, Example 2

Mutations

Mutations allow Relay to mutate your system. When you define a mutation, you'll be defining:

  • A field for your schema's mutation root
  • A derived InputObjectType for input values
  • A derived ObjectType for return values

You don't define anything having to do with clientMutationId. That's automatically created.

To define a mutation, use GraphQL::Relay::Mutation.define. Inside the block, you should configure:

  • name, which will name the mutation field & derived types
  • input_fields, which will be applied to the derived InputObjectType
  • return_fields, which will be applied to the derived ObjectType
  • resolve(-> (inputs, ctx)), the mutation which will actually happen

The resolve proc:

  • Takes inputs, which is a hash whose keys are the ones defined by input_field
  • Takes ctx, which is the query context you passed with the context: keyword
  • Must return a hash with keys matching your defined return_fields

Examples:

Todo

  • [ ] Fix Node.create -- make it return one object which exposes useful info

More Resources