activity_notification 1.7.1 → 2.0.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 +5 -5
- data/.gitignore +3 -0
- data/.travis.yml +16 -2
- data/CHANGELOG.md +22 -2
- data/Gemfile +7 -0
- data/Procfile +2 -0
- data/README.md +366 -32
- data/Rakefile +19 -10
- data/activity_notification.gemspec +5 -3
- data/app/channels/activity_notification/notification_channel.rb +37 -0
- data/app/channels/activity_notification/notification_with_devise_channel.rb +51 -0
- data/app/controllers/activity_notification/notifications_controller.rb +1 -1
- data/app/controllers/activity_notification/subscriptions_controller.rb +1 -1
- data/app/jobs/activity_notification/notify_all_job.rb +16 -0
- data/app/jobs/activity_notification/notify_job.rb +17 -0
- data/app/jobs/activity_notification/notify_to_job.rb +16 -0
- data/app/views/activity_notification/notifications/default/_default_without_grouping.html.erb +1 -1
- data/app/views/activity_notification/notifications/default/index.html.erb +55 -2
- data/bin/_dynamodblocal +4 -0
- data/{scripts → bin}/bundle_update.sh +1 -0
- data/bin/deploy_on_heroku.sh +14 -0
- data/bin/install_dynamodblocal.sh +5 -0
- data/bin/start_dynamodblocal.sh +47 -0
- data/bin/stop_dynamodblocal.sh +34 -0
- data/gemfiles/Gemfile.rails-4.2 +1 -0
- data/gemfiles/Gemfile.rails-5.0 +2 -0
- data/gemfiles/Gemfile.rails-5.1 +1 -0
- data/gemfiles/Gemfile.rails-5.2 +1 -0
- data/gemfiles/Gemfile.rails-6.0.rc +21 -0
- data/lib/activity_notification.rb +1 -0
- data/lib/activity_notification/apis/notification_api.rb +289 -136
- data/lib/activity_notification/apis/subscription_api.rb +80 -53
- data/lib/activity_notification/common.rb +3 -3
- data/lib/activity_notification/config.rb +89 -33
- data/lib/activity_notification/controllers/common_controller.rb +19 -7
- data/lib/activity_notification/helpers/errors.rb +4 -0
- data/lib/activity_notification/helpers/view_helpers.rb +1 -1
- data/lib/activity_notification/models/concerns/notifiable.rb +61 -53
- data/lib/activity_notification/models/concerns/subscriber.rb +7 -6
- data/lib/activity_notification/models/concerns/target.rb +73 -28
- data/lib/activity_notification/optional_targets/base.rb +2 -2
- data/lib/activity_notification/orm/active_record/notification.rb +4 -23
- data/lib/activity_notification/orm/dynamoid.rb +495 -0
- data/lib/activity_notification/orm/dynamoid/extension.rb +184 -0
- data/lib/activity_notification/orm/dynamoid/notification.rb +189 -0
- data/lib/activity_notification/orm/dynamoid/subscription.rb +82 -0
- data/lib/activity_notification/orm/mongoid.rb +4 -1
- data/lib/activity_notification/orm/mongoid/notification.rb +8 -25
- data/lib/activity_notification/orm/mongoid/subscription.rb +1 -1
- data/lib/activity_notification/roles/acts_as_notifiable.rb +33 -5
- data/lib/activity_notification/roles/acts_as_target.rb +62 -9
- data/lib/activity_notification/version.rb +1 -1
- data/lib/generators/templates/activity_notification.rb +30 -7
- data/lib/tasks/activity_notification_tasks.rake +14 -4
- data/spec/channels/notification_channel_shared_examples.rb +59 -0
- data/spec/channels/notification_channel_spec.rb +50 -0
- data/spec/channels/notification_with_devise_channel_spec.rb +99 -0
- data/spec/concerns/apis/notification_api_spec.rb +2 -2
- data/spec/concerns/apis/subscription_api_spec.rb +2 -2
- data/spec/concerns/models/notifiable_spec.rb +72 -7
- data/spec/concerns/models/subscriber_spec.rb +53 -49
- data/spec/concerns/models/target_spec.rb +135 -13
- data/spec/config_spec.rb +41 -1
- data/spec/controllers/notifications_controller_shared_examples.rb +7 -3
- data/spec/controllers/subscriptions_controller_shared_examples.rb +7 -3
- data/spec/helpers/view_helpers_spec.rb +12 -10
- data/spec/models/dummy/dummy_group_spec.rb +4 -0
- data/spec/models/dummy/dummy_notifiable_spec.rb +4 -0
- data/spec/models/dummy/dummy_notifier_spec.rb +4 -0
- data/spec/models/dummy/dummy_subscriber_spec.rb +3 -0
- data/spec/models/dummy/dummy_target_spec.rb +4 -0
- data/spec/models/notification_spec.rb +164 -45
- data/spec/models/subscription_spec.rb +69 -14
- data/spec/orm/dynamoid_spec.rb +115 -0
- data/spec/rails_app/app/assets/javascripts/application.js +2 -1
- data/spec/rails_app/app/assets/javascripts/cable.js +12 -0
- data/spec/rails_app/app/controllers/comments_controller.rb +3 -4
- data/spec/rails_app/app/models/admin.rb +6 -4
- data/spec/rails_app/app/models/article.rb +2 -2
- data/spec/rails_app/app/models/comment.rb +17 -5
- data/spec/rails_app/app/models/user.rb +5 -3
- data/spec/rails_app/app/views/activity_notification/notifications/users/overridden/custom/_test.html.erb +1 -0
- data/spec/rails_app/config/application.rb +6 -1
- data/spec/rails_app/config/cable.yml +8 -0
- data/spec/rails_app/config/dynamoid.rb +5 -0
- data/spec/rails_app/config/environment.rb +4 -1
- data/spec/rails_app/config/environments/production.rb +1 -1
- data/spec/rails_app/config/initializers/activity_notification.rb +30 -7
- data/spec/rails_app/config/locales/activity_notification.en.yml +2 -0
- data/spec/rails_app/db/seeds.rb +21 -5
- data/spec/rails_app/lib/mailer_previews/mailer_preview.rb +12 -4
- data/spec/roles/acts_as_notifiable_spec.rb +2 -2
- data/spec/roles/acts_as_target_spec.rb +1 -1
- data/spec/spec_helper.rb +15 -8
- metadata +67 -20
- data/spec/rails_app/app/models/.keep +0 -0
- data/spec/rails_app/app/views/activity_notification/notifications/users/overriden/custom/_test.html.erb +0 -1
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# To run as single test for debugging
|
|
2
|
+
# require Rails.root.join('../../spec/concerns/apis/subscription_api_spec.rb').to_s
|
|
3
|
+
|
|
1
4
|
describe ActivityNotification::Subscription, type: :model do
|
|
2
5
|
|
|
3
6
|
it_behaves_like :subscription_api
|
|
@@ -92,16 +95,22 @@ describe ActivityNotification::Subscription, type: :model do
|
|
|
92
95
|
|
|
93
96
|
context 'with custom_filter options' do
|
|
94
97
|
it "works with filtered_by_options scope" do
|
|
95
|
-
if ActivityNotification.config.orm == :active_record
|
|
96
|
-
subscriptions = ActivityNotification::Subscription.filtered_by_options({ custom_filter: ["subscriptions.key = ?", @key_1] })
|
|
97
|
-
expect(subscriptions.size).to eq(1)
|
|
98
|
-
expect(subscriptions.first).to eq(@subscription_1)
|
|
99
|
-
end
|
|
100
|
-
|
|
101
98
|
subscriptions = ActivityNotification::Subscription.filtered_by_options({ custom_filter: { key: @key_2 } })
|
|
102
99
|
expect(subscriptions.size).to eq(1)
|
|
103
100
|
expect(subscriptions.first).to eq(@subscription_2)
|
|
104
101
|
end
|
|
102
|
+
|
|
103
|
+
it "works with filtered_by_options scope with filter depending on ORM" do
|
|
104
|
+
options =
|
|
105
|
+
case ActivityNotification.config.orm
|
|
106
|
+
when :active_record then { custom_filter: ["subscriptions.key = ?", @key_1] }
|
|
107
|
+
when :mongoid then { custom_filter: { key: {'$eq': @key_1} } }
|
|
108
|
+
when :dynamoid then { custom_filter: {'key.begins_with': @key_1} }
|
|
109
|
+
end
|
|
110
|
+
subscriptions = ActivityNotification::Subscription.filtered_by_options(options)
|
|
111
|
+
expect(subscriptions.size).to eq(1)
|
|
112
|
+
expect(subscriptions.first).to eq(@subscription_1)
|
|
113
|
+
end
|
|
105
114
|
end
|
|
106
115
|
|
|
107
116
|
context 'with no options' do
|
|
@@ -116,21 +125,67 @@ describe ActivityNotification::Subscription, type: :model do
|
|
|
116
125
|
context "to make order by created_at" do
|
|
117
126
|
before do
|
|
118
127
|
ActivityNotification::Subscription.delete_all
|
|
119
|
-
@
|
|
120
|
-
@
|
|
121
|
-
@
|
|
122
|
-
@
|
|
128
|
+
@target = create(:confirmed_user)
|
|
129
|
+
@subscription_1 = create(:subscription, target: @target, key: 'key.1')
|
|
130
|
+
@subscription_2 = create(:subscription, target: @target, key: 'key.2', created_at: @subscription_1.created_at + 10.second)
|
|
131
|
+
@subscription_3 = create(:subscription, target: @target, key: 'key.3', created_at: @subscription_1.created_at + 20.second)
|
|
132
|
+
@subscription_4 = create(:subscription, target: @target, key: 'key.4', created_at: @subscription_1.created_at + 30.second)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
unless ActivityNotification.config.orm == :dynamoid
|
|
136
|
+
context "using ORM other than dynamoid, you can directly call latest/earliest order method from class objects" do
|
|
137
|
+
|
|
138
|
+
it "works with latest_order scope" do
|
|
139
|
+
subscriptions = ActivityNotification::Subscription.latest_order
|
|
140
|
+
expect(subscriptions.size).to eq(4)
|
|
141
|
+
expect(subscriptions.first).to eq(@subscription_4)
|
|
142
|
+
expect(subscriptions.last).to eq(@subscription_1)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
it "works with earliest_order scope" do
|
|
146
|
+
subscriptions = ActivityNotification::Subscription.earliest_order
|
|
147
|
+
expect(subscriptions.size).to eq(4)
|
|
148
|
+
expect(subscriptions.first).to eq(@subscription_1)
|
|
149
|
+
expect(subscriptions.last).to eq(@subscription_4)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
end
|
|
153
|
+
else
|
|
154
|
+
context "using dynamoid, you can call latest/earliest order method only with query using partition key of Global Secondary Index" do
|
|
155
|
+
|
|
156
|
+
it "works with latest_order scope" do
|
|
157
|
+
subscriptions = ActivityNotification::Subscription.filtered_by_target(@target).latest_order
|
|
158
|
+
expect(subscriptions.size).to eq(4)
|
|
159
|
+
expect(subscriptions.first).to eq(@subscription_4)
|
|
160
|
+
expect(subscriptions.last).to eq(@subscription_1)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
it "works with earliest_order scope" do
|
|
164
|
+
subscriptions = ActivityNotification::Subscription.filtered_by_target(@target).earliest_order
|
|
165
|
+
expect(subscriptions.size).to eq(4)
|
|
166
|
+
expect(subscriptions.first).to eq(@subscription_1)
|
|
167
|
+
expect(subscriptions.last).to eq(@subscription_4)
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
end
|
|
123
171
|
end
|
|
124
172
|
|
|
125
|
-
it "works with latest_order scope" do
|
|
126
|
-
subscriptions = ActivityNotification::Subscription.latest_order
|
|
173
|
+
it "works with latest_order! scope" do
|
|
174
|
+
subscriptions = ActivityNotification::Subscription.latest_order!
|
|
127
175
|
expect(subscriptions.size).to eq(4)
|
|
128
176
|
expect(subscriptions.first).to eq(@subscription_4)
|
|
129
177
|
expect(subscriptions.last).to eq(@subscription_1)
|
|
130
178
|
end
|
|
131
179
|
|
|
132
|
-
it "works with
|
|
133
|
-
subscriptions = ActivityNotification::Subscription.
|
|
180
|
+
it "works with latest_order!(reverse=true) scope" do
|
|
181
|
+
subscriptions = ActivityNotification::Subscription.latest_order!(true)
|
|
182
|
+
expect(subscriptions.size).to eq(4)
|
|
183
|
+
expect(subscriptions.first).to eq(@subscription_1)
|
|
184
|
+
expect(subscriptions.last).to eq(@subscription_4)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
it "works with earliest_order! scope" do
|
|
188
|
+
subscriptions = ActivityNotification::Subscription.earliest_order!
|
|
134
189
|
expect(subscriptions.size).to eq(4)
|
|
135
190
|
expect(subscriptions.first).to eq(@subscription_1)
|
|
136
191
|
expect(subscriptions.last).to eq(@subscription_4)
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
if ActivityNotification.config.orm == :dynamoid
|
|
2
|
+
describe Dynamoid::Criteria::None do
|
|
3
|
+
let(:none) { ActivityNotification::Notification.none }
|
|
4
|
+
|
|
5
|
+
it "is a Dynamoid::Criteria::None" do
|
|
6
|
+
expect(none).to be_a(Dynamoid::Criteria::None)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
context "== operator" do
|
|
10
|
+
it "returns true against other None object" do
|
|
11
|
+
expect(none).to eq(ActivityNotification::Notification.none)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "returns false against other objects" do
|
|
15
|
+
expect(none).not_to eq(1)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
context "records" do
|
|
20
|
+
it "returns empty array" do
|
|
21
|
+
expect(none.records).to eq([])
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
context "all" do
|
|
26
|
+
it "returns empty array" do
|
|
27
|
+
expect(none.all).to eq([])
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context "count" do
|
|
32
|
+
it "returns 0" do
|
|
33
|
+
expect(none.count).to eq(0)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
context "delete_all" do
|
|
38
|
+
it "does nothing" do
|
|
39
|
+
expect(none.delete_all).to be_nil
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
context "empty?" do
|
|
44
|
+
it "returns true" do
|
|
45
|
+
expect(none.empty?).to be_truthy
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe Dynamoid::Criteria::Chain do
|
|
51
|
+
let(:chain) { ActivityNotification::Notification.scan_index_forward(true) }
|
|
52
|
+
|
|
53
|
+
before do
|
|
54
|
+
ActivityNotification::Notification.delete_all
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "is a Dynamoid::Criteria::None" do
|
|
58
|
+
expect(chain).to be_a(Dynamoid::Criteria::Chain)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context "none" do
|
|
62
|
+
it "returns Dynamoid::Criteria::None" do
|
|
63
|
+
expect(chain.none).to be_a(Dynamoid::Criteria::None)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
context "limit" do
|
|
68
|
+
before do
|
|
69
|
+
create(:notification)
|
|
70
|
+
create(:notification)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "returns limited records by record_limit" do
|
|
74
|
+
expect(chain.count).to eq(2)
|
|
75
|
+
expect(chain.limit(1).count).to eq(1)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
context "exists?" do
|
|
80
|
+
it "returns false when the record does not exist" do
|
|
81
|
+
expect(chain.exists?).to be_falsy
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "returns true when the record exists" do
|
|
85
|
+
create(:notification)
|
|
86
|
+
expect(chain.exists?).to be_truthy
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
context "size" do
|
|
91
|
+
it "returns same value as count" do
|
|
92
|
+
expect(chain.count).to eq(0)
|
|
93
|
+
expect(chain.size).to eq(0)
|
|
94
|
+
create(:notification)
|
|
95
|
+
expect(chain.count).to eq(1)
|
|
96
|
+
expect(chain.size).to eq(1)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
context "update_all" do
|
|
101
|
+
before do
|
|
102
|
+
create(:notification)
|
|
103
|
+
create(:notification)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it "updates all records" do
|
|
107
|
+
expect(ActivityNotification::Notification.where(key: "default.default").count).to eq(2)
|
|
108
|
+
expect(ActivityNotification::Notification.where(key: "updated.all").count).to eq(0)
|
|
109
|
+
chain.update_all(key: "updated.all")
|
|
110
|
+
expect(ActivityNotification::Notification.where(key: "default.default").count).to eq(0)
|
|
111
|
+
expect(ActivityNotification::Notification.where(key: "updated.all").count).to eq(2)
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Action Cable provides the framework to deal with WebSockets in Rails.
|
|
2
|
+
// You can generate new channels where WebSocket features live using the `rails generate channel` command.
|
|
3
|
+
//
|
|
4
|
+
//= require action_cable
|
|
5
|
+
//= require_self
|
|
6
|
+
|
|
7
|
+
(function() {
|
|
8
|
+
this.App || (this.App = {});
|
|
9
|
+
|
|
10
|
+
App.cable = ActionCable.createConsumer();
|
|
11
|
+
|
|
12
|
+
}).call(this);
|
|
@@ -7,10 +7,9 @@ class CommentsController < ApplicationController
|
|
|
7
7
|
@comment.user = current_user
|
|
8
8
|
|
|
9
9
|
if @comment.save
|
|
10
|
-
@comment.
|
|
11
|
-
# @comment.
|
|
12
|
-
@comment.
|
|
13
|
-
# @comment.notify :users, key: 'comment.create.now'
|
|
10
|
+
@comment.notify_now :users, key: 'comment.create', parameters: { notifier_name: @comment.user.printable_notifier_name, article_title: @comment.article.title }
|
|
11
|
+
# @comment.notify_later :users, key: 'comment.create', parameters: { notifier_name: @comment.user.printable_notifier_name, article_title: @comment.article.title }
|
|
12
|
+
# @comment.notify :users, key: 'comment.create', notify_later: true, parameters: { notifier_name: @comment.user.printable_notifier_name, article_title: @comment.article.title }
|
|
14
13
|
redirect_to @comment.article, notice: 'Comment was successfully created.'
|
|
15
14
|
else
|
|
16
15
|
redirect_to @comment.article
|
|
@@ -7,8 +7,9 @@ unless ENV['AN_TEST_DB'] == 'mongodb'
|
|
|
7
7
|
subscription_allowed: true,
|
|
8
8
|
devise_resource: :user,
|
|
9
9
|
current_devise_target: ->(current_user) { current_user.admin },
|
|
10
|
-
printable_name: ->(admin) { "admin (#{admin.user.name})" }
|
|
11
|
-
|
|
10
|
+
printable_name: ->(admin) { "admin (#{admin.user.name})" },
|
|
11
|
+
action_cable_allowed: true, action_cable_with_devise: true
|
|
12
|
+
end
|
|
12
13
|
else
|
|
13
14
|
require 'mongoid'
|
|
14
15
|
class Admin
|
|
@@ -27,6 +28,7 @@ else
|
|
|
27
28
|
subscription_allowed: true,
|
|
28
29
|
devise_resource: :user,
|
|
29
30
|
current_devise_target: ->(current_user) { current_user.admin },
|
|
30
|
-
printable_name: ->(admin) { "admin (#{admin.user.name})" }
|
|
31
|
-
|
|
31
|
+
printable_name: ->(admin) { "admin (#{admin.user.name})" },
|
|
32
|
+
action_cable_allowed: true, action_cable_with_devise: true
|
|
33
|
+
end
|
|
32
34
|
end
|
|
@@ -7,7 +7,7 @@ unless ENV['AN_TEST_DB'] == 'mongodb'
|
|
|
7
7
|
|
|
8
8
|
acts_as_notifiable :users,
|
|
9
9
|
targets: ->(article) { User.all.to_a - [article.user] },
|
|
10
|
-
notifier: :user, email_allowed: true,
|
|
10
|
+
notifier: :user, email_allowed: true, action_cable_allowed: true,
|
|
11
11
|
printable_name: ->(article) { "new article \"#{article.title}\"" },
|
|
12
12
|
dependent_notifications: :delete_all
|
|
13
13
|
acts_as_notification_group printable_name: ->(article) { "article \"#{article.title}\"" }
|
|
@@ -33,7 +33,7 @@ else
|
|
|
33
33
|
include ActivityNotification::Models
|
|
34
34
|
acts_as_notifiable :users,
|
|
35
35
|
targets: ->(article) { User.all.to_a - [article.user] },
|
|
36
|
-
notifier: :user, email_allowed: true,
|
|
36
|
+
notifier: :user, email_allowed: true, action_cable_allowed: true,
|
|
37
37
|
printable_name: ->(article) { "new article \"#{article.title}\"" },
|
|
38
38
|
dependent_notifications: :delete_all
|
|
39
39
|
acts_as_notification_group printable_name: ->(article) { "article \"#{article.title}\"" }
|
|
@@ -8,13 +8,14 @@ unless ENV['AN_TEST_DB'] == 'mongodb'
|
|
|
8
8
|
acts_as_notifiable :users,
|
|
9
9
|
targets: ->(comment, key) { ([comment.article.user] + comment.article.commented_users.to_a - [comment.user]).uniq },
|
|
10
10
|
group: :article, notifier: :user, email_allowed: true,
|
|
11
|
+
action_cable_allowed: true,
|
|
11
12
|
parameters: { 'test_default_param' => '1' },
|
|
12
13
|
notifiable_path: :article_notifiable_path,
|
|
13
14
|
printable_name: ->(comment) { "comment \"#{comment.body}\"" },
|
|
14
15
|
dependent_notifications: :update_group_and_delete_all
|
|
15
16
|
|
|
16
17
|
require 'custom_optional_targets/console_output'
|
|
17
|
-
optional_targets = { CustomOptionalTarget::ConsoleOutput => {} }
|
|
18
|
+
# optional_targets = { CustomOptionalTarget::ConsoleOutput => {} }
|
|
18
19
|
if ENV['OPTIONAL_TARGET_AMAZON_SNS']
|
|
19
20
|
require 'activity_notification/optional_targets/amazon_sns'
|
|
20
21
|
if ENV['OPTIONAL_TARGET_AMAZON_SNS_TOPIC_ARN']
|
|
@@ -37,13 +38,18 @@ unless ENV['AN_TEST_DB'] == 'mongodb'
|
|
|
37
38
|
}
|
|
38
39
|
)
|
|
39
40
|
end
|
|
40
|
-
acts_as_notifiable :admins,
|
|
41
|
+
acts_as_notifiable :admins,
|
|
42
|
+
targets: Admin.all.to_a,
|
|
41
43
|
group: :article, notifier: :user, notifiable_path: :article_notifiable_path,
|
|
42
|
-
|
|
44
|
+
action_cable_allowed: true,
|
|
45
|
+
tracked: { only: [:create], action_cable_rendering: { fallback: :default } },
|
|
43
46
|
printable_name: ->(comment) { "comment \"#{comment.body}\"" },
|
|
44
47
|
dependent_notifications: :delete_all,
|
|
45
48
|
optional_targets: optional_targets
|
|
46
49
|
|
|
50
|
+
# For testing
|
|
51
|
+
acts_as_group
|
|
52
|
+
|
|
47
53
|
def article_notifiable_path
|
|
48
54
|
article_path(article)
|
|
49
55
|
end
|
|
@@ -69,6 +75,7 @@ else
|
|
|
69
75
|
acts_as_notifiable :users,
|
|
70
76
|
targets: ->(comment, key) { ([comment.article.user] + comment.article.commented_users.to_a - [comment.user]).uniq },
|
|
71
77
|
group: :article, notifier: :user, email_allowed: true,
|
|
78
|
+
action_cable_allowed: true,
|
|
72
79
|
parameters: { 'test_default_param' => '1' },
|
|
73
80
|
notifiable_path: :article_notifiable_path,
|
|
74
81
|
printable_name: ->(comment) { "comment \"#{comment.body}\"" },
|
|
@@ -98,13 +105,18 @@ else
|
|
|
98
105
|
}
|
|
99
106
|
)
|
|
100
107
|
end
|
|
101
|
-
acts_as_notifiable :admins,
|
|
108
|
+
acts_as_notifiable :admins,
|
|
109
|
+
targets: Admin.all.to_a,
|
|
102
110
|
group: :article, notifier: :user, notifiable_path: :article_notifiable_path,
|
|
103
|
-
|
|
111
|
+
action_cable_allowed: true,
|
|
112
|
+
tracked: { only: [:create], action_cable_rendering: { fallback: :default } },
|
|
104
113
|
printable_name: ->(comment) { "comment \"#{comment.body}\"" },
|
|
105
114
|
dependent_notifications: :delete_all,
|
|
106
115
|
optional_targets: optional_targets
|
|
107
116
|
|
|
117
|
+
# For testing
|
|
118
|
+
acts_as_group
|
|
119
|
+
|
|
108
120
|
def article_notifiable_path
|
|
109
121
|
article_path(article)
|
|
110
122
|
end
|
|
@@ -6,7 +6,8 @@ unless ENV['AN_TEST_DB'] == 'mongodb'
|
|
|
6
6
|
has_one :admin, dependent: :destroy
|
|
7
7
|
|
|
8
8
|
acts_as_target email: :email, email_allowed: :confirmed_at, batch_email_allowed: :confirmed_at,
|
|
9
|
-
subscription_allowed: true, printable_name: :name
|
|
9
|
+
subscription_allowed: true, printable_name: :name,
|
|
10
|
+
action_cable_allowed: true, action_cable_with_devise: true
|
|
10
11
|
acts_as_notifier printable_name: :name
|
|
11
12
|
|
|
12
13
|
def admin?
|
|
@@ -37,8 +38,9 @@ else
|
|
|
37
38
|
|
|
38
39
|
include ActivityNotification::Models
|
|
39
40
|
acts_as_target email: :email, email_allowed: :confirmed_at, batch_email_allowed: :confirmed_at,
|
|
40
|
-
subscription_allowed: true, printable_name: :name
|
|
41
|
-
|
|
41
|
+
subscription_allowed: true, printable_name: :name,
|
|
42
|
+
action_cable_allowed: true, action_cable_with_devise: true
|
|
43
|
+
acts_as_notifier printable_name: :name
|
|
42
44
|
|
|
43
45
|
def admin?
|
|
44
46
|
admin.present?
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Overridden custom template root for user target: <%= notification.id %>
|
|
@@ -7,6 +7,10 @@ if ENV['AN_ORM'] == 'mongoid'
|
|
|
7
7
|
if Rails.env != 'test'
|
|
8
8
|
Mongoid.load!(File.expand_path("config/mongoid.yml"), :development)
|
|
9
9
|
end
|
|
10
|
+
elsif ENV['AN_ORM'] == 'dynamoid'
|
|
11
|
+
require 'dynamoid'
|
|
12
|
+
require 'rails'
|
|
13
|
+
require File.expand_path('../dynamoid', __FILE__)
|
|
10
14
|
end
|
|
11
15
|
|
|
12
16
|
# Pick the frameworks you want:
|
|
@@ -17,7 +21,7 @@ require "action_controller/railtie"
|
|
|
17
21
|
require "action_mailer/railtie"
|
|
18
22
|
require "action_view/railtie"
|
|
19
23
|
require "sprockets/railtie"
|
|
20
|
-
|
|
24
|
+
require 'action_cable/engine' if Rails::VERSION::MAJOR >= 5
|
|
21
25
|
|
|
22
26
|
Bundler.require(*Rails.groups)
|
|
23
27
|
require "activity_notification"
|
|
@@ -34,3 +38,4 @@ module Dummy
|
|
|
34
38
|
end
|
|
35
39
|
end
|
|
36
40
|
|
|
41
|
+
puts "ActivityNotification test parameters: AN_ORM=#{ENV['AN_ORM'] || 'active_record(default)'} AN_TEST_DB=#{ENV['AN_TEST_DB'] || 'sqlite(default)'}"
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
# Load the Rails application.
|
|
2
2
|
require File.expand_path('../application', __FILE__)
|
|
3
3
|
|
|
4
|
+
# Demo application uses Devise
|
|
5
|
+
require 'devise'
|
|
6
|
+
|
|
4
7
|
# Initialize the Rails application.
|
|
5
8
|
Rails.application.initialize!
|
|
6
9
|
|
|
@@ -15,7 +18,7 @@ def silent_stdout(&block)
|
|
|
15
18
|
end
|
|
16
19
|
|
|
17
20
|
# Load database schema
|
|
18
|
-
if Rails.env.test? && ENV['AN_TEST_DB']
|
|
21
|
+
if Rails.env.test? && ['mongodb', 'dynamodb'].exclude?(ENV['AN_TEST_DB'])
|
|
19
22
|
silent_stdout do
|
|
20
23
|
load "#{Rails.root}/db/schema.rb"
|
|
21
24
|
end
|