diff --git a/app/models/concerns/turbo/broadcastable.rb b/app/models/concerns/turbo/broadcastable.rb index 62da793f..69c42b4f 100644 --- a/app/models/concerns/turbo/broadcastable.rb +++ b/app/models/concerns/turbo/broadcastable.rb @@ -71,9 +71,10 @@ def broadcasts_to(stream, inserts_by: :append, target: broadcast_target_default) after_destroy_commit -> { broadcast_remove_to stream.try(:call, self) || send(stream) } end - # Same as #broadcasts_to, but the designated stream is automatically set to the current model. - def broadcasts(inserts_by: :append, target: broadcast_target_default) - after_create_commit -> { broadcast_action_later action: inserts_by, target: target.try(:call, self) || target } + # Same as #broadcasts_to, but the designated stream for updates and destroys is automatically set to + # the current model, for creates - to the model plural name, which can be overriden by passing stream. + def broadcasts(stream = model_name.plural, inserts_by: :append, target: broadcast_target_default) + after_create_commit -> { broadcast_action_later_to stream, action: inserts_by, target: target.try(:call, self) || target } after_update_commit -> { broadcast_replace_later } after_destroy_commit -> { broadcast_remove } end diff --git a/test/dummy/app/models/article.rb b/test/dummy/app/models/article.rb index 574ef299..9d15f4d6 100644 --- a/test/dummy/app/models/article.rb +++ b/test/dummy/app/models/article.rb @@ -3,7 +3,7 @@ class Article < ApplicationRecord validates :body, presence: true - broadcasts target: "overriden-target" + broadcasts "overriden-stream", target: "overriden-target" def to_gid_param to_param diff --git a/test/streams/broadcastable_test.rb b/test/streams/broadcastable_test.rb index 8d4bfc1c..7ba0d4d8 100644 --- a/test/streams/broadcastable_test.rb +++ b/test/streams/broadcastable_test.rb @@ -121,7 +121,7 @@ class Turbo::BroadcastableArticleTest < ActionCable::Channel::TestCase include ActiveJob::TestHelper, Turbo::Streams::ActionHelper test "creating an article broadcasts to the overriden target with a string" do - assert_broadcast_on "body", turbo_stream_action_tag("append", target: "overriden-target", template: "

Body

\n") do + assert_broadcast_on "overriden-stream", turbo_stream_action_tag("append", target: "overriden-target", template: "

Body

\n") do perform_enqueued_jobs do Article.create!(body: "Body") end