Consolidate push jobs into single Notification::PushJob
Replace separate WebPushJob and NativePushJob with a single PushJob that calls notification.push, which iterates over registered targets. Each target handles its own delivery - Web pushes synchronously via the pool, Native enqueues device-level jobs via deliver_later_to. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
class Notification::PushJob < ApplicationJob
|
||||
def perform(notification)
|
||||
notification.push
|
||||
end
|
||||
end
|
||||
@@ -1,5 +0,0 @@
|
||||
class Notification::WebPushJob < ApplicationJob
|
||||
def perform(notification)
|
||||
Notification::PushTarget::Web.new(notification).push
|
||||
end
|
||||
end
|
||||
@@ -1,8 +1,4 @@
|
||||
class Notification::PushTarget::Web < Notification::PushTarget
|
||||
def self.push_later(notification)
|
||||
Notification::WebPushJob.perform_later(notification)
|
||||
end
|
||||
|
||||
private
|
||||
def should_push?
|
||||
super && subscriptions.any?
|
||||
|
||||
@@ -24,8 +24,12 @@ module Notification::Pushable
|
||||
end
|
||||
|
||||
def push_later
|
||||
Notification::PushJob.perform_later(self)
|
||||
end
|
||||
|
||||
def push
|
||||
self.class.push_targets.each do |target|
|
||||
target.push_later(self)
|
||||
target.new(self).push
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
class Notification::NativePushJob < ApplicationJob
|
||||
def perform(notification)
|
||||
Notification::PushTarget::Native.new(notification).push
|
||||
end
|
||||
end
|
||||
@@ -1,8 +1,4 @@
|
||||
class Notification::PushTarget::Native < Notification::PushTarget
|
||||
def self.push_later(notification)
|
||||
Notification::NativePushJob.perform_later(notification)
|
||||
end
|
||||
|
||||
private
|
||||
def should_push?
|
||||
super && devices.any?
|
||||
|
||||
@@ -199,9 +199,4 @@ class Notification::PushTarget::NativeTest < ActiveSupport::TestCase
|
||||
assert_equal @notification.creator.name, native.data[:creator_name]
|
||||
end
|
||||
|
||||
test "push_later enqueues Notification::NativePushJob" do
|
||||
assert_enqueued_with(job: Notification::NativePushJob, args: [ @notification ]) do
|
||||
Notification::PushTarget::Native.push_later(@notification)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -92,9 +92,4 @@ class Notification::PushTarget::WebTest < ActiveSupport::TestCase
|
||||
Notification::PushTarget::Web.new(notification).push
|
||||
end
|
||||
|
||||
test "push_later enqueues Notification::WebPushJob" do
|
||||
assert_enqueued_with(job: Notification::WebPushJob, args: [ @notification ]) do
|
||||
Notification::PushTarget::Web.push_later(@notification)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -9,14 +9,23 @@ class Notification::PushableTest < ActiveSupport::TestCase
|
||||
)
|
||||
end
|
||||
|
||||
test "push_later calls push_later on all registered targets" do
|
||||
target = mock("push_target")
|
||||
target.expects(:push_later).with(@notification)
|
||||
test "push_later enqueues Notification::PushJob" do
|
||||
assert_enqueued_with(job: Notification::PushJob, args: [ @notification ]) do
|
||||
@notification.push_later
|
||||
end
|
||||
end
|
||||
|
||||
test "push calls push on all registered targets" do
|
||||
target_class = mock("push_target_class")
|
||||
target_instance = mock("push_target_instance")
|
||||
|
||||
target_class.expects(:new).with(@notification).returns(target_instance)
|
||||
target_instance.expects(:push)
|
||||
|
||||
original_targets = Notification.push_targets
|
||||
Notification.push_targets = [ target ]
|
||||
Notification.push_targets = [ target_class ]
|
||||
|
||||
@notification.push_later
|
||||
@notification.push
|
||||
ensure
|
||||
Notification.push_targets = original_targets
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user