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
- #safe_broadcast_append_to(*args, **kwargs, &block) ⇒ Object
- #safe_broadcast_prepend_to(*args, **kwargs, &block) ⇒ Object
- #safe_broadcast_remove_to(*args, **kwargs, &block) ⇒ Object
- #safe_broadcast_replace_to(*args, **kwargs, &block) ⇒ Object
- #safe_broadcast_update_to(*args, **kwargs, &block) ⇒ Object
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 |