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