Class: GraphQL::Subscriptions::Event

Inherits:
Object
  • Object
show all
Defined in:
lib/graphql/subscriptions/event.rb

Overview

This thing can be:

  • Subscribed to by subscription { ... }
  • Triggered by MySchema.subscriber.trigger(name, arguments, obj)

An array of Events are passed to store.register(query, events).

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name:, arguments:, field: nil, context: nil, scope: nil) ⇒ Event

Returns a new instance of Event.



23
24
25
26
27
28
29
30
31
# File 'lib/graphql/subscriptions/event.rb', line 23

def initialize(name:, arguments:, field: nil, context: nil, scope: nil)
  @name = name
  @arguments = arguments
  @context = context
  field ||= context.field
  scope_val = scope || (context && field.subscription_scope && context[field.subscription_scope])

  @topic = self.class.serialize(name, arguments, field, scope: scope_val)
end

Instance Attribute Details

#argumentsGraphQL::Query::Arguments (readonly)



15
16
17
# File 'lib/graphql/subscriptions/event.rb', line 15

def arguments
  @arguments
end

#contextGraphQL::Query::Context (readonly)



18
19
20
# File 'lib/graphql/subscriptions/event.rb', line 18

def context
  @context
end

#nameString (readonly)

Returns Corresponds to the Subscription root field name.

Returns:

  • (String)

    Corresponds to the Subscription root field name



12
13
14
# File 'lib/graphql/subscriptions/event.rb', line 12

def name
  @name
end

#topicString (readonly)

Returns An opaque string which identifies this event, derived from name and arguments.

Returns:

  • (String)

    An opaque string which identifies this event, derived from name and arguments



21
22
23
# File 'lib/graphql/subscriptions/event.rb', line 21

def topic
  @topic
end

Class Method Details

.serialize(name, arguments, field, scope:) ⇒ String

Returns an identifier for this unit of subscription.

Returns:

  • (String)

    an identifier for this unit of subscription



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/graphql/subscriptions/event.rb', line 34

def self.serialize(name, arguments, field, scope:)
  normalized_args = case arguments
  when GraphQL::Query::Arguments
    arguments
  when Hash
    GraphQL::Query::LiteralInput.from_arguments(
      arguments,
      field,
      nil,
    )
  else
    raise ArgumentError, "Unexpected arguments: #{arguments}, must be Hash or GraphQL::Arguments"
  end

  sorted_h = normalized_args.to_h.sort.to_h
  JSON.dump([scope, name, sorted_h])
end