Method: GraphQL::Subscriptions::ActionCableSubscriptions#delete_subscription

Defined in:
lib/graphql/subscriptions/action_cable_subscriptions.rb

#delete_subscription(subscription_id) ⇒ Object

The channel was closed, forget about it.



226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
# File 'lib/graphql/subscriptions/action_cable_subscriptions.rb', line 226

def delete_subscription(subscription_id)
  query = @subscriptions.delete(subscription_id)
  # In case this came from the server, tell the client to unsubscribe:
  @action_cable.server.broadcast(stream_subscription_name(subscription_id), { more: false })
  # This can be `nil` when `.trigger` happens inside an unsubscribed ActionCable channel,
  # see https://github.com/rmosolgo/graphql-ruby/issues/2478
  if query
    events = query.context.namespace(:subscriptions)[:events]
    events.each do |event|
      ev_by_fingerprint = @events[event.topic]
      ev_for_fingerprint = ev_by_fingerprint[event.fingerprint]
      ev_for_fingerprint.delete(event)
      if ev_for_fingerprint.empty?
        ev_by_fingerprint.delete(event.fingerprint)
      end
    end
  end
end