Table of Contents


This gem provides the GraphQL::Channel concern that has everything you may need to run your requests through ActionCable. You can also use the GraphQL::BaseChannel as your superclass (which just implements the concern).



This setting allows defining which schema will be used by default.

# app/channels/my_channel.rb
self.gql_schema = 'GraphQL::MySchema'
# OR
self.gql_schema = GraphQL::MySchema

The namespace is not supported because the class must be loaded before the schema can be found.


Here is the list of actions that are implemented by the concern:


It will use the helpers provided to execute a request from the provided data.



Identifies if the received request within data should be threated as a compiled request.
Default: false.


It will return the Hash for the response of the gql_response generated using the provided data. It will also call gql_merge_subscriptions with any subscription created during the request.


It will merge the current subscriptions with any other ones created during the provided request.


It will return a Hash with the response of the provided request in the :result key and an additional :more key informing if any subscriptions were added during the request.


It will extract a series of parameters from the provided data as a preparation for a request. You can override this or any of the other helpers this method will call. Beware, the origin key is vital for subscriptions to work correctly.

gql_request(schema = gql_schema)

It initiates a new request for the provided schema.

gql_query_cache_key(key = nil, version = nil)

Attempt to build build a cache key for cached requests. You can provide the key, or it will be fetched from data['query_cache_key'], and the version, or it will be fetched from data['query_cache_version'].


It will resolve the underlying schema from self.class.gql_schema or by attempting to find a schema with the same name as your application. You can use the provided data in your override to estipulate the proper schema.


It returns the context for the GraphQL request. You should override this method to add your own keys to it. By default, it will add the received action name to it.

{ action: (data['action'] || :receive).to_sym }

gql_variables(data, variables = data['variables'])

It will properly parse the provided variables, so it is a usable Hash. For example, if the value is a string, it will JSON.parse(variables), and if it is controller parameters, it will variables.permit!.to_h.


It stores all the subscriptions current active by the instance of the channel.


It will call gql_remove_subscriptions for all of the subscriptions stored in the gql_subscriptions. An after_unsubscribe callback is automatically added to this method.


It will use the underlying schema to unsubscribe from one or more provided sids (subscription ids).