Можно ли применить одну подписку к нескольким слушателям с Wisper? - PullRequest
0 голосов
/ 05 августа 2020

У меня есть служба, которая транслирует событие, когда удовлетворяются некоторые критерии. У меня также есть несколько услуг по заказу c. Я хочу, чтобы служба поддержки клиентов была уведомлена о событии. Однако я бы предпочел не добавлять подписку к службе вещания или инициализатору каждый раз, когда добавляется клиент и связанная с ним служба. Я хочу, чтобы служба вещания не знала об определенных слушателях c, чтобы нам не приходилось добавлять код в эту службу каждый раз, когда добавляется клиент. Можно ли каким-то образом иметь одну подписку (либо в службе вещания, либо в инициализаторе), которая может уведомлять все службы клиентов? Это приложение Ruby / Rails, и службы поддержки клиентов не создаются - они содержат методы класса.

1 Ответ

0 голосов
/ 07 августа 2020

Я решил это, перебрав все классы, которые являются членами моего модуля Customer, и подписавшись на каждый. Он был добавлен в application.rb.

config.after_initialize do
  Customer.constants.select { |c| Customer.const_get(c).is_a? Class }
          .map { |klass| 'Customer::' + klass.to_s }
          .each { |klass| ScanEventService.subscribe(klass.constantize) }
end

Каждый раз, когда я добавляю новую службу поддержки клиентов, я делаю ее членом этого модуля.

...