30 lines
758 B
Ruby
30 lines
758 B
Ruby
module User::Notifiable
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
has_many :notifications, dependent: :destroy
|
|
has_many :notification_bundles, class_name: "Notification::Bundle", dependent: :destroy
|
|
|
|
generates_token_for :unsubscribe, expires_in: 1.month
|
|
end
|
|
|
|
def bundle(notification)
|
|
transaction do
|
|
find_or_create_bundle_for(notification)
|
|
end
|
|
end
|
|
|
|
private
|
|
def find_or_create_bundle_for(notification)
|
|
find_bundle_for(notification) || create_bundle_for(notification)
|
|
end
|
|
|
|
def find_bundle_for(notification)
|
|
notification_bundles.pending.containing(notification).last
|
|
end
|
|
|
|
def create_bundle_for(notification)
|
|
notification_bundles.create!(starts_at: notification.created_at)
|
|
end
|
|
end
|