diff --git a/CHANGELOG.md b/CHANGELOG.md index d336a9c0..9831d168 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ ### Unreleased +* Support callbacks in bulk delivery methods. + ### 2.4.3 * Add translation and URL helpers to Ephemeral notifiers & notifications #485 diff --git a/lib/noticed/bulk_delivery_method.rb b/lib/noticed/bulk_delivery_method.rb index 4ba15911..03c215a3 100644 --- a/lib/noticed/bulk_delivery_method.rb +++ b/lib/noticed/bulk_delivery_method.rb @@ -3,6 +3,9 @@ class BulkDeliveryMethod < ApplicationJob include ApiClient include RequiredOptions + extend ActiveModel::Callbacks + define_model_callbacks :deliver + class_attribute :logger, default: Rails.logger attr_reader :config, :event @@ -20,7 +23,9 @@ def perform(delivery_method_name, event, recipients: nil, params: {}, overrides: return false if config.has_key?(:if) && !evaluate_option(:if) return false if config.has_key?(:unless) && evaluate_option(:unless) - deliver + run_callbacks :deliver do + deliver + end end def deliver diff --git a/test/delivery_method_test.rb b/test/delivery_method_test.rb index 45529861..5d7a2466 100644 --- a/test/delivery_method_test.rb +++ b/test/delivery_method_test.rb @@ -69,10 +69,26 @@ def deliver end end + class CallbackBulkDeliveryMethod < Noticed::BulkDeliveryMethod + before_deliver :set_message + attr_reader :message + + def set_message + @message = "new message" + end + + def deliver + end + end + class CallbackNotifier < Noticed::Event deliver_by :test end + class CallbackBulkNotifier < Noticed::Event + bulk_deliver_by :test + end + test "calls callbacks" do event = CallbackNotifier.with(message: "test") notification = Noticed::Notification.create(recipient: User.first, event: event) @@ -81,6 +97,13 @@ class CallbackNotifier < Noticed::Event assert_equal delivery_method.message, "new message" end + test "calls callbacks for bulk delivery" do + event = CallbackBulkNotifier.with(message: "test") + delivery_method = CallbackBulkDeliveryMethod.new + delivery_method.perform(:test, event) + assert_equal delivery_method.message, "new message" + end + private def set_config(config)