Module: Pgbus::Streams::TurboStreamOverride

Includes:
Pgbus::StreamsHelper
Defined in:
lib/pgbus/streams/turbo_stream_override.rb

Overview

Runtime patch that redirects ‘turbo_stream_from` (the view helper) through `pgbus_stream_from` when pgbus streams are enabled. This is the subscribe-side counterpart to `TurboBroadcastable` (which patches the publish-side `broadcast_stream_to`).

Without this patch, third-party gems like hotwire-livereload call ‘turbo_stream_from “hotwire-livereload”` in their views, which renders a `<turbo-cable-stream-source>` element connected to ActionCable. Meanwhile, the `TurboBroadcastable` patch routes the broadcast through PGMQ/SSE. Publisher and subscriber end up on different transports — the message never arrives.

After this patch, ‘turbo_stream_from` renders a `<pgbus-stream-source>` element instead, so both sides use PGMQ/SSE. When `streams_enabled` is false, the original turbo-rails behavior is preserved via `super`.

The ‘include Pgbus::StreamsHelper` is required because some callers invoke `turbo_stream_from` from a Rack middleware context (e.g. hotwire-livereload’s Middleware uses ‘ActionController::Base.helpers`) where `Turbo::StreamsHelper` is available but `Pgbus::StreamsHelper` is not — the engine’s ‘isolate_namespace` scopes helpers to its own views. Including it here ensures `pgbus_stream_from` is always reachable on the receiver.

Instance Method Summary collapse

Methods included from Pgbus::StreamsHelper

#pgbus_stream_from

Instance Method Details

#turbo_stream_from(*streamables, **attributes) ⇒ Object



31
32
33
34
35
36
37
# File 'lib/pgbus/streams/turbo_stream_override.rb', line 31

def turbo_stream_from(*streamables, **attributes)
  if Pgbus.configuration.streams_enabled
    pgbus_stream_from(*streamables, **attributes)
  else
    super
  end
end