From ab54cafd84489cbaa449f7f660ecc63537964988 Mon Sep 17 00:00:00 2001 From: Jorge Manrubia Date: Wed, 23 Apr 2025 11:06:43 +0200 Subject: [PATCH] Inline event notifiers --- app/models/event.rb | 5 ++++- app/models/notifier.rb | 8 ++++---- app/models/notifier/event.rb | 23 +++++++++++++++++++++++ app/models/notifier/events/assigned.rb | 6 ------ app/models/notifier/events/base.rb | 12 ------------ app/models/notifier/events/closed.rb | 2 -- app/models/notifier/events/commented.rb | 6 ------ app/models/notifier/events/published.rb | 6 ------ test/models/notifier_test.rb | 2 +- 9 files changed, 32 insertions(+), 38 deletions(-) create mode 100644 app/models/notifier/event.rb delete mode 100644 app/models/notifier/events/assigned.rb delete mode 100644 app/models/notifier/events/base.rb delete mode 100644 app/models/notifier/events/closed.rb delete mode 100644 app/models/notifier/events/commented.rb delete mode 100644 app/models/notifier/events/published.rb diff --git a/app/models/event.rb b/app/models/event.rb index 1131bf5e0..5eb095039 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -16,7 +16,10 @@ class Event < ApplicationRecord action == "assigned" || initial_assignment? end - # E.g: completed? is true if action == "completed" + def action + super.inquiry + end + def method_missing(method_name, *args, &block) if method_name.to_s.end_with?("?") action == method_name.to_s.chomp("?") diff --git a/app/models/notifier.rb b/app/models/notifier.rb index ab63d62ff..651d6898f 100644 --- a/app/models/notifier.rb +++ b/app/models/notifier.rb @@ -4,10 +4,10 @@ class Notifier class << self def for(source) case source - when Event - "Notifier::Events::#{source.action.classify}".safe_constantize&.new(source) - when ::Mention - Notifier::Mention.new(source) + when ::Event + Notifier::Event.new(source) + when ::Mention + Notifier::Mention.new(source) end end end diff --git a/app/models/notifier/event.rb b/app/models/notifier/event.rb new file mode 100644 index 000000000..0893cb7e5 --- /dev/null +++ b/app/models/notifier/event.rb @@ -0,0 +1,23 @@ +class Notifier::Event < Notifier + delegate :card, :creator, to: :source + + private + def resource + if source.action.commented? + source.comment + else + card + end + end + + def recipients + case source.action + when "assigned" + source.assignees.excluding(card.collection.access_only_users) + when "published" + card.watchers_and_subscribers(include_only_watching: true).without(creator) + else + card.watchers_and_subscribers.without(creator) + end + end +end diff --git a/app/models/notifier/events/assigned.rb b/app/models/notifier/events/assigned.rb deleted file mode 100644 index fb106c677..000000000 --- a/app/models/notifier/events/assigned.rb +++ /dev/null @@ -1,6 +0,0 @@ -class Notifier::Events::Assigned < Notifier::Events::Base - private - def recipients - source.assignees.excluding(card.collection.access_only_users) - end -end diff --git a/app/models/notifier/events/base.rb b/app/models/notifier/events/base.rb deleted file mode 100644 index 6852ba2b2..000000000 --- a/app/models/notifier/events/base.rb +++ /dev/null @@ -1,12 +0,0 @@ -class Notifier::Events::Base < Notifier - delegate :card, :creator, to: :source - - private - def resource - card - end - - def recipients - card.watchers_and_subscribers.without(creator) - end -end diff --git a/app/models/notifier/events/closed.rb b/app/models/notifier/events/closed.rb deleted file mode 100644 index 133ca75c8..000000000 --- a/app/models/notifier/events/closed.rb +++ /dev/null @@ -1,2 +0,0 @@ -class Notifier::Events::Closed < Notifier::Events::Base -end diff --git a/app/models/notifier/events/commented.rb b/app/models/notifier/events/commented.rb deleted file mode 100644 index 55497a117..000000000 --- a/app/models/notifier/events/commented.rb +++ /dev/null @@ -1,6 +0,0 @@ -class Notifier::Events::Commented < Notifier::Events::Base - private - def resource - source.comment - end -end diff --git a/app/models/notifier/events/published.rb b/app/models/notifier/events/published.rb deleted file mode 100644 index ff30d0219..000000000 --- a/app/models/notifier/events/published.rb +++ /dev/null @@ -1,6 +0,0 @@ -class Notifier::Events::Published < Notifier::Events::Base - private - def recipients - card.watchers_and_subscribers(include_only_watching: true).without(creator) - end -end diff --git a/test/models/notifier_test.rb b/test/models/notifier_test.rb index 987ac84f2..e1245a19b 100644 --- a/test/models/notifier_test.rb +++ b/test/models/notifier_test.rb @@ -2,7 +2,7 @@ require "test_helper" class NotifierTest < ActiveSupport::TestCase test "for returns the matching notifier class for the event" do - assert_kind_of Notifier::Events::Published, Notifier.for(events(:logo_published)) + assert_kind_of Notifier::Event, Notifier.for(events(:logo_published)) end test "generate does not create notifications if the event was system-generated" do