Files
fizzy/app/models/notification/pushable.rb
T
Rosa Gutierrez 0948533da7 Rename push to process on PushTarget for clearer semantics
"Push to target" reads naturally - we push the notification to the
target. "Target processes" also makes sense - the target receives
and handles the notification in its own way.

- Add class method PushTarget.process(notification) that instantiates
  and calls the instance method
- Rename instance method from push to process
- Add private push_to helper in Pushable for readable iteration

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-25 19:31:13 +01:00

52 lines
1.1 KiB
Ruby

module Notification::Pushable
extend ActiveSupport::Concern
included do
class_attribute :push_targets, default: []
after_create_commit :push_later
after_update_commit :push_later, if: :source_id_previously_changed?
end
class_methods do
def register_push_target(target)
target = resolve_push_target(target)
push_targets << target unless push_targets.include?(target)
end
private
def resolve_push_target(target)
if target.is_a?(Symbol)
"Notification::PushTarget::#{target.to_s.classify}".constantize
else
target
end
end
end
def push_later
Notification::PushJob.perform_later(self)
end
def push
self.class.push_targets.each { |target| push_to(target) }
end
def pushable?
!creator.system? && user.active? && account.active?
end
def payload
"Notification::#{payload_type}Payload".constantize.new(self)
end
private
def push_to(target)
target.process(self)
end
def payload_type
source_type.presence_in(%w[ Event Mention ]) || "Default"
end
end