Note: this Ruby gem could be used without Rails or Active Support.
The problem
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.
The solution
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.