-
Notifications
You must be signed in to change notification settings - Fork 434
/
event_subscription.rb
99 lines (88 loc) · 2.53 KB
/
event_subscription.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
class EventSubscription < ApplicationRecord
RECEIVER_ROLE_TEXTS = {
maintainer: 'Maintainer',
bugowner: 'Bugowner',
reader: 'Reader',
source_maintainer: 'Maintainer of the source',
target_maintainer: 'Maintainer of the target',
reviewer: 'Reviewer',
commenter: 'Commenter',
creator: 'Creator',
watcher: 'Watching the project',
source_watcher: 'Watching the source project',
target_watcher: 'Watching the target project'
}.freeze
enum channel: {
disabled: 0,
instant_email: 1,
web: 2,
rss: 3
}
belongs_to :user, inverse_of: :event_subscriptions
belongs_to :group, inverse_of: :event_subscriptions
validates :receiver_role, inclusion: {
in: [:maintainer, :bugowner, :reader, :source_maintainer, :target_maintainer,
:reviewer, :commenter, :creator, :watcher, :source_watcher, :target_watcher]
}
scope :for_eventtype, ->(eventtype) { where(eventtype: eventtype) }
scope :defaults, -> { where(user_id: nil, group_id: nil) }
scope :for_subscriber, lambda { |subscriber|
case subscriber
when User
where(user: subscriber)
when Group
where(group: subscriber)
else
defaults
end
}
def subscriber
if user_id.present?
user
elsif group_id.present?
group
end
end
def subscriber=(subscriber)
case subscriber
when User
self.user = subscriber
when Group
self.group = subscriber
end
end
def event_class
# NOTE: safe_ is required here because for some reason we were getting an uninitialized constant error
# from this line from the functional tests (though not in rspec or in rails server)
eventtype.safe_constantize
end
def receiver_role
self[:receiver_role].to_sym
end
def parameters_for_notification
{ subscriber: subscriber,
subscription_receiver_role: receiver_role }
end
def self.without_channel_disabled
channels.keys.reject { |channel| channel == 'disabled' }
end
end
# == Schema Information
#
# Table name: event_subscriptions
#
# id :integer not null, primary key
# channel :integer default("disabled"), not null
# enabled :boolean default(FALSE)
# eventtype :string(255) not null
# receiver_role :string(255) not null
# created_at :datetime
# updated_at :datetime
# group_id :integer indexed
# user_id :integer indexed
#
# Indexes
#
# index_event_subscriptions_on_group_id (group_id)
# index_event_subscriptions_on_user_id (user_id)
#