Class: GraphQL::Subscriptions::SubscriptionRoot::Extension

Inherits:
GraphQL::Schema::FieldExtension show all
Defined in:
lib/graphql/subscriptions/subscription_root.rb

Instance Attribute Summary

Attributes inherited from GraphQL::Schema::FieldExtension

#field, #options

Instance Method Summary collapse

Methods inherited from GraphQL::Schema::FieldExtension

#apply, #initialize, #resolve

Constructor Details

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

Instance Method Details

#after_resolve(value:, context:, object:, arguments:, **rest) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/graphql/subscriptions/subscription_root.rb', line 35

def after_resolve(value:, context:, object:, arguments:, **rest)
  if value.is_a?(GraphQL::ExecutionError)
    value
  elsif (events = context.namespace(:subscriptions)[:events])
    # This is the first execution, so gather an Event
    # for the backend to register:
    events << Subscriptions::Event.new(
      name: field.name,
      arguments: arguments,
      context: context,
      field: field,
    )
    # TODO compat with non-class-based subscriptions?
    value
  elsif context.query.subscription_topic == Subscriptions::Event.serialize(
      field.name,
      arguments,
      field,
      scope: (field.subscription_scope ? context[field.subscription_scope] : nil),
    )
    # This is a subscription update. The resolver returned `skip` if it should be skipped,
    # or else it returned an object to resolve the update.
    value
  else
    # This is a subscription update, but this event wasn't triggered.
    context.skip
  end
end