move the read_ability logic into NotificationRecipient

This commit is contained in:
http://jneen.net/ 2017-08-02 14:14:53 -07:00
parent 56a40a2b65
commit eaa503d679
3 changed files with 18 additions and 21 deletions

View file

@ -5,12 +5,10 @@ class NotificationRecipient
custom_action: nil, custom_action: nil,
target: nil, target: nil,
acting_user: nil, acting_user: nil,
read_ability: nil,
project: nil project: nil
) )
@custom_action = custom_action @custom_action = custom_action
@acting_user = acting_user @acting_user = acting_user
@read_ability = read_ability
@target = target @target = target
@project = project || @target&.project @project = project || @target&.project
@user = user @user = user
@ -81,10 +79,10 @@ class NotificationRecipient
return false unless user.can?(:receive_notifications) return false unless user.can?(:receive_notifications)
return false if @project && !user.can?(:read_project, @project) return false if @project && !user.can?(:read_project, @project)
return true unless @read_ability return true unless read_ability
return true unless DeclarativePolicy.has_policy?(@target) return true unless DeclarativePolicy.has_policy?(@target)
user.can?(@read_ability, @target) user.can?(read_ability, @target)
end end
end end
@ -97,6 +95,22 @@ class NotificationRecipient
private private
def read_ability
return @read_ability if instance_variable_defined?(:@read_ability)
@read_ability =
case @target
when Issuable
:"read_#{@target.to_ability_name}"
when Ci::Pipeline
:read_build # We have build trace in pipeline emails
when ActiveRecord::Base
:"read_#{@target.class.model_name.name.underscore}"
else
nil
end
end
def find_notification_setting def find_notification_setting
project_setting = @project && user.notification_settings_for(@project) project_setting = @project && user.notification_settings_for(@project)

View file

@ -76,7 +76,6 @@ module NotificationRecipientService
custom_action: custom_action, custom_action: custom_action,
target: target, target: target,
acting_user: acting_user, acting_user: acting_user,
read_ability: read_ability
) )
end end
@ -91,15 +90,6 @@ module NotificationRecipientService
end end
end end
def read_ability
case target
when Issuable
:"read_#{target.to_ability_name}"
when Ci::Pipeline
:read_build # We have build trace in pipeline emails
end
end
def custom_action def custom_action
nil nil
end end
@ -285,12 +275,6 @@ module NotificationRecipientService
note.project note.project
end end
def read_ability
return nil if target.nil?
:"read_#{target.class.model_name.name.underscore}"
end
def build! def build!
# Add all users participating in the thread (author, assignee, comment authors) # Add all users participating in the thread (author, assignee, comment authors)
add_participants(note.author) add_participants(note.author)

View file

@ -303,7 +303,6 @@ class NotificationService
recipients ||= NotificationRecipientService.notifiable_users( recipients ||= NotificationRecipientService.notifiable_users(
[pipeline.user], :watch, [pipeline.user], :watch,
custom_action: :"#{pipeline.status}_pipeline", custom_action: :"#{pipeline.status}_pipeline",
read_ability: :read_build,
target: pipeline target: pipeline
).map(&:notification_email) ).map(&:notification_email)