activity_notification 2.0.0 → 2.1.4

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.
Files changed (202) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +22 -0
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +17 -0
  4. data/.github/pull_request_template.md +13 -0
  5. data/.gitignore +10 -3
  6. data/.travis.yml +6 -5
  7. data/CHANGELOG.md +60 -0
  8. data/Gemfile +8 -3
  9. data/Procfile +1 -1
  10. data/README.md +153 -1510
  11. data/activity_notification.gemspec +4 -1
  12. data/app/channels/activity_notification/notification_api_channel.rb +12 -0
  13. data/app/channels/activity_notification/notification_api_with_devise_channel.rb +46 -0
  14. data/app/channels/activity_notification/notification_channel.rb +2 -2
  15. data/app/channels/activity_notification/notification_with_devise_channel.rb +2 -2
  16. data/app/controllers/activity_notification/apidocs_controller.rb +75 -0
  17. data/app/controllers/activity_notification/notifications_api_controller.rb +143 -0
  18. data/app/controllers/activity_notification/notifications_api_with_devise_controller.rb +7 -0
  19. data/app/controllers/activity_notification/notifications_controller.rb +79 -53
  20. data/app/controllers/activity_notification/subscriptions_api_controller.rb +197 -0
  21. data/app/controllers/activity_notification/subscriptions_api_with_devise_controller.rb +7 -0
  22. data/app/controllers/activity_notification/subscriptions_controller.rb +78 -69
  23. data/app/views/activity_notification/notifications/default/_default.html.erb +18 -18
  24. data/app/views/activity_notification/notifications/default/_default_without_grouping.html.erb +14 -14
  25. data/app/views/activity_notification/notifications/default/index.html.erb +6 -6
  26. data/app/views/activity_notification/optional_targets/default/action_cable_channel/_default.html.erb +176 -0
  27. data/app/views/activity_notification/subscriptions/default/_form.html.erb +1 -1
  28. data/app/views/activity_notification/subscriptions/default/_notification_keys.html.erb +3 -31
  29. data/app/views/activity_notification/subscriptions/default/_subscription.html.erb +7 -7
  30. data/app/views/activity_notification/subscriptions/default/index.html.erb +11 -7
  31. data/bin/deploy_on_heroku.sh +3 -1
  32. data/docs/CODE_OF_CONDUCT.md +76 -0
  33. data/docs/CONTRIBUTING.md +36 -0
  34. data/docs/Functions.md +1130 -0
  35. data/docs/Setup.md +801 -0
  36. data/docs/Testing.md +148 -0
  37. data/gemfiles/Gemfile.rails-4.2 +5 -1
  38. data/gemfiles/Gemfile.rails-5.0 +6 -1
  39. data/gemfiles/Gemfile.rails-5.1 +6 -1
  40. data/gemfiles/Gemfile.rails-5.2 +6 -1
  41. data/gemfiles/{Gemfile.rails-6.0.rc → Gemfile.rails-6.0} +6 -5
  42. data/lib/activity_notification.rb +13 -0
  43. data/lib/activity_notification/apis/notification_api.rb +37 -93
  44. data/lib/activity_notification/apis/subscription_api.rb +20 -8
  45. data/lib/activity_notification/apis/swagger.rb +6 -0
  46. data/lib/activity_notification/common.rb +4 -1
  47. data/lib/activity_notification/config.rb +41 -21
  48. data/lib/activity_notification/controllers/common_api_controller.rb +30 -0
  49. data/lib/activity_notification/controllers/common_controller.rb +45 -21
  50. data/lib/activity_notification/controllers/concerns/swagger/error_responses.rb +55 -0
  51. data/lib/activity_notification/controllers/concerns/swagger/notifications_api.rb +273 -0
  52. data/lib/activity_notification/controllers/concerns/swagger/notifications_parameters.rb +92 -0
  53. data/lib/activity_notification/controllers/concerns/swagger/subscriptions_api.rb +405 -0
  54. data/lib/activity_notification/controllers/concerns/swagger/subscriptions_parameters.rb +50 -0
  55. data/lib/activity_notification/controllers/devise_authentication_controller.rb +7 -6
  56. data/lib/activity_notification/gem_version.rb +14 -0
  57. data/lib/activity_notification/helpers/errors.rb +2 -0
  58. data/lib/activity_notification/helpers/view_helpers.rb +4 -0
  59. data/lib/activity_notification/mailers/helpers.rb +17 -10
  60. data/lib/activity_notification/models/concerns/notifiable.rb +31 -15
  61. data/lib/activity_notification/models/concerns/subscriber.rb +12 -1
  62. data/lib/activity_notification/models/concerns/swagger/error_schema.rb +36 -0
  63. data/lib/activity_notification/models/concerns/swagger/notification_schema.rb +209 -0
  64. data/lib/activity_notification/models/concerns/swagger/subscription_schema.rb +162 -0
  65. data/lib/activity_notification/models/concerns/target.rb +36 -10
  66. data/lib/activity_notification/models/notification.rb +1 -0
  67. data/lib/activity_notification/models/subscription.rb +1 -0
  68. data/lib/activity_notification/optional_targets/action_cable_api_channel.rb +69 -0
  69. data/lib/activity_notification/optional_targets/action_cable_channel.rb +68 -0
  70. data/lib/activity_notification/optional_targets/base.rb +7 -13
  71. data/lib/activity_notification/orm/active_record/notification.rb +17 -1
  72. data/lib/activity_notification/orm/active_record/subscription.rb +1 -1
  73. data/lib/activity_notification/orm/dynamoid.rb +38 -3
  74. data/lib/activity_notification/orm/dynamoid/extension.rb +79 -1
  75. data/lib/activity_notification/orm/dynamoid/notification.rb +49 -14
  76. data/lib/activity_notification/orm/dynamoid/subscription.rb +2 -2
  77. data/lib/activity_notification/orm/mongoid.rb +32 -3
  78. data/lib/activity_notification/orm/mongoid/notification.rb +24 -6
  79. data/lib/activity_notification/orm/mongoid/subscription.rb +1 -1
  80. data/lib/activity_notification/rails/routes.rb +132 -48
  81. data/lib/activity_notification/renderable.rb +13 -2
  82. data/lib/activity_notification/roles/acts_as_notifiable.rb +39 -20
  83. data/lib/activity_notification/version.rb +1 -1
  84. data/lib/generators/activity_notification/controllers_generator.rb +2 -1
  85. data/lib/generators/templates/activity_notification.rb +8 -0
  86. data/lib/generators/templates/controllers/notifications_api_controller.rb +31 -0
  87. data/lib/generators/templates/controllers/notifications_api_with_devise_controller.rb +31 -0
  88. data/lib/generators/templates/controllers/notifications_controller.rb +1 -37
  89. data/lib/generators/templates/controllers/notifications_with_devise_controller.rb +1 -45
  90. data/lib/generators/templates/controllers/subscriptions_api_controller.rb +61 -0
  91. data/lib/generators/templates/controllers/subscriptions_api_with_devise_controller.rb +61 -0
  92. data/lib/generators/templates/controllers/subscriptions_controller.rb +14 -37
  93. data/lib/generators/templates/controllers/subscriptions_with_devise_controller.rb +14 -45
  94. data/lib/generators/templates/models/README +8 -4
  95. data/lib/generators/templates/models/notification.rb +1 -1
  96. data/lib/generators/templates/models/subscription.rb +1 -1
  97. data/package.json +8 -0
  98. data/spec/channels/notification_api_channel_shared_examples.rb +59 -0
  99. data/spec/channels/notification_api_channel_spec.rb +51 -0
  100. data/spec/channels/notification_api_with_devise_channel_spec.rb +78 -0
  101. data/spec/concerns/apis/notification_api_spec.rb +38 -3
  102. data/spec/concerns/models/notifiable_spec.rb +82 -18
  103. data/spec/concerns/models/subscriber_spec.rb +13 -16
  104. data/spec/concerns/models/target_spec.rb +32 -0
  105. data/spec/concerns/renderable_spec.rb +2 -2
  106. data/spec/config_spec.rb +26 -15
  107. data/spec/controllers/controller_spec_utility.rb +136 -0
  108. data/spec/controllers/notifications_api_controller_shared_examples.rb +506 -0
  109. data/spec/controllers/notifications_api_controller_spec.rb +19 -0
  110. data/spec/controllers/notifications_api_with_devise_controller_spec.rb +60 -0
  111. data/spec/controllers/notifications_controller_shared_examples.rb +54 -79
  112. data/spec/controllers/notifications_controller_spec.rb +1 -2
  113. data/spec/controllers/notifications_with_devise_controller_spec.rb +3 -12
  114. data/spec/controllers/subscriptions_api_controller_shared_examples.rb +750 -0
  115. data/spec/controllers/subscriptions_api_controller_spec.rb +19 -0
  116. data/spec/controllers/subscriptions_api_with_devise_controller_spec.rb +60 -0
  117. data/spec/controllers/subscriptions_controller_shared_examples.rb +94 -121
  118. data/spec/controllers/subscriptions_controller_spec.rb +1 -2
  119. data/spec/controllers/subscriptions_with_devise_controller_spec.rb +3 -12
  120. data/spec/helpers/view_helpers_spec.rb +4 -11
  121. data/spec/mailers/mailer_spec.rb +41 -0
  122. data/spec/models/notification_spec.rb +17 -0
  123. data/spec/models/subscription_spec.rb +8 -13
  124. data/spec/optional_targets/action_cable_api_channel_spec.rb +37 -0
  125. data/spec/optional_targets/action_cable_channel_spec.rb +44 -0
  126. data/spec/optional_targets/amazon_sns_spec.rb +0 -2
  127. data/spec/optional_targets/slack_spec.rb +0 -2
  128. data/spec/rails_app/Rakefile +9 -0
  129. data/spec/rails_app/app/assets/config/manifest.js +3 -0
  130. data/spec/rails_app/app/assets/images/.keep +0 -0
  131. data/spec/rails_app/app/controllers/admins_controller.rb +21 -0
  132. data/spec/rails_app/app/controllers/application_controller.rb +1 -1
  133. data/spec/rails_app/app/controllers/articles_controller.rb +6 -3
  134. data/spec/rails_app/app/controllers/spa_controller.rb +7 -0
  135. data/spec/rails_app/app/controllers/users/notifications_controller.rb +0 -65
  136. data/spec/rails_app/app/controllers/users/notifications_with_devise_controller.rb +0 -73
  137. data/spec/rails_app/app/controllers/users/subscriptions_controller.rb +0 -77
  138. data/spec/rails_app/app/controllers/users/subscriptions_with_devise_controller.rb +0 -85
  139. data/spec/rails_app/app/controllers/users_controller.rb +26 -0
  140. data/spec/rails_app/app/javascript/App.vue +40 -0
  141. data/spec/rails_app/app/javascript/components/DeviseTokenAuth.vue +82 -0
  142. data/spec/rails_app/app/javascript/components/Top.vue +98 -0
  143. data/spec/rails_app/app/javascript/components/notifications/Index.vue +200 -0
  144. data/spec/rails_app/app/javascript/components/notifications/Notification.vue +133 -0
  145. data/spec/rails_app/app/javascript/components/notifications/NotificationContent.vue +122 -0
  146. data/spec/rails_app/app/javascript/components/subscriptions/Index.vue +279 -0
  147. data/spec/rails_app/app/javascript/components/subscriptions/NewSubscription.vue +112 -0
  148. data/spec/rails_app/app/javascript/components/subscriptions/NotificationKey.vue +141 -0
  149. data/spec/rails_app/app/javascript/components/subscriptions/Subscription.vue +226 -0
  150. data/spec/rails_app/app/javascript/config/development.js +5 -0
  151. data/spec/rails_app/app/javascript/config/environment.js +7 -0
  152. data/spec/rails_app/app/javascript/config/production.js +5 -0
  153. data/spec/rails_app/app/javascript/config/test.js +5 -0
  154. data/spec/rails_app/app/javascript/packs/application.js +18 -0
  155. data/spec/rails_app/app/javascript/packs/spa.js +14 -0
  156. data/spec/rails_app/app/javascript/router/index.js +73 -0
  157. data/spec/rails_app/app/javascript/store/index.js +37 -0
  158. data/spec/rails_app/app/models/admin.rb +16 -15
  159. data/spec/rails_app/app/models/article.rb +26 -21
  160. data/spec/rails_app/app/models/comment.rb +24 -71
  161. data/spec/rails_app/app/models/dummy/dummy_group.rb +8 -0
  162. data/spec/rails_app/app/models/dummy/dummy_notifiable_target.rb +8 -0
  163. data/spec/rails_app/app/models/user.rb +44 -20
  164. data/spec/rails_app/app/views/activity_notification/notifications/default/article/_update.html.erb +146 -0
  165. data/spec/rails_app/app/views/articles/index.html.erb +51 -7
  166. data/spec/rails_app/app/views/articles/show.html.erb +1 -1
  167. data/spec/rails_app/app/views/layouts/_header.html.erb +8 -10
  168. data/spec/rails_app/app/views/spa/index.html.erb +2 -0
  169. data/spec/rails_app/babel.config.js +72 -0
  170. data/spec/rails_app/bin/webpack +18 -0
  171. data/spec/rails_app/bin/webpack-dev-server +18 -0
  172. data/spec/rails_app/config/application.rb +18 -2
  173. data/spec/rails_app/config/dynamoid.rb +11 -3
  174. data/spec/rails_app/config/environment.rb +2 -1
  175. data/spec/rails_app/config/environments/development.rb +5 -0
  176. data/spec/rails_app/config/environments/production.rb +6 -0
  177. data/spec/rails_app/config/environments/test.rb +5 -0
  178. data/spec/rails_app/config/initializers/activity_notification.rb +11 -3
  179. data/spec/rails_app/config/initializers/copy_it.aws.rb.template +6 -0
  180. data/spec/rails_app/config/initializers/devise_token_auth.rb +55 -0
  181. data/spec/rails_app/config/initializers/mysql.rb +9 -0
  182. data/spec/rails_app/config/locales/activity_notification.en.yml +2 -2
  183. data/spec/rails_app/config/routes.rb +37 -1
  184. data/spec/rails_app/config/webpack/development.js +5 -0
  185. data/spec/rails_app/config/webpack/environment.js +7 -0
  186. data/spec/rails_app/config/webpack/loaders/vue.js +6 -0
  187. data/spec/rails_app/config/webpack/production.js +5 -0
  188. data/spec/rails_app/config/webpack/test.js +5 -0
  189. data/spec/rails_app/config/webpacker.yml +97 -0
  190. data/spec/rails_app/db/migrate/20191201000000_add_tokens_to_users.rb +10 -0
  191. data/spec/rails_app/db/schema.rb +4 -1
  192. data/spec/rails_app/db/seeds.rb +10 -2
  193. data/spec/rails_app/lib/custom_optional_targets/raise_error.rb +14 -0
  194. data/spec/rails_app/package.json +23 -0
  195. data/spec/rails_app/postcss.config.js +12 -0
  196. data/spec/roles/acts_as_group_spec.rb +0 -2
  197. data/spec/roles/acts_as_notifiable_spec.rb +6 -8
  198. data/spec/roles/acts_as_notifier_spec.rb +0 -2
  199. data/spec/roles/acts_as_target_spec.rb +0 -4
  200. data/spec/spec_helper.rb +7 -15
  201. data/spec/version_spec.rb +31 -0
  202. metadata +191 -13
@@ -7,6 +7,5 @@ describe ActivityNotification::SubscriptionsController, type: :controller do
7
7
  let(:extra_params) { {} }
8
8
  let(:valid_session) {}
9
9
 
10
- it_behaves_like :subscription_controller
11
-
10
+ it_behaves_like :subscriptions_controller
12
11
  end
@@ -1,6 +1,8 @@
1
1
  require 'controllers/subscriptions_controller_shared_examples'
2
2
 
3
3
  describe ActivityNotification::SubscriptionsWithDeviseController, type: :controller do
4
+ include ActivityNotification::ControllerSpec::RequestUtility
5
+
4
6
  let(:test_user) { create(:confirmed_user) }
5
7
  let(:unauthenticated_user) { create(:confirmed_user) }
6
8
  let(:test_target) { create(:admin, user: test_user) }
@@ -14,7 +16,7 @@ describe ActivityNotification::SubscriptionsWithDeviseController, type: :control
14
16
  sign_in test_user
15
17
  end
16
18
 
17
- it_behaves_like :subscription_controller
19
+ it_behaves_like :subscriptions_controller
18
20
  end
19
21
 
20
22
  context "signed in with devise as unauthenticated user" do
@@ -92,15 +94,4 @@ describe ActivityNotification::SubscriptionsWithDeviseController, type: :control
92
94
  end
93
95
  end
94
96
  end
95
-
96
- private
97
-
98
- def get_with_compatibility action, params, session
99
- if Rails::VERSION::MAJOR <= 4
100
- get action, params, session
101
- else
102
- get action, params: params, session: session
103
- end
104
- end
105
-
106
97
  end
@@ -72,9 +72,9 @@ describe ActivityNotification::ViewHelpers, type: :helper do
72
72
 
73
73
  it "interpolates from parameters" do
74
74
  notification.parameters = { "article_title" => "custom title" }
75
- notification.key = 'article.update'
75
+ notification.key = 'article.destroy'
76
76
  expect(render_notification notification, fallback: :text)
77
- .to eq("Article custom title has been updated")
77
+ .to eq('The author removed an article "custom title"')
78
78
  end
79
79
  end
80
80
 
@@ -113,6 +113,7 @@ describe ActivityNotification::ViewHelpers, type: :helper do
113
113
  expect(self).to receive(:render).with({
114
114
  layout: 'layouts/test',
115
115
  partial: 'activity_notification/notifications/default/custom/test',
116
+ assigns: {},
116
117
  locals: notification.prepare_locals({ layout: 'test' })
117
118
  })
118
119
  render_notification notification, layout: 'test'
@@ -170,16 +171,8 @@ describe ActivityNotification::ViewHelpers, type: :helper do
170
171
  @target = target_user
171
172
  end
172
173
 
173
- #TODO make better test using content_for
174
174
  it "renders custom notification view for specified target" do
175
- # notification_1 = target_user.notifications.first
176
- # notification_2 = target_user.notifications.last
177
- # notification_1.update(key: 'custom.test')
178
- # notification_2.update(key: 'custom.test')
179
- expect(render_notification_of target_user, partial: 'custom_index', fallback: :default)
180
- .to eq("Custom index: ")
181
- # .to eq("Custom index: Custom template root for user target: #{notification_1.id}"\
182
- # "Custom template root for user target: #{notification_2.id}")
175
+ expect(render_notification_of target_user, partial: 'custom_index', fallback: :default).to eq("Custom index: ")
183
176
  end
184
177
 
185
178
  it "uses layout of layout parameter" do
@@ -102,6 +102,47 @@ describe ActivityNotification::Mailer do
102
102
  end
103
103
  end
104
104
 
105
+ context "with defined overriding_notification_email_from in notifiable model" do
106
+ it "sends with updated from" do
107
+ module AdditionalMethods
108
+ def overriding_notification_email_from(target, key)
109
+ 'test05@example.com'
110
+ end
111
+ end
112
+ notification.notifiable.extend(AdditionalMethods)
113
+ ActivityNotification::Mailer.send_notification_email(notification).deliver_now
114
+ expect(ActivityNotification::Mailer.deliveries.last.from.first)
115
+ .to eq('test05@example.com')
116
+ end
117
+ end
118
+
119
+ context "with defined overriding_notification_email_reply_to in notifiable model" do
120
+ it "sends with updated reply_to" do
121
+ module AdditionalMethods
122
+ def overriding_notification_email_reply_to(target, key)
123
+ 'test06@example.com'
124
+ end
125
+ end
126
+ notification.notifiable.extend(AdditionalMethods)
127
+ ActivityNotification::Mailer.send_notification_email(notification).deliver_now
128
+ expect(ActivityNotification::Mailer.deliveries.last.reply_to.first)
129
+ .to eq('test06@example.com')
130
+ end
131
+ end
132
+
133
+ context "with defined overriding_notification_email_message_id in notifiable model" do
134
+ it "sends with specific message id" do
135
+ module AdditionalMethods
136
+ def overriding_notification_email_message_id(target, key)
137
+ "https://www.example.com/test@example.com/"
138
+ end
139
+ end
140
+ notification.notifiable.extend(AdditionalMethods)
141
+ ActivityNotification::Mailer.send_notification_email(notification).deliver_now
142
+ expect(ActivityNotification::Mailer.deliveries.last.message_id)
143
+ .to eq("https://www.example.com/test@example.com/")
144
+ end
145
+ end
105
146
  context "when fallback option is :none and the template is missing" do
106
147
  it "raise ActionView::MissingTemplate" do
107
148
  expect { ActivityNotification::Mailer.send_notification_email(notification, fallback: :none).deliver_now }
@@ -56,6 +56,23 @@ describe ActivityNotification::Notification, type: :model do
56
56
  notification = create(:notification, notifier: notifier)
57
57
  expect(notification.reload.notifier).to eq(notifier)
58
58
  end
59
+
60
+ context "returns as_json including associated models" do
61
+ it "returns as_json with include option as Symbol" do
62
+ notification = create(:notification)
63
+ expect(notification.as_json(include: :target)["target"]["id"].to_s).to eq(notification.target.id.to_s)
64
+ end
65
+
66
+ it "returns as_json with include option as Array" do
67
+ notification = create(:notification)
68
+ expect(notification.as_json(include: [:target])["target"]["id"].to_s).to eq(notification.target.id.to_s)
69
+ end
70
+
71
+ it "returns as_json with include option as Hash" do
72
+ notification = create(:notification)
73
+ expect(notification.as_json(include: { target: { methods: [:printable_target_name] } })["target"]["id"].to_s).to eq(notification.target.id.to_s)
74
+ end
75
+ end
59
76
  end
60
77
 
61
78
  describe "with serializable column" do
@@ -11,6 +11,14 @@ describe ActivityNotification::Subscription, type: :model do
11
11
  subscription = create(:subscription, target: target)
12
12
  expect(subscription.reload.target).to eq(target)
13
13
  end
14
+
15
+ it "several targets can subscribe to the same key" do
16
+ target = create(:confirmed_user)
17
+ target2 = create(:confirmed_user)
18
+ subscription_1 = create(:subscription, target: target, key: 'key.1')
19
+ subscription_2 = create(:subscription, target: target2, key: 'key.1')
20
+ expect(subscription_2).to be_valid
21
+ end
14
22
  end
15
23
 
16
24
  describe "with validation" do
@@ -32,19 +40,6 @@ describe ActivityNotification::Subscription, type: :model do
32
40
  expect(@subscription.errors[:key].size).to eq(1)
33
41
  end
34
42
 
35
- #TODO
36
- # it "is invalid with non boolean value of subscribing" do
37
- # @subscription.subscribing = 'hoge'
38
- # expect(@subscription).to be_invalid
39
- # expect(@subscription.errors[:subscribing].size).to eq(1)
40
- # end
41
- #
42
- # it "is invalid with non boolean value of subscribing_to_email" do
43
- # @subscription.subscribing_to_email = 'hoge'
44
- # expect(@subscription).to be_invalid
45
- # expect(@subscription.errors[:subscribing_to_email].size).to eq(1)
46
- # end
47
-
48
43
  it "is invalid with true as subscribing_to_email and false as subscribing" do
49
44
  @subscription.subscribing = false
50
45
  @subscription.subscribing_to_email = true
@@ -0,0 +1,37 @@
1
+ if Rails::VERSION::MAJOR >= 5
2
+ require 'activity_notification/optional_targets/action_cable_api_channel'
3
+ describe ActivityNotification::OptionalTarget::ActionCableApiChannel do
4
+ let(:test_instance) { ActivityNotification::OptionalTarget::ActionCableApiChannel.new(skip_initializing_target: true) }
5
+
6
+ describe "as public instance methods" do
7
+ describe "#to_optional_target_name" do
8
+ it "is return demodulized symbol class name" do
9
+ expect(test_instance.to_optional_target_name).to eq(:action_cable_api_channel)
10
+ end
11
+ end
12
+
13
+ describe "#initialize_target" do
14
+ it "does not raise NotImplementedError" do
15
+ test_instance.initialize_target
16
+ end
17
+ end
18
+
19
+ describe "#notify" do
20
+ it "does not raise NotImplementedError" do
21
+ test_instance.notify(create(:notification))
22
+ end
23
+ end
24
+ end
25
+
26
+ describe "as protected instance methods" do
27
+ describe "#render_notification_message" do
28
+ context "as default" do
29
+ it "renders notification message as formatted JSON" do
30
+ expect(test_instance.send(:render_notification_message, create(:notification)).with_indifferent_access[:notification].has_key?(:id)).to be_truthy
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,44 @@
1
+ if Rails::VERSION::MAJOR >= 5
2
+ require 'activity_notification/optional_targets/action_cable_channel'
3
+ describe ActivityNotification::OptionalTarget::ActionCableChannel do
4
+ let(:test_instance) { ActivityNotification::OptionalTarget::ActionCableChannel.new(skip_initializing_target: true) }
5
+
6
+ describe "as public instance methods" do
7
+ describe "#to_optional_target_name" do
8
+ it "is return demodulized symbol class name" do
9
+ expect(test_instance.to_optional_target_name).to eq(:action_cable_channel)
10
+ end
11
+ end
12
+
13
+ describe "#initialize_target" do
14
+ it "does not raise NotImplementedError" do
15
+ test_instance.initialize_target
16
+ end
17
+ end
18
+
19
+ describe "#notify" do
20
+ it "does not raise NotImplementedError" do
21
+ test_instance.notify(create(:notification))
22
+ end
23
+ end
24
+ end
25
+
26
+ describe "as protected instance methods" do
27
+ describe "#render_notification_message" do
28
+ context "as default" do
29
+ it "renders notification message with default template" do
30
+ expect(test_instance.send(:render_notification_message, create(:notification))).to be_include("<div class='notification_list")
31
+ end
32
+ end
33
+
34
+ context "with unexisting template as fallback option" do
35
+ it "raise ActionView::MissingTemplate" do
36
+ expect { expect(test_instance.send(:render_notification_message, create(:notification), fallback: :hoge)) }
37
+ .to raise_error(ActionView::MissingTemplate)
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ end
44
+ end
@@ -10,7 +10,6 @@ describe ActivityNotification::OptionalTarget::AmazonSNS do
10
10
  end
11
11
 
12
12
  describe "#initialize_target" do
13
- #TODO
14
13
  it "does not raise NotImplementedError" do
15
14
  begin
16
15
  test_instance.initialize_target
@@ -21,7 +20,6 @@ describe ActivityNotification::OptionalTarget::AmazonSNS do
21
20
  end
22
21
 
23
22
  describe "#notify" do
24
- #TODO
25
23
  it "does not raise NotImplementedError but NoMethodError" do
26
24
  expect { test_instance.notify(create(:notification)) }
27
25
  .to raise_error(NoMethodError)
@@ -10,7 +10,6 @@ describe ActivityNotification::OptionalTarget::Slack do
10
10
  end
11
11
 
12
12
  describe "#initialize_target" do
13
- #TODO
14
13
  it "does not raise NotImplementedError but URI::InvalidURIError" do
15
14
  expect { test_instance.initialize_target }
16
15
  .to raise_error(URI::InvalidURIError)
@@ -18,7 +17,6 @@ describe ActivityNotification::OptionalTarget::Slack do
18
17
  end
19
18
 
20
19
  describe "#notify" do
21
- #TODO
22
20
  it "does not raise NotImplementedError but NoMethodError" do
23
21
  expect { test_instance.notify(create(:notification)) }
24
22
  .to raise_error(NoMethodError)
@@ -3,4 +3,13 @@
3
3
 
4
4
  require File.expand_path('../config/application', __FILE__)
5
5
 
6
+ # Define dummy module for Webpacker Rake tasks
7
+ require 'devise_token_auth'
8
+ unless defined?(DeviseTokenAuth::Concerns::User)
9
+ module DeviseTokenAuth::Concerns
10
+ module User
11
+ end
12
+ end
13
+ end
14
+
6
15
  Rails.application.load_tasks
@@ -0,0 +1,3 @@
1
+ //= link_tree ../images
2
+ //= link_directory ../javascripts .js
3
+ //= link_directory ../stylesheets .css
File without changes
@@ -0,0 +1,21 @@
1
+ class AdminsController < ApplicationController
2
+ before_action :set_admin, only: [:show]
3
+
4
+ # GET /admins
5
+ def index
6
+ render json: {
7
+ users: Admin.all.as_json(include: :user, methods: [:printable_target_name, :notification_action_cable_allowed?, :notification_action_cable_with_devise?])
8
+ }
9
+ end
10
+
11
+ # GET /admins/:id
12
+ def show
13
+ render json: @admin.as_json(include: :user, methods: [:printable_target_name, :notification_action_cable_allowed?, :notification_action_cable_with_devise?])
14
+ end
15
+
16
+ private
17
+ # Use callbacks to share common setup or constraints between actions.
18
+ def set_admin
19
+ @admin = Admin.find(params[:id])
20
+ end
21
+ end
@@ -1,5 +1,5 @@
1
1
  class ApplicationController < ActionController::Base
2
2
  # Prevent CSRF attacks by raising an exception.
3
3
  # For APIs, you may want to use :null_session instead.
4
- protect_from_forgery with: :exception
4
+ protect_from_forgery with: :null_session
5
5
  end
@@ -4,8 +4,10 @@ class ArticlesController < ApplicationController
4
4
 
5
5
  # GET /articles
6
6
  def index
7
- @exists_user_notification_routes = respond_to?('user_notification_path')
8
- @exists_admin_notification_routes = respond_to?('admin_notification_path')
7
+ @exists_notifications_routes = respond_to?('notifications_path')
8
+ @exists_user_notifications_routes = respond_to?('user_notifications_path')
9
+ @exists_admins_notifications_routes = respond_to?('admins_notifications_path')
10
+ @exists_admin_notifications_routes = respond_to?('admin_notifications_path')
9
11
  @articles = Article.all.includes(:user)
10
12
  end
11
13
 
@@ -29,7 +31,7 @@ class ArticlesController < ApplicationController
29
31
  @article.user = current_user
30
32
 
31
33
  if @article.save
32
- @article.notify :users
34
+ @article.notify :users, key: 'article.create'
33
35
  redirect_to @article, notice: 'Article was successfully created.'
34
36
  else
35
37
  render :new
@@ -39,6 +41,7 @@ class ArticlesController < ApplicationController
39
41
  # PATCH/PUT /articles/1
40
42
  def update
41
43
  if @article.update(article_params)
44
+ @article.notify :users, key: 'article.update'
42
45
  redirect_to @article, notice: 'Article was successfully updated.'
43
46
  else
44
47
  render :edit
@@ -0,0 +1,7 @@
1
+ class SpaController < ApplicationController
2
+
3
+ # GET /spa
4
+ def index
5
+ end
6
+
7
+ end
@@ -1,67 +1,2 @@
1
1
  class Users::NotificationsController < ActivityNotification::NotificationsController
2
- # GET /:target_type/:target_id/notifications
3
- # def index
4
- # super
5
- # end
6
-
7
- # POST /:target_type/:target_id/notifications/open_all
8
- # def open_all
9
- # super
10
- # end
11
-
12
- # GET /:target_type/:target_id/notifications/:id
13
- # def show
14
- # super
15
- # end
16
-
17
- # DELETE /:target_type/:target_id/notifications/:id
18
- # def destroy
19
- # super
20
- # end
21
-
22
- # POST /:target_type/:target_id/notifications/:id/open
23
- # def open
24
- # super
25
- # end
26
-
27
- # GET /:target_type/:target_id/notifications/:id/move
28
- # def move
29
- # super
30
- # end
31
-
32
- # No action routing
33
- # This method needs to be public since it is called from view helper
34
- # def target_view_path
35
- # super
36
- # end
37
-
38
- # protected
39
-
40
- # def set_target
41
- # super
42
- # end
43
-
44
- # def set_notification
45
- # super
46
- # end
47
-
48
- # def set_index_options
49
- # super
50
- # end
51
-
52
- # def load_notification_index(options = {})
53
- # super(options)
54
- # end
55
-
56
- # def controller_path
57
- # super
58
- # end
59
-
60
- # def set_view_prefixes
61
- # super
62
- # end
63
-
64
- # def return_back_or_ajax
65
- # super
66
- # end
67
2
  end