Commit 4ca73f56 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Small refactoring and cleanup of notification logic

Signed-off-by: default avatarDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
parent b8f38437
......@@ -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
......@@ -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
......
......@@ -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)
......
......@@ -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) }
......
......@@ -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) }
......
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)
......@@ -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
......@@ -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
......
......@@ -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
......
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