Note: this Ruby gem could be used without Rails or Active Support.
We need a way to handle different notification channels (mail, push) in one place.
From the business-logic point of view, we want to notify a user, hence we need a separate abstraction layer as an entry point to different types of notifications.
Here comes Active Delivery.
In the simplest case when we have only mailers, Active Delivery is just a wrapper for Mailer with (possibly) some additional logic provided (e.g., preventing emails to unsubscribed users).
Motivations behind Active Delivery:
- Organize notifications related logic:
# Before def after_some_action MyMailer.with(user: user).some_action.deliver_later if user.receive_emails? NotifyService.send_notification(user, "action") if whatever_else? end # After def after_some_action MyDelivery.with(user: user).notify(:some_action) end
- Better testability.