Module: Studio::Broadcastable

Extended by:
ActiveSupport::Concern
Defined in:
app/models/concerns/studio/broadcastable.rb

Overview

Mixin for ActiveRecord models that broadcast Turbo Streams. It wraps turbo-rails’ broadcast_*_to methods in Studio::Cable.safe_broadcast, so a cable failure (a Redis hiccup, a missing/misconfigured adapter) can NEVER break the model save / after_commit that triggered the broadcast — the SEV-1 guard, in one place. The host model already has the raw broadcast_*_to methods (turbo-rails includes Turbo::Broadcastable into ActiveRecord::Base); these are the SAFE variants every app should broadcast through.

class Task < ApplicationRecord
  include Studio::Broadcastable
  after_create_commit { safe_broadcast_replace_to [:board], target: "card_#{id}",
                                                    partial: "tasks/card", locals: { task: self } }
end

Instance Method Summary collapse

Instance Method Details

#safe_broadcast_append_to(*args, **kwargs, &block) ⇒ Object



28
29
30
# File 'app/models/concerns/studio/broadcastable.rb', line 28

def safe_broadcast_append_to(*args, **kwargs, &block)
  Studio::Cable.safe_broadcast { broadcast_append_to(*args, **kwargs, &block) }
end

#safe_broadcast_prepend_to(*args, **kwargs, &block) ⇒ Object



32
33
34
# File 'app/models/concerns/studio/broadcastable.rb', line 32

def safe_broadcast_prepend_to(*args, **kwargs, &block)
  Studio::Cable.safe_broadcast { broadcast_prepend_to(*args, **kwargs, &block) }
end

#safe_broadcast_remove_to(*args, **kwargs, &block) ⇒ Object



36
37
38
# File 'app/models/concerns/studio/broadcastable.rb', line 36

def safe_broadcast_remove_to(*args, **kwargs, &block)
  Studio::Cable.safe_broadcast { broadcast_remove_to(*args, **kwargs, &block) }
end

#safe_broadcast_replace_to(*args, **kwargs, &block) ⇒ Object



20
21
22
# File 'app/models/concerns/studio/broadcastable.rb', line 20

def safe_broadcast_replace_to(*args, **kwargs, &block)
  Studio::Cable.safe_broadcast { broadcast_replace_to(*args, **kwargs, &block) }
end

#safe_broadcast_update_to(*args, **kwargs, &block) ⇒ Object



24
25
26
# File 'app/models/concerns/studio/broadcastable.rb', line 24

def safe_broadcast_update_to(*args, **kwargs, &block)
  Studio::Cable.safe_broadcast { broadcast_update_to(*args, **kwargs, &block) }
end