From a755d8a205180f230cc4aff88a7d8f8e00573287 Mon Sep 17 00:00:00 2001 From: BenClaw Date: Sun, 17 May 2026 16:36:28 +0200 Subject: [PATCH] refactor(broadcasting): add Broadcastable to List + Order, remove monkey-patch - include Broadcastable in app/models/list.rb - include Broadcastable in app/models/order.rb - Remove config/initializers/model_broadcast.rb (ApplicationController.new anti-pattern) - Broadcasting now goes through Mozo.broadcast_* directly, not via controller hack --- app/models/list.rb | 1 + app/models/order.rb | 1 + config/initializers/model_broadcast.rb | 31 -------------------------- 3 files changed, 2 insertions(+), 31 deletions(-) delete mode 100644 config/initializers/model_broadcast.rb diff --git a/app/models/list.rb b/app/models/list.rb index 1c0ea8e7..77777155 100644 --- a/app/models/list.rb +++ b/app/models/list.rb @@ -1,6 +1,7 @@ class List include SimplyStored::Couch include ActiveModel::SerializerSupport + include Broadcastable include List::JoinRequests per_page_method :limit_value #kaminari diff --git a/app/models/order.rb b/app/models/order.rb index 9690d674..4fbb602b 100644 --- a/app/models/order.rb +++ b/app/models/order.rb @@ -1,6 +1,7 @@ class Order include SimplyStored::Couch include ActiveModel::SerializerSupport + include Broadcastable property :state, default: 'placed' # placed, active, delivered, cancelled, closed diff --git a/config/initializers/model_broadcast.rb b/config/initializers/model_broadcast.rb deleted file mode 100644 index bb505c41..00000000 --- a/config/initializers/model_broadcast.rb +++ /dev/null @@ -1,31 +0,0 @@ -# frozen_string_literal: true - -# Broadcast shim: provides broadcast_supplier / broadcast_user to all -# SimplyStored::Couch models without requiring ApplicationController.new. -# -# PREVIOUSLY (dangerous): -# ApplicationController.new.send(:broadcast_supplier, *args) -# → leaked controller instances, no request lifecycle -# -# NOW: -# Delegates directly to Mozo.broadcast_supplier / Mozo.broadcast_user -# which uses Mozo.broadcaster (configurable: Faye or ActionCable). -# -# MIGRATION PATH: -# Models should `include Broadcastable` directly instead of relying -# on this monkey-patch. Once all models include Broadcastable, this -# initializer can be removed. -# -require 'simply_stored/couch' - -module ModelBroadcast - def broadcast_supplier(sid, event, data = {}) - Mozo.broadcast_supplier(sid, event, data) - end - - def broadcast_user(uid, event, data = {}) - Mozo.broadcast_user(uid, event, data) - end -end - -SimplyStored::Couch.send(:include, ModelBroadcast)