Commit b69e81c3 authored by http://jneen.net/'s avatar http://jneen.net/

rm the @builder argument and factor out .notifiable_users

parent 943baa13
...@@ -21,16 +21,25 @@ class NotificationRecipientService ...@@ -21,16 +21,25 @@ class NotificationRecipientService
end end
class Recipient class Recipient
def self.notifiable_users(users, *args)
users.map { |u| new(u, *args) }.select(&:notifiable?).map(&:user)
end
attr_reader :user, :type attr_reader :user, :type
def initialize(builder, user, type) def initialize(user, project, type,
@builder = builder custom_action: nil, target: nil, acting_user: nil, read_ability: nil)
@project = project
@custom_action = custom_action
@acting_user = acting_user
@read_ability = read_ability
@target = target
@user = user @user = user
@type = type @type = type
end end
def notification_setting def notification_setting
@notification_setting ||= @notification_setting ||=
NotificationRecipientService.notification_setting_for_user_project(user, @builder.project) NotificationRecipientService.notification_setting_for_user_project(user, @project)
end end
def raw_notification_level def raw_notification_level
...@@ -43,7 +52,11 @@ class NotificationRecipientService ...@@ -43,7 +52,11 @@ class NotificationRecipientService
@notification_level ||= @notification_level ||=
case raw_notification_level case raw_notification_level
when :custom when :custom
notification_setting.event_enabled?(@builder.custom_action) ? :watch : :custom if !@custom_action || notification_setting.event_enabled?(@custom_action)
:watch
else
:custom
end
else else
raw_notification_level raw_notification_level
end end
...@@ -69,32 +82,34 @@ class NotificationRecipientService ...@@ -69,32 +82,34 @@ class NotificationRecipientService
end end
def unsubscribed? def unsubscribed?
return false unless @builder.target.respond_to?(:subscriptions) return false unless @target
return false unless @target.respond_to?(:subscriptions)
subscription = @builder.target.subscriptions.find_by_user_id(@user.id) subscription = @target.subscriptions.find_by_user_id(@user.id)
subscription && !subscription.subscribed subscription && !subscription.subscribed
end end
def own_activity? def own_activity?
return false unless @builder.acting_user return false unless @acting_user
return false if @builder.acting_user.notified_of_own_activity? return false if @acting_user.notified_of_own_activity?
user == @builder.acting_user user == @acting_user
end end
def has_access? def has_access?
return false unless user.can?(:receive_notifications) return false unless user.can?(:receive_notifications)
return true unless @builder.read_ability return true unless @read_ability
DeclarativePolicy.subject_scope do DeclarativePolicy.subject_scope do
user.can?(@builder.read_ability, @builder.target) user.can?(@read_ability, @target)
end end
end end
def excluded_watcher_action? def excluded_watcher_action?
return false unless @custom_action
return false if raw_notification_level == :custom return false if raw_notification_level == :custom
NotificationSetting::EXCLUDED_WATCHER_EVENTS.include?(@builder.custom_action) NotificationSetting::EXCLUDED_WATCHER_EVENTS.include?(@custom_action)
end end
end end
...@@ -128,7 +143,16 @@ class NotificationRecipientService ...@@ -128,7 +143,16 @@ class NotificationRecipientService
users, type = arg users, type = arg
users = Array(users) users = Array(users)
users.compact! users.compact!
recipients.concat(users.map { |u| Recipient.new(self, u, type) }) recipients.concat(users.map { |u| make_recipient(u, type) })
end
def make_recipient(user, type)
Recipient.new(user, project, type,
custom_action: custom_action,
target: target,
acting_user: acting_user,
read_ability: read_ability
)
end end
def recipient_users def recipient_users
......
...@@ -270,8 +270,7 @@ class NotificationService ...@@ -270,8 +270,7 @@ class NotificationService
end end
def project_was_moved(project, old_path_with_namespace) def project_was_moved(project, old_path_with_namespace)
recipients = project.team.members recipients = NotificationRecipientService::Recipient.notifiable_users(project.team.members, project, :watch)
recipients = NotificationRecipientService.new(project).reject_muted_users(recipients)
recipients.each do |recipient| recipients.each do |recipient|
mailer.project_was_moved_email( mailer.project_was_moved_email(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment