Skip to content
Snippets Groups Projects
Commit 4ca73f56 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

Small refactoring and cleanup of notification logic

parent b8f38437
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -22,16 +22,12 @@ module NotificationsHelper
 
def notification_title(level)
case level.to_sym
when :disabled
'Disabled'
when :participating
'Participate'
when :watch
'Watch'
when :mention
'On mention'
when :global
'Global'
else
level.to_s.titlecase
end
end
 
Loading
Loading
@@ -50,10 +46,6 @@ module NotificationsHelper
end
end
 
def notification_label(setting)
notification_title(setting.level)
end
def active_level_for(setting, level)
'active' if setting.level == level
end
Loading
Loading
Loading
Loading
@@ -62,6 +62,8 @@ class Member < ActiveRecord::Base
 
delegate :name, :username, :email, to: :user, prefix: true
 
default_value_for :notification_level, NotificationSetting.levels[:global]
class << self
def find_by_invite_token(invite_token)
invite_token = Devise.token_generator.digest(self, :invite_token, invite_token)
Loading
Loading
Loading
Loading
@@ -24,7 +24,6 @@ class GroupMember < Member
 
# Make sure group member points only to group as it source
default_value_for :source_type, SOURCE_TYPE
default_value_for :notification_level, Notification::N_GLOBAL
validates_format_of :source_type, with: /\ANamespace\z/
default_scope { where(source_type: SOURCE_TYPE) }
 
Loading
Loading
Loading
Loading
@@ -27,7 +27,6 @@ class ProjectMember < Member
 
# Make sure project member points only to project as it source
default_value_for :source_type, SOURCE_TYPE
default_value_for :notification_level, Notification::N_GLOBAL
validates_format_of :source_type, with: /\AProject\z/
default_scope { where(source_type: SOURCE_TYPE) }
 
Loading
Loading
class Notification
#
# Notification levels
#
N_DISABLED = 0
N_PARTICIPATING = 1
N_WATCH = 2
N_GLOBAL = 3
N_MENTION = 4
attr_accessor :target
 
class << self
def notification_levels
[N_DISABLED, N_MENTION, N_PARTICIPATING, N_WATCH]
end
def options_with_labels
{
disabled: N_DISABLED,
participating: N_PARTICIPATING,
watch: N_WATCH,
mention: N_MENTION,
global: N_GLOBAL
}
end
def project_notification_levels
[N_DISABLED, N_MENTION, N_PARTICIPATING, N_WATCH, N_GLOBAL]
end
end
delegate :disabled?, :participating?, :watch?, :global?, :mention?, to: :target
 
def initialize(target)
Loading
Loading
@@ -39,21 +10,4 @@ class Notification
def level
target.notification_level
end
def to_s
case level
when N_DISABLED
'Disabled'
when N_PARTICIPATING
'Participating'
when N_WATCH
'Watching'
when N_MENTION
'On mention'
when N_GLOBAL
'Global'
else
# do nothing
end
end
end
Loading
Loading
@@ -3,6 +3,7 @@ require 'rails_helper'
RSpec.describe NotificationSetting, type: :model do
describe "Associations" do
it { is_expected.to belong_to(:user) }
it { is_expected.to belong_to(:source) }
end
 
describe "Validation" do
Loading
Loading
Loading
Loading
@@ -88,12 +88,9 @@ describe NotificationService, services: true do
note.project.namespace_id = group.id
note.project.group.add_user(@u_watcher, GroupMember::MASTER)
note.project.save
user_project = note.project.project_members.find_by_user_id(@u_watcher.id)
user_project.notification.level = :participating
user_project.save
group_member = note.project.group.group_members.find_by_user_id(@u_watcher.id)
group_member.notification.level = :global
group_member.notification.save
@u_watcher.notification_settings.find_by(source: note.project).participating!
@u_watcher.notification_settings.find_by(source: note.project.group).global!
ActionMailer::Base.deliveries.clear
end
 
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment