activity_notification 1.3.0 → 1.4.0
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/.travis.yml +41 -5
- data/CHANGELOG.md +20 -0
- data/Gemfile +4 -1
- data/Gemfile.lock +81 -70
- data/README.md +152 -12
- data/activity_notification.gemspec +6 -4
- data/gemfiles/Gemfile.rails-4.2.lock +27 -22
- data/gemfiles/Gemfile.rails-5.0.lock +26 -21
- data/gemfiles/Gemfile.rails-5.1 +15 -0
- data/gemfiles/Gemfile.rails-5.1.lock +229 -0
- data/lib/activity_notification/apis/notification_api.rb +2 -2
- data/lib/activity_notification/apis/subscription_api.rb +7 -7
- data/lib/activity_notification/controllers/common_controller.rb +2 -2
- data/lib/activity_notification/helpers/view_helpers.rb +1 -1
- data/lib/activity_notification/models/concerns/notifiable.rb +19 -1
- data/lib/activity_notification/models/concerns/target.rb +5 -3
- data/lib/activity_notification/orm/active_record/notification.rb +3 -1
- data/lib/activity_notification/orm/active_record/subscription.rb +3 -1
- data/lib/activity_notification/orm/mongoid.rb +2 -2
- data/lib/activity_notification/renderable.rb +1 -1
- data/lib/activity_notification/roles/acts_as_notifiable.rb +98 -17
- data/lib/activity_notification/version.rb +1 -1
- data/spec/concerns/apis/notification_api_spec.rb +9 -8
- data/spec/concerns/apis/subscription_api_spec.rb +28 -28
- data/spec/concerns/models/notifier_spec.rb +1 -1
- data/spec/concerns/models/subscriber_spec.rb +7 -7
- data/spec/concerns/models/target_spec.rb +20 -20
- data/spec/controllers/notifications_controller_shared_examples.rb +19 -8
- data/spec/controllers/subscriptions_controller_shared_examples.rb +16 -5
- data/spec/models/notification_spec.rb +4 -4
- data/spec/models/subscription_spec.rb +16 -12
- data/spec/rails_app/app/controllers/articles_controller.rb +1 -1
- data/spec/rails_app/app/controllers/comments_controller.rb +0 -1
- data/spec/rails_app/app/models/admin.rb +29 -8
- data/spec/rails_app/app/models/article.rb +45 -13
- data/spec/rails_app/app/models/comment.rb +107 -42
- data/spec/rails_app/app/models/user.rb +45 -12
- data/spec/rails_app/app/views/layouts/_header.html.erb +1 -0
- data/spec/rails_app/config/database.yml +26 -15
- data/spec/rails_app/config/initializers/devise.rb +5 -1
- data/spec/rails_app/db/migrate/20160715050420_create_activity_notification_tables.rb +1 -1
- data/spec/rails_app/db/migrate/20160715050433_create_test_tables.rb +1 -1
- data/spec/rails_app/db/seeds.rb +31 -8
- data/spec/roles/acts_as_notifiable_spec.rb +154 -1
- data/spec/spec_helper.rb +7 -2
- metadata +47 -17
@@ -5,7 +5,7 @@ shared_examples_for :notifier do
|
|
5
5
|
describe "with association" do
|
6
6
|
it "has many sent_notifications" do
|
7
7
|
notification_1 = create(:notification, notifier: test_instance)
|
8
|
-
notification_2 = create(:notification, notifier: test_instance)
|
8
|
+
notification_2 = create(:notification, notifier: test_instance, created_at: notification_1.created_at + 10.second)
|
9
9
|
expect(test_instance.sent_notifications.count).to eq(2)
|
10
10
|
expect(test_instance.sent_notifications.earliest).to eq(notification_1)
|
11
11
|
expect(test_instance.sent_notifications.latest).to eq(notification_2)
|
@@ -11,11 +11,11 @@ shared_examples_for :subscriber do
|
|
11
11
|
describe "with association" do
|
12
12
|
it "has many subscriptions" do
|
13
13
|
subscription_1 = create(:subscription, target: test_instance, key: 'subscription_key_1')
|
14
|
-
subscription_2 = create(:subscription, target: test_instance, key: 'subscription_key_2')
|
14
|
+
subscription_2 = create(:subscription, target: test_instance, key: 'subscription_key_2', created_at: subscription_1.created_at + 10.second)
|
15
15
|
expect(test_instance.subscriptions.count).to eq(2)
|
16
16
|
expect(test_instance.subscriptions.earliest_order.first).to eq(subscription_1)
|
17
17
|
expect(test_instance.subscriptions.latest_order.first).to eq(subscription_2)
|
18
|
-
expect(test_instance.subscriptions).to
|
18
|
+
expect(test_instance.subscriptions.latest_order).to eq(ActivityNotification::Subscription.filtered_by_target(test_instance).latest_order)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -182,7 +182,7 @@ shared_examples_for :subscriber do
|
|
182
182
|
context "when the target has subscriptions" do
|
183
183
|
before do
|
184
184
|
@subscription2 = create(:subscription, target: test_instance, key: 'subscription_key_2')
|
185
|
-
@subscription1 = create(:subscription, target: test_instance, key: 'subscription_key_1')
|
185
|
+
@subscription1 = create(:subscription, target: test_instance, key: 'subscription_key_1', created_at: @subscription2.created_at + 10.second)
|
186
186
|
end
|
187
187
|
|
188
188
|
context "without any options" do
|
@@ -221,7 +221,7 @@ shared_examples_for :subscriber do
|
|
221
221
|
context 'with custom_filter options' do
|
222
222
|
it "returns filtered notifications only" do
|
223
223
|
if ActivityNotification.config.orm == :active_record
|
224
|
-
options = { custom_filter: ["key = ?", 'subscription_key_2'] }
|
224
|
+
options = { custom_filter: ["subscriptions.key = ?", 'subscription_key_2'] }
|
225
225
|
expect(test_instance.subscription_index(options)[0]).to eq(@subscription2)
|
226
226
|
expect(test_instance.subscription_index(options).size).to eq(1)
|
227
227
|
end
|
@@ -258,8 +258,8 @@ shared_examples_for :subscriber do
|
|
258
258
|
|
259
259
|
context "when the target has notifications" do
|
260
260
|
before do
|
261
|
-
create(:notification, target: test_instance, key: 'notification_key_2')
|
262
|
-
create(:notification, target: test_instance, key: 'notification_key_1')
|
261
|
+
notification = create(:notification, target: test_instance, key: 'notification_key_2')
|
262
|
+
create(:notification, target: test_instance, key: 'notification_key_1', created_at: notification.created_at + 10.second)
|
263
263
|
create(:subscription, target: test_instance, key: 'notification_key_1')
|
264
264
|
end
|
265
265
|
|
@@ -323,7 +323,7 @@ shared_examples_for :subscriber do
|
|
323
323
|
context 'with custom_filter options' do
|
324
324
|
it "returns filtered notifications only" do
|
325
325
|
if ActivityNotification.config.orm == :active_record
|
326
|
-
options = { custom_filter: ["key = ?", 'notification_key_2'] }
|
326
|
+
options = { custom_filter: ["notifications.key = ?", 'notification_key_2'] }
|
327
327
|
expect(test_instance.notification_keys(options)[0]).to eq('notification_key_2')
|
328
328
|
expect(test_instance.notification_keys(options).size).to eq(1)
|
329
329
|
end
|
@@ -6,7 +6,7 @@ shared_examples_for :target do
|
|
6
6
|
describe "with association" do
|
7
7
|
it "has many notifications" do
|
8
8
|
notification_1 = create(:notification, target: test_instance)
|
9
|
-
notification_2 = create(:notification, target: test_instance)
|
9
|
+
notification_2 = create(:notification, target: test_instance, created_at: notification_1.created_at + 10.second)
|
10
10
|
expect(test_instance.notifications.count).to eq(2)
|
11
11
|
expect(test_instance.notifications.earliest).to eq(notification_1)
|
12
12
|
expect(test_instance.notifications.latest).to eq(notification_2)
|
@@ -108,15 +108,15 @@ shared_examples_for :target do
|
|
108
108
|
@target_2 = create(test_class_name)
|
109
109
|
@target_3 = create(test_class_name)
|
110
110
|
notification_1 = create(:notification, target: @target_1)
|
111
|
-
@notification_2 = create(:notification, target: @target_1)
|
112
|
-
notification_3 = create(:notification, target: @target_1, group_owner: @notification_2)
|
113
|
-
@notification_4 = create(:notification, target: @target_1, group_owner: @notification_2)
|
114
|
-
notification_5 = create(:notification, target: @target_2)
|
115
|
-
notification_6 = create(:notification, target: @target_2)
|
111
|
+
@notification_2 = create(:notification, target: @target_1, created_at: notification_1.created_at + 10.second)
|
112
|
+
notification_3 = create(:notification, target: @target_1, group_owner: @notification_2, created_at: notification_1.created_at + 20.second)
|
113
|
+
@notification_4 = create(:notification, target: @target_1, group_owner: @notification_2, created_at: notification_1.created_at + 30.second)
|
114
|
+
notification_5 = create(:notification, target: @target_2, created_at: notification_1.created_at + 40.second)
|
115
|
+
notification_6 = create(:notification, target: @target_2, created_at: notification_1.created_at + 50.second)
|
116
116
|
notification_6.open!
|
117
|
-
notification_7 = create(:notification, target: @target_3)
|
117
|
+
notification_7 = create(:notification, target: @target_3, created_at: notification_1.created_at + 60.second)
|
118
118
|
notification_7.open!
|
119
|
-
notification_8 = create(:notification, target: test_notifiable)
|
119
|
+
notification_8 = create(:notification, target: test_notifiable, created_at: notification_1.created_at + 70.second)
|
120
120
|
end
|
121
121
|
|
122
122
|
context "as default" do
|
@@ -517,9 +517,9 @@ shared_examples_for :target do
|
|
517
517
|
@group = create(:article)
|
518
518
|
@key = 'test.key.1'
|
519
519
|
@notification2 = create(:notification, target: test_instance, notifiable: @notifiable)
|
520
|
-
@notification1 = create(:notification, target: test_instance, notifiable: create(:comment), group: @group)
|
521
|
-
@member1 = create(:notification, target: test_instance, notifiable: create(:comment), group_owner: @notification1)
|
522
|
-
@notification3 = create(:notification, target: test_instance, notifiable: create(:article), key: @key)
|
520
|
+
@notification1 = create(:notification, target: test_instance, notifiable: create(:comment), group: @group, created_at: @notification2.created_at + 10.second)
|
521
|
+
@member1 = create(:notification, target: test_instance, notifiable: create(:comment), group_owner: @notification1, created_at: @notification2.created_at + 20.second)
|
522
|
+
@notification3 = create(:notification, target: test_instance, notifiable: create(:article), key: @key, created_at: @notification2.created_at + 30.second)
|
523
523
|
@notification3.open!
|
524
524
|
end
|
525
525
|
|
@@ -615,7 +615,7 @@ shared_examples_for :target do
|
|
615
615
|
context 'with custom_filter options' do
|
616
616
|
it "returns filtered notifications only" do
|
617
617
|
if ActivityNotification.config.orm == :active_record
|
618
|
-
options = { custom_filter: ["key = ?", @key] }
|
618
|
+
options = { custom_filter: ["notifications.key = ?", @key] }
|
619
619
|
expect(test_instance.notification_index(options)[0]).to eq(@notification3)
|
620
620
|
expect(test_instance.notification_index(options).size).to eq(1)
|
621
621
|
end
|
@@ -629,8 +629,8 @@ shared_examples_for :target do
|
|
629
629
|
|
630
630
|
context "when the target has no unopened notifications" do
|
631
631
|
before do
|
632
|
-
create(:notification, target: test_instance, opened_at: Time.current)
|
633
|
-
create(:notification, target: test_instance, opened_at: Time.current)
|
632
|
+
notification = create(:notification, target: test_instance, opened_at: Time.current)
|
633
|
+
create(:notification, target: test_instance, opened_at: Time.current, created_at: notification.created_at + 10.second)
|
634
634
|
end
|
635
635
|
|
636
636
|
it "calls unopened_notification_index" do
|
@@ -665,7 +665,7 @@ shared_examples_for :target do
|
|
665
665
|
context "when the target has unopened notifications" do
|
666
666
|
before do
|
667
667
|
@notification_1 = create(:notification, target: test_instance)
|
668
|
-
@notification_2 = create(:notification, target: test_instance)
|
668
|
+
@notification_2 = create(:notification, target: test_instance, created_at: @notification_1.created_at + 10.second)
|
669
669
|
end
|
670
670
|
|
671
671
|
context "without limit" do
|
@@ -721,7 +721,7 @@ shared_examples_for :target do
|
|
721
721
|
context "when the target has opened notifications" do
|
722
722
|
before do
|
723
723
|
@notification_1 = create(:notification, target: test_instance, opened_at: Time.current)
|
724
|
-
@notification_2 = create(:notification, target: test_instance, opened_at: Time.current)
|
724
|
+
@notification_2 = create(:notification, target: test_instance, opened_at: Time.current, created_at: @notification_1.created_at + 10.second)
|
725
725
|
end
|
726
726
|
|
727
727
|
context "without limit" do
|
@@ -808,8 +808,8 @@ shared_examples_for :target do
|
|
808
808
|
@group = create(:article)
|
809
809
|
@key = 'test.key.1'
|
810
810
|
@notification2 = create(:notification, target: test_instance, notifiable: @notifiable)
|
811
|
-
@notification1 = create(:notification, target: test_instance, notifiable: create(:comment), group: @group)
|
812
|
-
@notification3 = create(:notification, target: test_instance, notifiable: create(:article), key: @key)
|
811
|
+
@notification1 = create(:notification, target: test_instance, notifiable: create(:comment), group: @group, created_at: @notification2.created_at + 10.second)
|
812
|
+
@notification3 = create(:notification, target: test_instance, notifiable: create(:article), key: @key, created_at: @notification2.created_at + 20.second)
|
813
813
|
@notification3.open!
|
814
814
|
end
|
815
815
|
|
@@ -884,8 +884,8 @@ shared_examples_for :target do
|
|
884
884
|
|
885
885
|
context "when the target has no unopened notifications" do
|
886
886
|
before do
|
887
|
-
create(:notification, target: test_instance, opened_at: Time.current)
|
888
|
-
create(:notification, target: test_instance, opened_at: Time.current)
|
887
|
+
notification = create(:notification, target: test_instance, opened_at: Time.current)
|
888
|
+
create(:notification, target: test_instance, opened_at: Time.current, created_at: notification.created_at + 10.second)
|
889
889
|
end
|
890
890
|
|
891
891
|
it "calls unopened_notification_index_with_attributes" do
|
@@ -57,9 +57,15 @@ shared_examples_for :notification_controller do
|
|
57
57
|
end
|
58
58
|
|
59
59
|
it "raises ActiveRecord::RecordNotFound" do
|
60
|
-
|
61
|
-
|
62
|
-
|
60
|
+
if ENV['AN_TEST_DB'] == 'mongodb'
|
61
|
+
expect {
|
62
|
+
get_with_compatibility :index, target_params.merge({ typed_target_param => 0 }), valid_session
|
63
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
64
|
+
else
|
65
|
+
expect {
|
66
|
+
get_with_compatibility :index, target_params.merge({ typed_target_param => 0 }), valid_session
|
67
|
+
}.to raise_error(ActiveRecord::RecordNotFound)
|
68
|
+
end
|
63
69
|
end
|
64
70
|
end
|
65
71
|
|
@@ -74,8 +80,13 @@ shared_examples_for :notification_controller do
|
|
74
80
|
end
|
75
81
|
|
76
82
|
it "returns json format" do
|
77
|
-
|
78
|
-
|
83
|
+
if ActivityNotification.config.orm == :active_record
|
84
|
+
expect(JSON.parse(response.body).first)
|
85
|
+
.to include("target_id" => test_target.id, "target_type" => test_target.to_class_name)
|
86
|
+
else
|
87
|
+
expect(JSON.parse(response.body).first)
|
88
|
+
.to include("target_id" => test_target.id.to_s, "target_type" => test_target.to_class_name)
|
89
|
+
end
|
79
90
|
end
|
80
91
|
end
|
81
92
|
|
@@ -155,9 +166,9 @@ shared_examples_for :notification_controller do
|
|
155
166
|
@notifiable = create(:article)
|
156
167
|
@group = create(:article)
|
157
168
|
@key = 'test.key.1'
|
158
|
-
create(:notification, target: test_target, notifiable: @notifiable)
|
159
|
-
create(:notification, target: test_target, notifiable: create(:comment), group: @group)
|
160
|
-
create(:notification, target: test_target, notifiable: create(:article), key: @key).open!
|
169
|
+
notification = create(:notification, target: test_target, notifiable: @notifiable)
|
170
|
+
create(:notification, target: test_target, notifiable: create(:comment), group: @group, created_at: notification.created_at + 10.second)
|
171
|
+
create(:notification, target: test_target, notifiable: create(:article), key: @key, created_at: notification.created_at + 20.second).open!
|
161
172
|
@notification1 = test_target.notification_index[0]
|
162
173
|
@notification2 = test_target.notification_index[1]
|
163
174
|
@notification3 = test_target.notification_index[2]
|
@@ -69,9 +69,15 @@ shared_examples_for :subscription_controller do
|
|
69
69
|
end
|
70
70
|
|
71
71
|
it "raises ActiveRecord::RecordNotFound" do
|
72
|
-
|
73
|
-
|
74
|
-
|
72
|
+
if ENV['AN_TEST_DB'] == 'mongodb'
|
73
|
+
expect {
|
74
|
+
get_with_compatibility :index, target_params.merge({ typed_target_param => 0 }), valid_session
|
75
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
76
|
+
else
|
77
|
+
expect {
|
78
|
+
get_with_compatibility :index, target_params.merge({ typed_target_param => 0 }), valid_session
|
79
|
+
}.to raise_error(ActiveRecord::RecordNotFound)
|
80
|
+
end
|
75
81
|
end
|
76
82
|
end
|
77
83
|
|
@@ -87,8 +93,13 @@ shared_examples_for :subscription_controller do
|
|
87
93
|
end
|
88
94
|
|
89
95
|
it "returns json format" do
|
90
|
-
|
91
|
-
|
96
|
+
if ActivityNotification.config.orm == :active_record
|
97
|
+
expect(JSON.parse(response.body)["subscriptions"].first)
|
98
|
+
.to include("target_id" => test_target.id, "target_type" => test_target.to_class_name)
|
99
|
+
else
|
100
|
+
expect(JSON.parse(response.body)["subscriptions"].first)
|
101
|
+
.to include("target_id" => test_target.id.to_s, "target_type" => test_target.to_class_name)
|
102
|
+
end
|
92
103
|
expect(JSON.parse(response.body)["unconfigured_notification_keys"].first)
|
93
104
|
.to eq('test_notification_key')
|
94
105
|
end
|
@@ -277,7 +277,7 @@ describe ActivityNotification::Notification, type: :model do
|
|
277
277
|
context 'with custom_filter options' do
|
278
278
|
it "works with filtered_by_options scope" do
|
279
279
|
if ActivityNotification.config.orm == :active_record
|
280
|
-
notifications = ActivityNotification::Notification.filtered_by_options({ custom_filter: ["key = ?", @key_1] })
|
280
|
+
notifications = ActivityNotification::Notification.filtered_by_options({ custom_filter: ["notifications.key = ?", @key_1] })
|
281
281
|
expect(notifications.to_a.size).to eq(1)
|
282
282
|
expect(notifications.first).to eq(@notification_1)
|
283
283
|
end
|
@@ -301,9 +301,9 @@ describe ActivityNotification::Notification, type: :model do
|
|
301
301
|
before do
|
302
302
|
ActivityNotification::Notification.delete_all
|
303
303
|
unopened_group_owner = create(:notification, group_owner: nil)
|
304
|
-
unopened_group_member = create(:notification, group_owner: unopened_group_owner)
|
305
|
-
opened_group_owner = create(:notification, group_owner: nil, opened_at: Time.current)
|
306
|
-
opened_group_member = create(:notification, group_owner: opened_group_owner, opened_at: Time.current)
|
304
|
+
unopened_group_member = create(:notification, group_owner: unopened_group_owner, created_at: unopened_group_owner.created_at + 10.second)
|
305
|
+
opened_group_owner = create(:notification, group_owner: nil, opened_at: Time.current, created_at: unopened_group_owner.created_at + 20.second)
|
306
|
+
opened_group_member = create(:notification, group_owner: opened_group_owner, opened_at: Time.current, created_at: unopened_group_owner.created_at + 30.second)
|
307
307
|
@earliest_notification = unopened_group_owner
|
308
308
|
@latest_notification = opened_group_member
|
309
309
|
end
|
@@ -93,7 +93,7 @@ describe ActivityNotification::Subscription, type: :model do
|
|
93
93
|
context 'with custom_filter options' do
|
94
94
|
it "works with filtered_by_options scope" do
|
95
95
|
if ActivityNotification.config.orm == :active_record
|
96
|
-
subscriptions = ActivityNotification::Subscription.filtered_by_options({ custom_filter: ["key = ?", @key_1] })
|
96
|
+
subscriptions = ActivityNotification::Subscription.filtered_by_options({ custom_filter: ["subscriptions.key = ?", @key_1] })
|
97
97
|
expect(subscriptions.size).to eq(1)
|
98
98
|
expect(subscriptions.first).to eq(@subscription_1)
|
99
99
|
end
|
@@ -117,9 +117,9 @@ describe ActivityNotification::Subscription, type: :model do
|
|
117
117
|
before do
|
118
118
|
ActivityNotification::Subscription.delete_all
|
119
119
|
@subscription_1 = create(:subscription, key: 'key.1')
|
120
|
-
@subscription_2 = create(:subscription, key: 'key.2')
|
121
|
-
@subscription_3 = create(:subscription, key: 'key.3')
|
122
|
-
@subscription_4 = create(:subscription, key: 'key.4')
|
120
|
+
@subscription_2 = create(:subscription, key: 'key.2', created_at: @subscription_1.created_at + 10.second)
|
121
|
+
@subscription_3 = create(:subscription, key: 'key.3', created_at: @subscription_1.created_at + 20.second)
|
122
|
+
@subscription_4 = create(:subscription, key: 'key.4', created_at: @subscription_1.created_at + 30.second)
|
123
123
|
end
|
124
124
|
|
125
125
|
it "works with latest_order scope" do
|
@@ -137,17 +137,21 @@ describe ActivityNotification::Subscription, type: :model do
|
|
137
137
|
end
|
138
138
|
|
139
139
|
it "works with latest_subscribed_order scope" do
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
140
|
+
Timecop.travel(1.minute.from_now) do
|
141
|
+
@subscription_2.subscribe
|
142
|
+
subscriptions = ActivityNotification::Subscription.latest_subscribed_order
|
143
|
+
expect(subscriptions.size).to eq(4)
|
144
|
+
expect(subscriptions.first).to eq(@subscription_2)
|
145
|
+
end
|
144
146
|
end
|
145
147
|
|
146
148
|
it "works with earliest_subscribed_order scope" do
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
149
|
+
Timecop.travel(1.minute.from_now) do
|
150
|
+
@subscription_3.subscribe
|
151
|
+
subscriptions = ActivityNotification::Subscription.earliest_subscribed_order
|
152
|
+
expect(subscriptions.size).to eq(4)
|
153
|
+
expect(subscriptions.last).to eq(@subscription_3)
|
154
|
+
end
|
151
155
|
end
|
152
156
|
|
153
157
|
it "works with key_order scope" do
|
@@ -52,7 +52,7 @@ class ArticlesController < ApplicationController
|
|
52
52
|
private
|
53
53
|
# Use callbacks to share common setup or constraints between actions.
|
54
54
|
def set_article
|
55
|
-
@article = Article.includes(:user).
|
55
|
+
@article = Article.includes(:user).find(params[:id])
|
56
56
|
end
|
57
57
|
|
58
58
|
# Only allow a trusted parameter "white list" through.
|
@@ -1,9 +1,30 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
1
|
+
if ENV['AN_TEST_DB'] != 'mongodb'
|
2
|
+
class Admin < ActiveRecord::Base
|
3
|
+
belongs_to :user
|
4
|
+
validates :user, presence: true
|
5
|
+
|
6
|
+
acts_as_notification_target email_allowed: false,
|
7
|
+
subscription_allowed: true,
|
8
|
+
devise_resource: :user,
|
9
|
+
printable_name: ->(admin) { "admin (#{admin.user.name})" }
|
10
|
+
end
|
11
|
+
else
|
12
|
+
require 'mongoid'
|
13
|
+
class Admin
|
14
|
+
include Mongoid::Document
|
15
|
+
include Mongoid::Timestamps
|
16
|
+
include GlobalID::Identification
|
17
|
+
|
18
|
+
belongs_to :user
|
19
|
+
validates :user, presence: true
|
20
|
+
|
21
|
+
field :phone_number, type: String
|
22
|
+
field :slack_username, type: String
|
23
|
+
|
24
|
+
include ActivityNotification::Models
|
25
|
+
acts_as_notification_target email_allowed: false,
|
26
|
+
subscription_allowed: true,
|
27
|
+
devise_resource: :user,
|
28
|
+
printable_name: ->(admin) { "admin (#{admin.user.name})" }
|
29
|
+
end
|
9
30
|
end
|
@@ -1,17 +1,49 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
if ENV['AN_TEST_DB'] != 'mongodb'
|
2
|
+
class Article < ActiveRecord::Base
|
3
|
+
belongs_to :user
|
4
|
+
has_many :comments, dependent: :destroy
|
5
|
+
has_many :commented_users, through: :comments, source: :user
|
6
|
+
validates :user, presence: true
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
acts_as_notifiable :users,
|
9
|
+
targets: ->(article) { User.all.to_a - [article.user] },
|
10
|
+
notifier: :user, email_allowed: true,
|
11
|
+
printable_name: ->(article) { "new article \"#{article.title}\"" },
|
12
|
+
dependent_notifications: :delete_all
|
13
|
+
acts_as_notification_group printable_name: ->(article) { "article \"#{article.title}\"" }
|
13
14
|
|
14
|
-
|
15
|
-
|
15
|
+
def author?(user)
|
16
|
+
self.user == user
|
17
|
+
end
|
18
|
+
end
|
19
|
+
else
|
20
|
+
require 'mongoid'
|
21
|
+
class Article
|
22
|
+
include Mongoid::Document
|
23
|
+
include Mongoid::Timestamps
|
24
|
+
include GlobalID::Identification
|
25
|
+
|
26
|
+
belongs_to :user
|
27
|
+
has_many :comments, dependent: :destroy
|
28
|
+
validates :user, presence: true
|
29
|
+
|
30
|
+
field :title, type: String
|
31
|
+
field :body, type: String
|
32
|
+
|
33
|
+
include ActivityNotification::Models
|
34
|
+
acts_as_notifiable :users,
|
35
|
+
targets: ->(article) { User.all.to_a - [article.user] },
|
36
|
+
notifier: :user, email_allowed: true,
|
37
|
+
printable_name: ->(article) { "new article \"#{article.title}\"" },
|
38
|
+
dependent_notifications: :delete_all
|
39
|
+
acts_as_notification_group printable_name: ->(article) { "article \"#{article.title}\"" }
|
40
|
+
|
41
|
+
def commented_users
|
42
|
+
User.where(:id.in => comments.pluck(:user_id))
|
43
|
+
end
|
44
|
+
|
45
|
+
def author?(user)
|
46
|
+
self.user == user
|
47
|
+
end
|
16
48
|
end
|
17
49
|
end
|
@@ -1,51 +1,116 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
1
|
+
if ENV['AN_TEST_DB'] != 'mongodb'
|
2
|
+
class Comment < ActiveRecord::Base
|
3
|
+
belongs_to :article
|
4
|
+
belongs_to :user
|
5
|
+
validates :article, presence: true
|
6
|
+
validates :user, presence: true
|
7
|
+
|
8
|
+
acts_as_notifiable :users,
|
9
|
+
targets: ->(comment, key) { ([comment.article.user] + comment.article.commented_users.to_a - [comment.user]).uniq },
|
10
|
+
group: :article, notifier: :user, email_allowed: true,
|
11
|
+
parameters: { 'test_default_param' => '1' },
|
12
|
+
notifiable_path: :article_notifiable_path,
|
13
|
+
printable_name: ->(comment) { "comment \"#{comment.body}\"" },
|
14
|
+
dependent_notifications: :update_group_and_delete_all
|
15
|
+
|
16
|
+
require 'custom_optional_targets/console_output'
|
17
|
+
optional_targets = { CustomOptionalTarget::ConsoleOutput => {} }
|
18
|
+
if ENV['OPTIONAL_TARGET_AMAZON_SNS']
|
19
|
+
require 'activity_notification/optional_targets/amazon_sns'
|
20
|
+
if ENV['OPTIONAL_TARGET_AMAZON_SNS_TOPIC_ARN']
|
21
|
+
optional_targets = optional_targets.merge(
|
22
|
+
ActivityNotification::OptionalTarget::AmazonSNS => { topic_arn: ENV['OPTIONAL_TARGET_AMAZON_SNS_TOPIC_ARN'] }
|
23
|
+
)
|
24
|
+
elsif ENV['OPTIONAL_TARGET_AMAZON_SNS_PHONE_NUMBER']
|
25
|
+
optional_targets = optional_targets.merge(
|
26
|
+
ActivityNotification::OptionalTarget::AmazonSNS => { phone_number: :phone_number }
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
if ENV['OPTIONAL_TARGET_SLACK']
|
31
|
+
require 'activity_notification/optional_targets/slack'
|
20
32
|
optional_targets = optional_targets.merge(
|
21
|
-
ActivityNotification::OptionalTarget::
|
33
|
+
ActivityNotification::OptionalTarget::Slack => {
|
34
|
+
webhook_url: ENV['OPTIONAL_TARGET_SLACK_WEBHOOK_URL'], target_username: :slack_username,
|
35
|
+
channel: ENV['OPTIONAL_TARGET_SLACK_CHANNEL'] || 'activity_notification',
|
36
|
+
username: 'ActivityNotification', icon_emoji: ":ghost:"
|
37
|
+
}
|
22
38
|
)
|
23
|
-
|
39
|
+
end
|
40
|
+
acts_as_notifiable :admins, targets: [Admin.first].compact,
|
41
|
+
group: :article, notifier: :user, notifiable_path: :article_notifiable_path,
|
42
|
+
tracked: { only: [:create] },
|
43
|
+
printable_name: ->(comment) { "comment \"#{comment.body}\"" },
|
44
|
+
dependent_notifications: :delete_all,
|
45
|
+
optional_targets: optional_targets
|
46
|
+
|
47
|
+
def article_notifiable_path
|
48
|
+
article_path(article)
|
49
|
+
end
|
50
|
+
|
51
|
+
def author?(user)
|
52
|
+
self.user == user
|
53
|
+
end
|
54
|
+
end
|
55
|
+
else
|
56
|
+
require 'mongoid'
|
57
|
+
class Comment
|
58
|
+
include Mongoid::Document
|
59
|
+
include Mongoid::Timestamps
|
60
|
+
include GlobalID::Identification
|
61
|
+
|
62
|
+
belongs_to :article
|
63
|
+
belongs_to :user
|
64
|
+
validates :article, presence: true
|
65
|
+
validates :user, presence: true
|
66
|
+
field :body, type: String
|
67
|
+
|
68
|
+
include ActivityNotification::Models
|
69
|
+
acts_as_notifiable :users,
|
70
|
+
targets: ->(comment, key) { ([comment.article.user] + comment.article.commented_users.to_a - [comment.user]).uniq },
|
71
|
+
group: :article, notifier: :user, email_allowed: true,
|
72
|
+
parameters: { 'test_default_param' => '1' },
|
73
|
+
notifiable_path: :article_notifiable_path,
|
74
|
+
printable_name: ->(comment) { "comment \"#{comment.body}\"" },
|
75
|
+
dependent_notifications: :update_group_and_delete_all
|
76
|
+
|
77
|
+
require 'custom_optional_targets/console_output'
|
78
|
+
optional_targets = { CustomOptionalTarget::ConsoleOutput => {} }
|
79
|
+
if ENV['OPTIONAL_TARGET_AMAZON_SNS']
|
80
|
+
require 'activity_notification/optional_targets/amazon_sns'
|
81
|
+
if ENV['OPTIONAL_TARGET_AMAZON_SNS_TOPIC_ARN']
|
82
|
+
optional_targets = optional_targets.merge(
|
83
|
+
ActivityNotification::OptionalTarget::AmazonSNS => { topic_arn: ENV['OPTIONAL_TARGET_AMAZON_SNS_TOPIC_ARN'] }
|
84
|
+
)
|
85
|
+
elsif ENV['OPTIONAL_TARGET_AMAZON_SNS_PHONE_NUMBER']
|
86
|
+
optional_targets = optional_targets.merge(
|
87
|
+
ActivityNotification::OptionalTarget::AmazonSNS => { phone_number: :phone_number }
|
88
|
+
)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
if ENV['OPTIONAL_TARGET_SLACK']
|
92
|
+
require 'activity_notification/optional_targets/slack'
|
24
93
|
optional_targets = optional_targets.merge(
|
25
|
-
ActivityNotification::OptionalTarget::
|
94
|
+
ActivityNotification::OptionalTarget::Slack => {
|
95
|
+
webhook_url: ENV['OPTIONAL_TARGET_SLACK_WEBHOOK_URL'], target_username: :slack_username,
|
96
|
+
channel: ENV['OPTIONAL_TARGET_SLACK_CHANNEL'] || 'activity_notification',
|
97
|
+
username: 'ActivityNotification', icon_emoji: ":ghost:"
|
98
|
+
}
|
26
99
|
)
|
27
100
|
end
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
channel: ENV['OPTIONAL_TARGET_SLACK_CHANNEL'] || 'activity_notification',
|
35
|
-
username: 'ActivityNotification', icon_emoji: ":ghost:"
|
36
|
-
}
|
37
|
-
)
|
38
|
-
end
|
39
|
-
acts_as_notifiable :admins, targets: Admin.all,
|
40
|
-
group: :article, notifier: :user, notifiable_path: :article_notifiable_path,
|
41
|
-
printable_name: ->(comment) { "comment \"#{comment.body}\"" }, dependent_notifications: :delete_all,
|
42
|
-
optional_targets: optional_targets
|
101
|
+
acts_as_notifiable :admins, targets: [Admin.first].compact,
|
102
|
+
group: :article, notifier: :user, notifiable_path: :article_notifiable_path,
|
103
|
+
tracked: { only: [:create] },
|
104
|
+
printable_name: ->(comment) { "comment \"#{comment.body}\"" },
|
105
|
+
dependent_notifications: :delete_all,
|
106
|
+
optional_targets: optional_targets
|
43
107
|
|
44
|
-
|
45
|
-
|
46
|
-
|
108
|
+
def article_notifiable_path
|
109
|
+
article_path(article)
|
110
|
+
end
|
47
111
|
|
48
|
-
|
49
|
-
|
112
|
+
def author?(user)
|
113
|
+
self.user == user
|
114
|
+
end
|
50
115
|
end
|
51
116
|
end
|