Class: GraphQL::Subscriptions::DefaultSubscriptionResolveExtension

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

Instance Attribute Summary

Attributes inherited from GraphQL::Schema::FieldExtension

#added_default_arguments, #added_extras, #field, #options

Instance Method Summary collapse

Methods inherited from GraphQL::Schema::FieldExtension

#after_define, #after_define_apply, #apply, default_argument, default_argument_configurations, extras, #initialize

Constructor Details

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

Instance Method Details

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


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/graphql/subscriptions/default_subscription_resolve_extension.rb', line 20

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:
    event = Subscriptions::Event.new(
      name: field.name,
      arguments: arguments_without_field_extras(arguments: arguments),
      context: context,
      field: field,
    )
    events << event
    value
  elsif context.query.subscription_topic == Subscriptions::Event.serialize(
      field.name,
      arguments_without_field_extras(arguments: 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

#resolve(context:, object:, arguments:) ⇒ Object


5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/graphql/subscriptions/default_subscription_resolve_extension.rb', line 5

def resolve(context:, object:, arguments:)
  has_override_implementation = @field.resolver ||
    object.respond_to?(@field.resolver_method)

  if !has_override_implementation
    if context.query.subscription_update?
      object.object
    else
      context.skip
    end
  else
    yield(object, arguments)
  end
end