Class: Decidim::NotificationGenerator
- Inherits:
-
Object
- Object
- Decidim::NotificationGenerator
- Defined in:
- app/services/decidim/notification_generator.rb
Overview
This class handles system events affecting resources and generates a notification for each recipient by scheduling a new Decidim::NotificationGeneratorForRecipientJob job for each of them. This way we can easily control which jobs fail and retry them, so that we don’t have duplicated notifications.
Instance Method Summary collapse
-
#generate ⇒ Object
Schedules a job for each recipient to create the notification.
-
#initialize(event, event_class, resource, followers, affected_users, extra) ⇒ NotificationGenerator
constructor
Initializes the class.
Constructor Details
#initialize(event, event_class, resource, followers, affected_users, extra) ⇒ NotificationGenerator
Initializes the class.
event - A String with the name of the event. event_class - A class that wraps the event. resource - an instance of a class implementing the Decidim::Resource concern. followers - a collection of Users that receive the notification because
they're following it
affected_users - a collection of Users that receive the notification because
they're affected by it
extra - a Hash with extra information for the event. rubocop:disable Metrics/ParameterLists
21 22 23 24 25 26 27 28 |
# File 'app/services/decidim/notification_generator.rb', line 21 def initialize(event, event_class, resource, followers, affected_users, extra) @event = event @event_class = event_class @resource = resource @followers = followers @affected_users = affected_users @extra = extra end |
Instance Method Details
#generate ⇒ Object
Schedules a job for each recipient to create the notification. Returns nil if the resource is not resource or if it is not present.
Returns nothing.
35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'app/services/decidim/notification_generator.rb', line 35 def generate return unless resource return unless event_class.types.include?(:notification) followers.each do |recipient| generate_notification_for(recipient, user_role: :follower) if ["all", "followed-only"].include?(recipient.notification_types) end affected_users.each do |recipient| generate_notification_for(recipient, user_role: :affected_user) if ["all", "own-only"].include?(recipient.notification_types) end end |