activity_notification 1.4.0 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +39 -32
- data/Gemfile +0 -3
- data/Gemfile.lock +66 -73
- data/README.md +190 -184
- data/activity_notification.gemspec +2 -3
- data/gemfiles/Gemfile.rails-4.2 +7 -1
- data/gemfiles/Gemfile.rails-4.2.lock +35 -26
- data/gemfiles/Gemfile.rails-5.0 +7 -1
- data/gemfiles/Gemfile.rails-5.0.lock +73 -64
- data/gemfiles/Gemfile.rails-5.1 +6 -3
- data/gemfiles/Gemfile.rails-5.1.lock +77 -74
- data/lib/activity_notification/apis/notification_api.rb +3 -3
- data/lib/activity_notification/models.rb +1 -1
- data/lib/activity_notification/models/concerns/notifiable.rb +1 -1
- data/lib/activity_notification/models/concerns/target.rb +1 -1
- data/lib/activity_notification/orm/active_record/notification.rb +7 -0
- data/lib/activity_notification/orm/mongoid.rb +11 -1
- data/lib/activity_notification/orm/mongoid/notification.rb +9 -2
- data/lib/activity_notification/orm/mongoid/subscription.rb +1 -1
- data/lib/activity_notification/roles/acts_as_notifiable.rb +30 -15
- data/lib/activity_notification/version.rb +1 -1
- data/spec/rails_app/app/models/admin.rb +1 -1
- data/spec/rails_app/app/models/article.rb +1 -1
- data/spec/rails_app/app/models/comment.rb +1 -1
- data/spec/rails_app/app/models/dummy/dummy_base.rb +10 -2
- data/spec/rails_app/app/models/dummy/dummy_group.rb +13 -3
- data/spec/rails_app/app/models/dummy/dummy_notifiable.rb +13 -3
- data/spec/rails_app/app/models/dummy/dummy_notifier.rb +13 -3
- data/spec/rails_app/app/models/dummy/dummy_subscriber.rb +12 -3
- data/spec/rails_app/app/models/dummy/dummy_target.rb +14 -3
- data/spec/rails_app/app/models/user.rb +1 -1
- data/spec/rails_app/config/application.rb +7 -3
- data/spec/rails_app/config/environment.rb +1 -1
- data/spec/rails_app/config/environments/development.rb +3 -1
- data/spec/rails_app/config/environments/test.rb +4 -1
- data/spec/roles/acts_as_notifiable_spec.rb +10 -6
- data/spec/spec_helper.rb +0 -3
- metadata +6 -20
@@ -1,20 +1,7 @@
|
|
1
|
-
GIT
|
2
|
-
remote: git://github.com/plataformatec/devise.git
|
3
|
-
revision: 83002017ea4761e30796f3b288be9c7d9b870fcd
|
4
|
-
ref: 83002017
|
5
|
-
specs:
|
6
|
-
devise (4.2.1)
|
7
|
-
bcrypt (~> 3.0)
|
8
|
-
orm_adapter (~> 0.1)
|
9
|
-
railties (>= 4.1.0, < 5.2)
|
10
|
-
responders
|
11
|
-
warden (~> 1.2.3)
|
12
|
-
|
13
1
|
PATH
|
14
2
|
remote: ..
|
15
3
|
specs:
|
16
|
-
activity_notification (1.4.
|
17
|
-
activerecord (>= 4.2.0)
|
4
|
+
activity_notification (1.4.1)
|
18
5
|
i18n (>= 0.5.0)
|
19
6
|
jquery-rails (>= 3.1.1)
|
20
7
|
railties (>= 4.2.0, < 5.2)
|
@@ -22,39 +9,39 @@ PATH
|
|
22
9
|
GEM
|
23
10
|
remote: https://rubygems.org/
|
24
11
|
specs:
|
25
|
-
actioncable (5.1.
|
26
|
-
actionpack (= 5.1.
|
12
|
+
actioncable (5.1.1)
|
13
|
+
actionpack (= 5.1.1)
|
27
14
|
nio4r (~> 2.0)
|
28
15
|
websocket-driver (~> 0.6.1)
|
29
|
-
actionmailer (5.1.
|
30
|
-
actionpack (= 5.1.
|
31
|
-
actionview (= 5.1.
|
32
|
-
activejob (= 5.1.
|
16
|
+
actionmailer (5.1.1)
|
17
|
+
actionpack (= 5.1.1)
|
18
|
+
actionview (= 5.1.1)
|
19
|
+
activejob (= 5.1.1)
|
33
20
|
mail (~> 2.5, >= 2.5.4)
|
34
21
|
rails-dom-testing (~> 2.0)
|
35
|
-
actionpack (5.1.
|
36
|
-
actionview (= 5.1.
|
37
|
-
activesupport (= 5.1.
|
22
|
+
actionpack (5.1.1)
|
23
|
+
actionview (= 5.1.1)
|
24
|
+
activesupport (= 5.1.1)
|
38
25
|
rack (~> 2.0)
|
39
26
|
rack-test (~> 0.6.3)
|
40
27
|
rails-dom-testing (~> 2.0)
|
41
28
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
42
|
-
actionview (5.1.
|
43
|
-
activesupport (= 5.1.
|
29
|
+
actionview (5.1.1)
|
30
|
+
activesupport (= 5.1.1)
|
44
31
|
builder (~> 3.1)
|
45
32
|
erubi (~> 1.4)
|
46
33
|
rails-dom-testing (~> 2.0)
|
47
34
|
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
48
|
-
activejob (5.1.
|
49
|
-
activesupport (= 5.1.
|
35
|
+
activejob (5.1.1)
|
36
|
+
activesupport (= 5.1.1)
|
50
37
|
globalid (>= 0.3.6)
|
51
|
-
activemodel (5.1.
|
52
|
-
activesupport (= 5.1.
|
53
|
-
activerecord (5.1.
|
54
|
-
activemodel (= 5.1.
|
55
|
-
activesupport (= 5.1.
|
38
|
+
activemodel (5.1.1)
|
39
|
+
activesupport (= 5.1.1)
|
40
|
+
activerecord (5.1.1)
|
41
|
+
activemodel (= 5.1.1)
|
42
|
+
activesupport (= 5.1.1)
|
56
43
|
arel (~> 8.0)
|
57
|
-
activesupport (5.1.
|
44
|
+
activesupport (5.1.1)
|
58
45
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
59
46
|
i18n (~> 0.7)
|
60
47
|
minitest (~> 5.1)
|
@@ -64,17 +51,20 @@ GEM
|
|
64
51
|
railties (>= 3.0)
|
65
52
|
rspec-rails (>= 2.2)
|
66
53
|
arel (8.0.0)
|
67
|
-
aws-sdk (2.9.
|
68
|
-
aws-sdk-resources (= 2.9.
|
69
|
-
aws-sdk-core (2.9.
|
54
|
+
aws-sdk (2.9.19)
|
55
|
+
aws-sdk-resources (= 2.9.19)
|
56
|
+
aws-sdk-core (2.9.19)
|
70
57
|
aws-sigv4 (~> 1.0)
|
71
58
|
jmespath (~> 1.0)
|
72
|
-
aws-sdk-resources (2.9.
|
73
|
-
aws-sdk-core (= 2.9.
|
59
|
+
aws-sdk-resources (2.9.19)
|
60
|
+
aws-sdk-core (= 2.9.19)
|
74
61
|
aws-sigv4 (1.0.0)
|
75
62
|
bcrypt (3.1.11)
|
76
63
|
bson (4.2.1)
|
77
64
|
builder (3.2.3)
|
65
|
+
bullet (5.5.1)
|
66
|
+
activesupport (>= 3.0.0)
|
67
|
+
uniform_notifier (~> 1.10.0)
|
78
68
|
concurrent-ruby (1.0.5)
|
79
69
|
coveralls (0.8.21)
|
80
70
|
json (>= 1.8, < 3)
|
@@ -82,8 +72,18 @@ GEM
|
|
82
72
|
term-ansicolor (~> 1.3)
|
83
73
|
thor (~> 0.19.4)
|
84
74
|
tins (~> 1.6)
|
75
|
+
devise (4.3.0)
|
76
|
+
bcrypt (~> 3.0)
|
77
|
+
orm_adapter (~> 0.1)
|
78
|
+
railties (>= 4.1.0, < 5.2)
|
79
|
+
responders
|
80
|
+
warden (~> 1.2.3)
|
85
81
|
diff-lcs (1.3)
|
86
82
|
docile (1.1.5)
|
83
|
+
dotenv (2.2.1)
|
84
|
+
dotenv-rails (2.2.1)
|
85
|
+
dotenv (= 2.2.1)
|
86
|
+
railties (>= 3.2, < 5.2)
|
87
87
|
erubi (1.6.0)
|
88
88
|
factory_girl (4.8.0)
|
89
89
|
activesupport (>= 3.0.0)
|
@@ -120,33 +120,33 @@ GEM
|
|
120
120
|
mini_portile2 (~> 2.1.0)
|
121
121
|
orm_adapter (0.5.0)
|
122
122
|
pg (0.20.0)
|
123
|
-
rack (2.0.
|
123
|
+
rack (2.0.3)
|
124
124
|
rack-test (0.6.3)
|
125
125
|
rack (>= 1.0)
|
126
|
-
rails (5.1.
|
127
|
-
actioncable (= 5.1.
|
128
|
-
actionmailer (= 5.1.
|
129
|
-
actionpack (= 5.1.
|
130
|
-
actionview (= 5.1.
|
131
|
-
activejob (= 5.1.
|
132
|
-
activemodel (= 5.1.
|
133
|
-
activerecord (= 5.1.
|
134
|
-
activesupport (= 5.1.
|
126
|
+
rails (5.1.1)
|
127
|
+
actioncable (= 5.1.1)
|
128
|
+
actionmailer (= 5.1.1)
|
129
|
+
actionpack (= 5.1.1)
|
130
|
+
actionview (= 5.1.1)
|
131
|
+
activejob (= 5.1.1)
|
132
|
+
activemodel (= 5.1.1)
|
133
|
+
activerecord (= 5.1.1)
|
134
|
+
activesupport (= 5.1.1)
|
135
135
|
bundler (>= 1.3.0, < 2.0)
|
136
|
-
railties (= 5.1.
|
136
|
+
railties (= 5.1.1)
|
137
137
|
sprockets-rails (>= 2.0.0)
|
138
|
-
rails-controller-testing (1.0.
|
139
|
-
actionpack (~> 5.x)
|
140
|
-
actionview (~> 5.x)
|
138
|
+
rails-controller-testing (1.0.2)
|
139
|
+
actionpack (~> 5.x, >= 5.0.1)
|
140
|
+
actionview (~> 5.x, >= 5.0.1)
|
141
141
|
activesupport (~> 5.x)
|
142
|
-
rails-dom-testing (2.0.
|
143
|
-
activesupport (>= 4.2.0
|
144
|
-
nokogiri (
|
142
|
+
rails-dom-testing (2.0.3)
|
143
|
+
activesupport (>= 4.2.0)
|
144
|
+
nokogiri (>= 1.6)
|
145
145
|
rails-html-sanitizer (1.0.3)
|
146
146
|
loofah (~> 2.0)
|
147
|
-
railties (5.1.
|
148
|
-
actionpack (= 5.1.
|
149
|
-
activesupport (= 5.1.
|
147
|
+
railties (5.1.1)
|
148
|
+
actionpack (= 5.1.1)
|
149
|
+
activesupport (= 5.1.1)
|
150
150
|
method_source
|
151
151
|
rake (>= 0.8.7)
|
152
152
|
thor (>= 0.18.1, < 2.0)
|
@@ -154,23 +154,23 @@ GEM
|
|
154
154
|
responders (2.4.0)
|
155
155
|
actionpack (>= 4.2.0, < 5.3)
|
156
156
|
railties (>= 4.2.0, < 5.3)
|
157
|
-
rspec-core (3.
|
158
|
-
rspec-support (~> 3.
|
159
|
-
rspec-expectations (3.
|
157
|
+
rspec-core (3.6.0)
|
158
|
+
rspec-support (~> 3.6.0)
|
159
|
+
rspec-expectations (3.6.0)
|
160
160
|
diff-lcs (>= 1.2.0, < 2.0)
|
161
|
-
rspec-support (~> 3.
|
162
|
-
rspec-mocks (3.
|
161
|
+
rspec-support (~> 3.6.0)
|
162
|
+
rspec-mocks (3.6.0)
|
163
163
|
diff-lcs (>= 1.2.0, < 2.0)
|
164
|
-
rspec-support (~> 3.
|
165
|
-
rspec-rails (3.
|
164
|
+
rspec-support (~> 3.6.0)
|
165
|
+
rspec-rails (3.6.0)
|
166
166
|
actionpack (>= 3.0)
|
167
167
|
activesupport (>= 3.0)
|
168
168
|
railties (>= 3.0)
|
169
|
-
rspec-core (~> 3.
|
170
|
-
rspec-expectations (~> 3.
|
171
|
-
rspec-mocks (~> 3.
|
172
|
-
rspec-support (~> 3.
|
173
|
-
rspec-support (3.
|
169
|
+
rspec-core (~> 3.6.0)
|
170
|
+
rspec-expectations (~> 3.6.0)
|
171
|
+
rspec-mocks (~> 3.6.0)
|
172
|
+
rspec-support (~> 3.6.0)
|
173
|
+
rspec-support (3.6.0)
|
174
174
|
simplecov (0.14.1)
|
175
175
|
docile (~> 1.1.0)
|
176
176
|
json (>= 1.8, < 3)
|
@@ -190,9 +190,10 @@ GEM
|
|
190
190
|
thor (0.19.4)
|
191
191
|
thread_safe (0.3.6)
|
192
192
|
timecop (0.8.1)
|
193
|
-
tins (1.
|
193
|
+
tins (1.14.0)
|
194
194
|
tzinfo (1.2.3)
|
195
195
|
thread_safe (~> 0.1)
|
196
|
+
uniform_notifier (1.10.0)
|
196
197
|
warden (1.2.7)
|
197
198
|
rack (>= 1.0)
|
198
199
|
websocket-driver (0.6.5)
|
@@ -209,15 +210,17 @@ DEPENDENCIES
|
|
209
210
|
activity_notification!
|
210
211
|
ammeter
|
211
212
|
aws-sdk (~> 2)
|
213
|
+
bullet
|
212
214
|
coveralls
|
213
|
-
devise
|
215
|
+
devise (~> 4.3.0)
|
216
|
+
dotenv-rails
|
214
217
|
factory_girl_rails (~> 4.8.0)
|
215
218
|
mongoid (>= 4.0.0)
|
216
219
|
mysql2 (~> 0.4.6)
|
217
220
|
pg (~> 0.20.0)
|
218
|
-
rails (~> 5.1)
|
221
|
+
rails (~> 5.1.0)
|
219
222
|
rails-controller-testing
|
220
|
-
rspec-rails (~> 3.
|
223
|
+
rspec-rails (~> 3.6.0)
|
221
224
|
simplecov (~> 0.14.1)
|
222
225
|
slack-notifier (>= 1.5.1)
|
223
226
|
sqlite3 (~> 1.3.13)
|
@@ -455,7 +455,7 @@ module ActivityNotification
|
|
455
455
|
# @param [Integer] limit Limit to query for opened notifications
|
456
456
|
# @return [Integer] Count of group notifications including owner and members
|
457
457
|
def group_notifier_count(limit = ActivityNotification.config.opened_index_limit)
|
458
|
-
notification = group_member? ? group_owner : self
|
458
|
+
notification = group_member? && group_owner.present? ? group_owner : self
|
459
459
|
notification.notifier.present? ? group_member_notifier_count(limit) + 1 : 0
|
460
460
|
end
|
461
461
|
|
@@ -464,7 +464,7 @@ module ActivityNotification
|
|
464
464
|
#
|
465
465
|
# @return [Notificaion] Notification instance of the latest group member notification
|
466
466
|
def latest_group_member
|
467
|
-
notification = group_member? ? group_owner : self
|
467
|
+
notification = group_member? && group_owner.present? ? group_owner : self
|
468
468
|
notification.group_member_exists? ? notification.group_members.latest : self
|
469
469
|
end
|
470
470
|
|
@@ -530,7 +530,7 @@ module ActivityNotification
|
|
530
530
|
# @param [Integer] limit Limit to query for opened notifications
|
531
531
|
# @return [Integer] Count of various members of the notification
|
532
532
|
def meta_group_member_count(opened_member_count_method_name, unopened_member_count_method_name, limit)
|
533
|
-
notification = group_member? ? group_owner : self
|
533
|
+
notification = group_member? && group_owner.present? ? group_owner : self
|
534
534
|
notification.opened? ?
|
535
535
|
notification.send(opened_member_count_method_name, limit) :
|
536
536
|
notification.send(unopened_member_count_method_name)
|
@@ -348,7 +348,7 @@ module ActivityNotification
|
|
348
348
|
generated_notifications = generated_notifications_as_notifiable_for(target_type)
|
349
349
|
case dependent
|
350
350
|
when :restrict_with_exception
|
351
|
-
|
351
|
+
ActivityNotification::Notification.raise_delete_restriction_error("generated_notifications_as_notifiable_for_#{target_type.to_s.pluralize.underscore}") unless generated_notifications.empty?
|
352
352
|
when :restrict_with_error
|
353
353
|
unless generated_notifications.empty?
|
354
354
|
record = self.class.human_attribute_name("generated_notifications_as_notifiable_for_#{target_type.to_s.pluralize.underscore}").downcase
|
@@ -96,7 +96,7 @@ module ActivityNotification
|
|
96
96
|
# @option options [String] :filtered_by_group_id (nil) Group instance id for filter, valid with :filtered_by_group_type
|
97
97
|
# @option options [String] :filtered_by_key (nil) Key of the notification for filter
|
98
98
|
# @option options [Array|Hash] :custom_filter (nil) Custom notification filter (e.g. ["created_at >= ?", time.hour.ago])
|
99
|
-
# @return [
|
99
|
+
# @return [Hash<Target, Notificaion>] All notifications for this target type grouped by targets
|
100
100
|
def notification_index_map(options = {})
|
101
101
|
all_notifications(options).group_by(&:target)
|
102
102
|
end
|
@@ -180,6 +180,11 @@ module ActivityNotification
|
|
180
180
|
pluck(:key).uniq
|
181
181
|
end
|
182
182
|
|
183
|
+
# Raise DeleteRestrictionError for notifications.
|
184
|
+
def self.raise_delete_restriction_error(error_text)
|
185
|
+
raise ::ActiveRecord::DeleteRestrictionError.new(error_text)
|
186
|
+
end
|
187
|
+
|
183
188
|
protected
|
184
189
|
|
185
190
|
# Returns count of group members of the unopened notification.
|
@@ -200,6 +205,7 @@ module ActivityNotification
|
|
200
205
|
# This method is designed to cache group by query result to avoid N+1 call.
|
201
206
|
# @api protected
|
202
207
|
#
|
208
|
+
# @param [Integer] limit Limit to query for opened notifications
|
203
209
|
# @return [Integer] Count of group members of the opened notification
|
204
210
|
def opened_group_member_count(limit = ActivityNotification.config.opened_index_limit)
|
205
211
|
# Cache group by query result to avoid N+1 call
|
@@ -233,6 +239,7 @@ module ActivityNotification
|
|
233
239
|
# This method is designed to cache group by query result to avoid N+1 call.
|
234
240
|
# @api protected
|
235
241
|
#
|
242
|
+
# @param [Integer] limit Limit to query for opened notifications
|
236
243
|
# @return [Integer] Count of group member notifiers of the opened notification
|
237
244
|
def opened_group_member_notifier_count(limit = ActivityNotification.config.opened_index_limit)
|
238
245
|
# Cache group by query result to avoid N+1 call
|
@@ -2,6 +2,15 @@ module ActivityNotification
|
|
2
2
|
module Association
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
|
+
included do
|
6
|
+
# Selects filtered notifications by associated instance.
|
7
|
+
# @scope class
|
8
|
+
# @param [String] name Association name
|
9
|
+
# @param [Object] instance Associated instance
|
10
|
+
# @return [Mongoid::Criteria<Notificaion>] Database query of filtered notifications
|
11
|
+
scope :filtered_by_association, ->(name, instance) { instance.present? ? where({ "#{name}_id" => instance.id, "#{name}_type" => instance.class.name }) : none }
|
12
|
+
end
|
13
|
+
|
5
14
|
class_methods do
|
6
15
|
# Defines has_many association with ActivityNotification models.
|
7
16
|
# @return [Mongoid::Criteria<Object>] Database query of associated model instances
|
@@ -49,7 +58,8 @@ module ActivityNotification
|
|
49
58
|
define_method(name) do |reload = false|
|
50
59
|
reload and self.instance_variable_set("@#{name}", nil)
|
51
60
|
if self.instance_variable_get("@#{name}").blank?
|
52
|
-
|
61
|
+
new_value = object_class.where(id_field => self.id, type_field => self.class.name)
|
62
|
+
self.instance_variable_set("@#{name}", new_value)
|
53
63
|
end
|
54
64
|
self.instance_variable_get("@#{name}")
|
55
65
|
end
|
@@ -121,7 +121,7 @@ module ActivityNotification
|
|
121
121
|
# @scope class
|
122
122
|
# @param [Object] target Target instance for filter
|
123
123
|
# @return [Mongoid::Criteria<Notificaion>] Database query of filtered notifications
|
124
|
-
scope :filtered_by_target, ->(target) {
|
124
|
+
scope :filtered_by_target, ->(target) { filtered_by_association("target", target) }
|
125
125
|
|
126
126
|
# Selects filtered notifications by notifiable instance.
|
127
127
|
# @example Get filtered unopened notificatons of the @user for @comment as notifiable
|
@@ -129,7 +129,7 @@ module ActivityNotification
|
|
129
129
|
# @scope class
|
130
130
|
# @param [Object] notifiable Notifiable instance for filter
|
131
131
|
# @return [Mongoid::Criteria<Notificaion>] Database query of filtered notifications
|
132
|
-
scope :filtered_by_instance, ->(notifiable) {
|
132
|
+
scope :filtered_by_instance, ->(notifiable) { filtered_by_association("notifiable", notifiable) }
|
133
133
|
|
134
134
|
# Selects filtered notifications by group instance.
|
135
135
|
# @example Get filtered unopened notificatons of the @user for @article as group
|
@@ -197,6 +197,11 @@ module ActivityNotification
|
|
197
197
|
super
|
198
198
|
end
|
199
199
|
|
200
|
+
# Raise DeleteRestrictionError for notifications.
|
201
|
+
def self.raise_delete_restriction_error(error_text)
|
202
|
+
raise error_text
|
203
|
+
end
|
204
|
+
|
200
205
|
protected
|
201
206
|
|
202
207
|
# Returns count of group members of the unopened notification.
|
@@ -214,6 +219,7 @@ module ActivityNotification
|
|
214
219
|
# @api protected
|
215
220
|
# @todo Avoid N+1 call
|
216
221
|
#
|
222
|
+
# @param [Integer] limit Limit to query for opened notifications
|
217
223
|
# @return [Integer] Count of group members of the opened notification
|
218
224
|
def opened_group_member_count(limit = ActivityNotification.config.opened_index_limit)
|
219
225
|
limit == 0 and return 0
|
@@ -239,6 +245,7 @@ module ActivityNotification
|
|
239
245
|
# @api protected
|
240
246
|
# @todo Avoid N+1 call
|
241
247
|
#
|
248
|
+
# @param [Integer] limit Limit to query for opened notifications
|
242
249
|
# @return [Integer] Count of group member notifiers of the opened notification
|
243
250
|
def opened_group_member_notifier_count(limit = ActivityNotification.config.opened_index_limit)
|
244
251
|
limit == 0 and return 0
|
@@ -50,7 +50,7 @@ module ActivityNotification
|
|
50
50
|
# @scope class
|
51
51
|
# @param [Object] target Target instance for filter
|
52
52
|
# @return [Mongoid::Criteria<Subscription>] Database query of filtered subscriptions
|
53
|
-
scope :filtered_by_target, ->(target) {
|
53
|
+
scope :filtered_by_target, ->(target) { filtered_by_association("target", target) }
|
54
54
|
|
55
55
|
# Includes target instance with query for subscriptions.
|
56
56
|
# @return [Mongoid::Criteria<Subscription>] Database query of subscriptions with target
|
@@ -3,6 +3,11 @@ module ActivityNotification
|
|
3
3
|
module ActsAsNotifiable
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
|
+
included do
|
7
|
+
# Defines private clas methods
|
8
|
+
private_class_method :add_tracked_callbacks, :add_tracked_callback, :add_destroy_dependency, :arrange_optional_targets_option
|
9
|
+
end
|
10
|
+
|
6
11
|
class_methods do
|
7
12
|
# Adds required configurations to notifiable models.
|
8
13
|
#
|
@@ -107,8 +112,9 @@ module ActivityNotification
|
|
107
112
|
#
|
108
113
|
# * :tracked
|
109
114
|
# * Adds required callbacks to generate notifications for creation and update of the notifiable model.
|
110
|
-
#
|
111
|
-
#
|
115
|
+
# Tracked notifications are disabled as default.
|
116
|
+
# When you set true as this :tracked option, default callbacks will be enabled for [:create, :update].
|
117
|
+
# You can use :only, :except and other notify options as hash for this option.
|
112
118
|
# @example Add all callbacks to generate notifications for creation and update
|
113
119
|
# # app/models/comment.rb
|
114
120
|
# class Comment < ActiveRecord::Base
|
@@ -125,7 +131,7 @@ module ActivityNotification
|
|
125
131
|
# # app/models/comment.rb
|
126
132
|
# class Comment < ActiveRecord::Base
|
127
133
|
# belongs_to :article
|
128
|
-
# acts_as_notifiable :users, targets: User.all, tracked: { except: [:update] }
|
134
|
+
# acts_as_notifiable :users, targets: User.all, tracked: { except: [:update], key: "comment.edited", send_later: false }
|
129
135
|
# end
|
130
136
|
#
|
131
137
|
# * :printable_name or :printable_notifiable_name
|
@@ -183,6 +189,7 @@ module ActivityNotification
|
|
183
189
|
# @option options [Symbol, Proc, Hash] :parameters ({}) Additional parameters of the notifications
|
184
190
|
# @option options [Symbol, Proc, Boolean] :email_allowed (ActivityNotification.config.email_enabled) Whether activity_notification sends notification email
|
185
191
|
# @option options [Symbol, Proc, String] :notifiable_path (polymorphic_path(self)) Path to redirect from open or move action of notification controller
|
192
|
+
# @option options [Boolean, Hash] :tracked (nil) Flag or parameters for automatic tracked notifications
|
186
193
|
# @option options [Symbol, Proc, String] :printable_name (ActivityNotification::Common.printable_name) Printable notifiable name
|
187
194
|
# @option options [Symbol, Proc] :dependent_notifications (nil) Dependency for notifications to delete generated notifications with this notifiable, [:delete_all, :destroy, :restrict_with_error, :restrict_with_exception, :update_group_and_delete_all, :update_group_and_destroy] are available
|
188
195
|
# @option options [Hash<Class, Hash>] :optional_targets (nil) Optional target configurations with hash of `OptionalTarget` implementation class as key and initializing option parameter as value
|
@@ -248,21 +255,29 @@ module ActivityNotification
|
|
248
255
|
elsif tracked_option[:only]
|
249
256
|
tracked_callbacks &= tracked_option.delete(:only)
|
250
257
|
end
|
251
|
-
if
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
258
|
+
if tracked_option.has_key?(:key)
|
259
|
+
add_tracked_callback(tracked_callbacks, :create, ->{ notify target_type, tracked_option })
|
260
|
+
add_tracked_callback(tracked_callbacks, :update, ->{ notify target_type, tracked_option })
|
261
|
+
else
|
262
|
+
add_tracked_callback(tracked_callbacks, :create, ->{ notify target_type, *tracked_option, key: notification_key_for_tracked_creation })
|
263
|
+
add_tracked_callback(tracked_callbacks, :update, ->{ notify target_type, *tracked_option, key: notification_key_for_tracked_update })
|
257
264
|
end
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
265
|
+
{ tracked: tracked_callbacks }
|
266
|
+
end
|
267
|
+
|
268
|
+
# Adds tracked callback.
|
269
|
+
# @param [Array<Symbol>] tracked_callbacks Array of tracked callbacks (Array of [:create or :update])
|
270
|
+
# @param [Symbol] tracked_action Tracked action (:create or :update)
|
271
|
+
# @param [Proc] tracked_proc Proc or lambda function to execute
|
272
|
+
def add_tracked_callback(tracked_callbacks, tracked_action, tracked_proc)
|
273
|
+
if tracked_callbacks.include? tracked_action
|
274
|
+
case tracked_action
|
275
|
+
when :create
|
276
|
+
after_create tracked_proc
|
277
|
+
when :update
|
278
|
+
after_update tracked_proc
|
263
279
|
end
|
264
280
|
end
|
265
|
-
{ tracked: tracked_callbacks }
|
266
281
|
end
|
267
282
|
|
268
283
|
# Adds destroy dependency.
|