diff options
author | http://jneen.net/ <jneen@jneen.net> | 2017-08-04 11:53:17 -0700 |
---|---|---|
committer | http://jneen.net/ <jneen@jneen.net> | 2017-08-11 16:02:01 -0700 |
commit | 7e7f602d29fef237b5531795bd5c38541d14ea14 (patch) | |
tree | afab7b60a38c7cf4e145200f424b8b27a47df6bb /app/models/notification_recipient.rb | |
parent | 1c874f71e31fdf2bbc9120fe2111b2daea320e86 (diff) | |
download | gitlab-ce-7e7f602d29fef237b5531795bd5c38541d14ea14.tar.gz |
make NotificationRecipient a little more customizable
Diffstat (limited to 'app/models/notification_recipient.rb')
-rw-r--r-- | app/models/notification_recipient.rb | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/app/models/notification_recipient.rb b/app/models/notification_recipient.rb index 418b42d8f1d..30fab33e5e0 100644 --- a/app/models/notification_recipient.rb +++ b/app/models/notification_recipient.rb @@ -5,12 +5,18 @@ class NotificationRecipient custom_action: nil, target: nil, acting_user: nil, - project: nil + project: nil, + group: nil ) + unless NotificationSetting.levels.key?(type) || type == :subscription + raise ArgumentError, "invalid type: #{type.inspect}" + end + @custom_action = custom_action @acting_user = acting_user @target = target - @project = project || @target&.project + @project = project || default_project + @group = group || @project&.group @user = user @type = type end @@ -111,12 +117,18 @@ class NotificationRecipient end end + def default_project + return nil if @target.nil? + return @target if @target.is_a?(Project) + return @target.project if @target.respond_to?(:project) + end + def find_notification_setting project_setting = @project && user.notification_settings_for(@project) return project_setting unless project_setting.nil? || project_setting.global? - group_setting = @project&.group && user.notification_settings_for(@project.group) + group_setting = @group && user.notification_settings_for(@group) return group_setting unless group_setting.nil? || group_setting.global? |