activity_notification 2.0.0 → 2.1.4

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -28,7 +28,7 @@ module ActivityNotification
28
28
  field :optional_targets, type: Hash, default: {}
29
29
 
30
30
  validates :target, presence: true
31
- validates :key, presence: true
31
+ validates :key, presence: true, uniqueness: { scope: [:target_type, :target_id] }
32
32
  validates_inclusion_of :subscribing, in: [true, false]
33
33
  validates_inclusion_of :subscribing_to_email, in: [true, false]
34
34
  validate :subscribing_to_email_cannot_be_true_when_subscribing_is_false
@@ -23,7 +23,7 @@ module ActionDispatch::Routing
23
23
  # { controller:"activity_notification/notifications", action:"open_all", target_type:"users" }
24
24
  # move_user_notification GET /users/:user_id/notifications/:id/move(.:format)
25
25
  # { controller:"activity_notification/notifications", action:"move", target_type:"users" }
26
- # open_user_notification POST /users/:user_id/notifications/:id/open(.:format)
26
+ # open_user_notification PUT /users/:user_id/notifications/:id/open(.:format)
27
27
  # { controller:"activity_notification/notifications", action:"open", target_type:"users" }
28
28
  #
29
29
  # You can also configure notification routes with scope like this:
@@ -42,7 +42,7 @@ module ActionDispatch::Routing
42
42
  # { controller:"activity_notification/notifications", action:"open_all", target_type:"users", routing_scope: :myscope }
43
43
  # move_myscope_user_notification GET /myscope/users/:user_id/notifications/:id/move(.:format)
44
44
  # { controller:"activity_notification/notifications", action:"move", target_type:"users", routing_scope: :myscope }
45
- # open_myscope_user_notification POST /myscope/users/:user_id/notifications/:id/open(.:format)
45
+ # open_myscope_user_notification PUT /myscope/users/:user_id/notifications/:id/open(.:format)
46
46
  # { controller:"activity_notification/notifications", action:"open", target_type:"users", routing_scope: :myscope }
47
47
  #
48
48
  # When you use devise authentication and you want make notification targets assciated with devise,
@@ -60,7 +60,7 @@ module ActionDispatch::Routing
60
60
  # { controller:"activity_notification/notifications_with_devise", action:"open_all", target_type:"users", devise_type:"users" }
61
61
  # move_user_notification GET /users/:user_id/notifications/:id/move(.:format)
62
62
  # { controller:"activity_notification/notifications_with_devise", action:"move", target_type:"users", devise_type:"users" }
63
- # open_user_notification POST /users/:user_id/notifications/:id/open(.:format)
63
+ # open_user_notification PUT /users/:user_id/notifications/:id/open(.:format)
64
64
  # { controller:"activity_notification/notifications_with_devise", action:"open", target_type:"users", devise_type:"users" }
65
65
  #
66
66
  # When you use with_devise option and you want to make simple default routes as follows, you can use devise_default_routes option:
@@ -77,9 +77,31 @@ module ActionDispatch::Routing
77
77
  # { controller:"activity_notification/notifications_with_devise", action:"open_all", target_type:"users", devise_type:"users" }
78
78
  # move_user_notification GET /notifications/:id/move(.:format)
79
79
  # { controller:"activity_notification/notifications_with_devise", action:"move", target_type:"users", devise_type:"users" }
80
- # open_user_notification POST /notifications/:id/open(.:format)
80
+ # open_user_notification PUT /notifications/:id/open(.:format)
81
81
  # { controller:"activity_notification/notifications_with_devise", action:"open", target_type:"users", devise_type:"users" }
82
82
  #
83
+ # When you use activity_notification controllers as REST API mode,
84
+ # you can create as follows in your routes:
85
+ # scope :api do
86
+ # scope :"v2" do
87
+ # notify_to :users, api_mode: true
88
+ # end
89
+ # end
90
+ # This api_mode option creates the needed routes as REST API:
91
+ # # Notification as API mode routes
92
+ # GET /api/v2/users/:user_id/notifications(.:format)
93
+ # { controller:"activity_notification/notifications_api", action:"index", target_type:"users" }
94
+ # GET /api/v2/users/:user_id/notifications/:id(.:format)
95
+ # { controller:"activity_notification/notifications_api", action:"show", target_type:"users" }
96
+ # DELETE /api/v2/users/:user_id/notifications/:id(.:format)
97
+ # { controller:"activity_notification/notifications_api", action:"destroy", target_type:"users" }
98
+ # POST /api/v2/users/:user_id/notifications/open_all(.:format)
99
+ # { controller:"activity_notification/notifications_api", action:"open_all", target_type:"users" }
100
+ # GET /api/v2/users/:user_id/notifications/:id/move(.:format)
101
+ # { controller:"activity_notification/notifications_api", action:"move", target_type:"users" }
102
+ # PUT /api/v2/users/:user_id/notifications/:id/open(.:format)
103
+ # { controller:"activity_notification/notifications_api", action:"open", target_type:"users" }
104
+ #
83
105
  # When you would like to define subscription management paths with notification paths,
84
106
  # you can create as follows in your routes:
85
107
  # notify_to :users, with_subscription: true
@@ -102,12 +124,19 @@ module ActionDispatch::Routing
102
124
  # scope :myscope, as: :myscope do
103
125
  # notify_to :myscope, with_devise: :users, devise_default_routes: true, with_subscription: true, routing_scope: :myscope
104
126
  # end
127
+ # @example Define notification paths as API mode including subscription paths
128
+ # scope :api do
129
+ # scope :"v2" do
130
+ # notify_to :users, api_mode: true, with_subscription: true
131
+ # end
132
+ # end
105
133
  #
106
134
  # @overload notify_to(*resources, *options)
107
135
  # @param [Symbol] resources Resources to notify
108
136
  # @option options [String] :routing_scope (nil) Routing scope for notification routes
109
137
  # @option options [Symbol] :with_devise (false) Devise resources name for devise integration. Devise integration will be enabled by this option.
110
138
  # @option options [Boolean] :devise_default_routes (false) Whether you will create routes as device default routes assciated with authenticated devise resource as the default target
139
+ # @option options [Boolean] :api_mode (false) Whether you will use activity_notification controllers as REST API mode
111
140
  # @option options [Hash|Boolean] :with_subscription (false) Subscription path options to define subscription management paths with notification paths. Calls subscribed_by routing when truthy value is passed as this option.
112
141
  # @option options [String] :model (:notifications) Model name of notifications
113
142
  # @option options [String] :controller ("activity_notification/notifications" | activity_notification/notifications_with_devise") :controller option as resources routing
@@ -120,7 +149,7 @@ module ActionDispatch::Routing
120
149
 
121
150
  resources.each do |target|
122
151
  options[:defaults] = { target_type: target.to_s }.merge(options[:devise_defaults])
123
- resources_options = options.select { |key, _| [:with_devise, :devise_default_routes, :with_subscription, :subscription_option, :model, :devise_defaults].exclude? key }
152
+ resources_options = options.select { |key, _| [:api_mode, :with_devise, :devise_default_routes, :with_subscription, :subscription_option, :model, :devise_defaults].exclude? key }
124
153
  if options[:with_devise].present? && options[:devise_default_routes].present?
125
154
  create_notification_routes options, resources_options
126
155
  else
@@ -146,23 +175,25 @@ module ActionDispatch::Routing
146
175
  # # Subscription routes
147
176
  # user_subscriptions GET /users/:user_id/subscriptions(.:format)
148
177
  # { controller:"activity_notification/subscriptions", action:"index", target_type:"users" }
178
+ # find_user_subscriptions GET /users/:user_id/subscriptions/find(.:format)
179
+ # { controller:"activity_notification/subscriptions", action:"find", target_type:"users" }
149
180
  # user_subscription GET /users/:user_id/subscriptions/:id(.:format)
150
181
  # { controller:"activity_notification/subscriptions", action:"show", target_type:"users" }
151
- # open_all_user_subscriptions POST /users/:user_id/subscriptions(.:format)
182
+ # PUT /users/:user_id/subscriptions(.:format)
152
183
  # { controller:"activity_notification/subscriptions", action:"create", target_type:"users" }
153
- # user_subscription DELETE /users/:user_id/subscriptions/:id(.:format)
184
+ # DELETE /users/:user_id/subscriptions/:id(.:format)
154
185
  # { controller:"activity_notification/subscriptions", action:"destroy", target_type:"users" }
155
- # subscribe_user_subscription POST /users/:user_id/subscriptions/:id/subscribe(.:format)
186
+ # subscribe_user_subscription PUT /users/:user_id/subscriptions/:id/subscribe(.:format)
156
187
  # { controller:"activity_notification/subscriptions", action:"subscribe", target_type:"users" }
157
- # unsubscribe_user_subscription POST /users/:user_id/subscriptions/:id/unsubscribe(.:format)
188
+ # unsubscribe_user_subscription PUT /users/:user_id/subscriptions/:id/unsubscribe(.:format)
158
189
  # { controller:"activity_notification/subscriptions", action:"unsubscribe", target_type:"users" }
159
- # subscribe_to_email_user_subscription POST /users/:user_id/subscriptions/:id/subscribe_to_email(.:format)
190
+ # subscribe_to_email_user_subscription PUT /users/:user_id/subscriptions/:id/subscribe_to_email(.:format)
160
191
  # { controller:"activity_notification/subscriptions", action:"subscribe_to_email", target_type:"users" }
161
- # unsubscribe_to_email_user_subscription POST /users/:user_id/subscriptions/:id/unsubscribe_to_email(.:format)
192
+ # unsubscribe_to_email_user_subscription PUT /users/:user_id/subscriptions/:id/unsubscribe_to_email(.:format)
162
193
  # { controller:"activity_notification/subscriptions", action:"unsubscribe_to_email", target_type:"users" }
163
- # subscribe_to_optional_target_user_subscription POST /users/:user_id/subscriptions/:id/subscribe_to_optional_target(.:format)
194
+ # subscribe_to_optional_target_user_subscription PUT /users/:user_id/subscriptions/:id/subscribe_to_optional_target(.:format)
164
195
  # { controller:"activity_notification/subscriptions", action:"subscribe_to_optional_target", target_type:"users" }
165
- # unsubscribe_to_optional_target_user_subscription POST /users/:user_id/subscriptions/:id/unsubscribe_to_optional_target(.:format)
196
+ # unsubscribe_to_optional_target_user_subscription PUT /users/:user_id/subscriptions/:id/unsubscribe_to_optional_target(.:format)
166
197
  # { controller:"activity_notification/subscriptions", action:"unsubscribe_to_optional_target", target_type:"users" }
167
198
  #
168
199
  # You can also configure notification routes with scope like this:
@@ -173,23 +204,25 @@ module ActionDispatch::Routing
173
204
  # # Subscription routes
174
205
  # myscope_user_subscriptions GET /myscope/users/:user_id/subscriptions(.:format)
175
206
  # { controller:"activity_notification/subscriptions", action:"index", target_type:"users", routing_scope: :myscope }
207
+ # find_myscope_user_subscriptions GET /myscope/users/:user_id/subscriptions/find(.:format)
208
+ # { controller:"activity_notification/subscriptions", action:"find", target_type:"users", routing_scope: :myscope }
176
209
  # myscope_user_subscription GET /myscope/users/:user_id/subscriptions/:id(.:format)
177
210
  # { controller:"activity_notification/subscriptions", action:"show", target_type:"users", routing_scope: :myscope }
178
- # open_all_myscope_user_subscriptions POST /myscope/users/:user_id/subscriptions(.:format)
211
+ # PUT /myscope/users/:user_id/subscriptions(.:format)
179
212
  # { controller:"activity_notification/subscriptions", action:"create", target_type:"users", routing_scope: :myscope }
180
- # myscope_user_subscription DELETE /myscope/users/:user_id/subscriptions/:id(.:format)
213
+ # DELETE /myscope/users/:user_id/subscriptions/:id(.:format)
181
214
  # { controller:"activity_notification/subscriptions", action:"destroy", target_type:"users", routing_scope: :myscope }
182
- # subscribe_myscope_user_subscription POST /myscope/users/:user_id/subscriptions/:id/subscribe(.:format)
215
+ # subscribe_myscope_user_subscription PUT /myscope/users/:user_id/subscriptions/:id/subscribe(.:format)
183
216
  # { controller:"activity_notification/subscriptions", action:"subscribe", target_type:"users", routing_scope: :myscope }
184
- # unsubscribe_myscope_user_subscription POST /myscope/users/:user_id/subscriptions/:id/unsubscribe(.:format)
217
+ # unsubscribe_myscope_user_subscription PUT /myscope/users/:user_id/subscriptions/:id/unsubscribe(.:format)
185
218
  # { controller:"activity_notification/subscriptions", action:"unsubscribe", target_type:"users", routing_scope: :myscope }
186
- # subscribe_to_email_myscope_user_subscription POST /myscope/users/:user_id/subscriptions/:id/subscribe_to_email(.:format)
219
+ # subscribe_to_email_myscope_user_subscription PUT /myscope/users/:user_id/subscriptions/:id/subscribe_to_email(.:format)
187
220
  # { controller:"activity_notification/subscriptions", action:"subscribe_to_email", target_type:"users", routing_scope: :myscope }
188
- # unsubscribe_to_email_myscope_user_subscription POST /myscope/users/:user_id/subscriptions/:id/unsubscribe_to_email(.:format)
221
+ # unsubscribe_to_email_myscope_user_subscription PUT /myscope/users/:user_id/subscriptions/:id/unsubscribe_to_email(.:format)
189
222
  # { controller:"activity_notification/subscriptions", action:"unsubscribe_to_email", target_type:"users", routing_scope: :myscope }
190
- # subscribe_to_optional_target_myscope_user_subscription POST /myscope/users/:user_id/subscriptions/:id/subscribe_to_optional_target(.:format)
223
+ # subscribe_to_optional_target_myscope_user_subscription PUT /myscope/users/:user_id/subscriptions/:id/subscribe_to_optional_target(.:format)
191
224
  # { controller:"activity_notification/subscriptions", action:"subscribe_to_optional_target", target_type:"users", routing_scope: :myscope }
192
- # unsubscribe_to_optional_target_myscope_user_subscription POST /myscope/users/:user_id/subscriptions/:id/unsubscribe_to_optional_target(.:format)
225
+ # unsubscribe_to_optional_target_myscope_user_subscription PUT /myscope/users/:user_id/subscriptions/:id/unsubscribe_to_optional_target(.:format)
193
226
  # { controller:"activity_notification/subscriptions", action:"unsubscribe_to_optional_target", target_type:"users", routing_scope: :myscope }
194
227
  #
195
228
  # When you use devise authentication and you want make subscription targets assciated with devise,
@@ -199,23 +232,25 @@ module ActionDispatch::Routing
199
232
  # # Subscription with devise routes
200
233
  # user_subscriptions GET /users/:user_id/subscriptions(.:format)
201
234
  # { controller:"activity_notification/subscriptions_with_devise", action:"index", target_type:"users", devise_type:"users" }
235
+ # find_user_subscriptions GET /users/:user_id/subscriptions/find(.:format)
236
+ # { controller:"activity_notification/subscriptions_with_devise", action:"find", target_type:"users", devise_type:"users" }
202
237
  # user_subscription GET /users/:user_id/subscriptions/:id(.:format)
203
238
  # { controller:"activity_notification/subscriptions_with_devise", action:"show", target_type:"users", devise_type:"users" }
204
- # open_all_user_subscriptions POST /users/:user_id/subscriptions(.:format)
239
+ # PUT /users/:user_id/subscriptions(.:format)
205
240
  # { controller:"activity_notification/subscriptions_with_devise", action:"create", target_type:"users", devise_type:"users" }
206
- # user_subscription DELETE /users/:user_id/subscriptions/:id(.:format)
241
+ # DELETE /users/:user_id/subscriptions/:id(.:format)
207
242
  # { controller:"activity_notification/subscriptions_with_devise", action:"destroy", target_type:"users", devise_type:"users" }
208
- # subscribe_user_subscription POST /users/:user_id/subscriptions/:id/subscribe(.:format)
243
+ # subscribe_user_subscription PUT /users/:user_id/subscriptions/:id/subscribe(.:format)
209
244
  # { controller:"activity_notification/subscriptions_with_devise", action:"subscribe", target_type:"users", devise_type:"users" }
210
- # unsubscribe_user_subscription POST /users/:user_id/subscriptions/:id/unsubscribe(.:format)
245
+ # unsubscribe_user_subscription PUT /users/:user_id/subscriptions/:id/unsubscribe(.:format)
211
246
  # { controller:"activity_notification/subscriptions_with_devise", action:"unsubscribe", target_type:"users", devise_type:"users" }
212
- # subscribe_to_email_user_subscription POST /users/:user_id/subscriptions/:id/subscribe_to_email(.:format)
247
+ # subscribe_to_email_user_subscription PUT /users/:user_id/subscriptions/:id/subscribe_to_email(.:format)
213
248
  # { controller:"activity_notification/subscriptions_with_devise", action:"subscribe_to_email", target_type:"users", devise_type:"users" }
214
- # unsubscribe_to_email_user_subscription POST /users/:user_id/subscriptions/:id/unsubscribe_to_email(.:format)
249
+ # unsubscribe_to_email_user_subscription PUT /users/:user_id/subscriptions/:id/unsubscribe_to_email(.:format)
215
250
  # { controller:"activity_notification/subscriptions_with_devise", action:"unsubscribe_to_email", target_type:"users", devise_type:"users" }
216
- # subscribe_to_optional_target_user_subscription POST /users/:user_id/subscriptions/:id/subscribe_to_optional_target(.:format)
251
+ # subscribe_to_optional_target_user_subscription PUT /users/:user_id/subscriptions/:id/subscribe_to_optional_target(.:format)
217
252
  # { controller:"activity_notification/subscriptions_with_devise", action:"subscribe_to_optional_target", target_type:"users", devise_type:"users" }
218
- # unsubscribe_to_optional_target_user_subscription POST /users/:user_id/subscriptions/:id/unsubscribe_to_optional_target(.:format)
253
+ # unsubscribe_to_optional_target_user_subscription PUT /users/:user_id/subscriptions/:id/unsubscribe_to_optional_target(.:format)
219
254
  # { controller:"activity_notification/subscriptions_with_devise", action:"unsubscribe_to_optional_target", target_type:"users", devise_type:"users" }
220
255
  #
221
256
  # When you use with_devise option and you want to make simple default routes as follows, you can use devise_default_routes option:
@@ -224,37 +259,80 @@ module ActionDispatch::Routing
224
259
  # # Subscription with devise routes
225
260
  # user_subscriptions GET /subscriptions(.:format)
226
261
  # { controller:"activity_notification/subscriptions_with_devise", action:"index", target_type:"users", devise_type:"users" }
262
+ # find_user_subscriptions GET /subscriptions/find(.:format)
263
+ # { controller:"activity_notification/subscriptions_with_devise", action:"find", target_type:"users", devise_type:"users" }
227
264
  # user_subscription GET /subscriptions/:id(.:format)
228
265
  # { controller:"activity_notification/subscriptions_with_devise", action:"show", target_type:"users", devise_type:"users" }
229
- # open_all_user_subscriptions POST /subscriptions(.:format)
266
+ # PUT /subscriptions(.:format)
230
267
  # { controller:"activity_notification/subscriptions_with_devise", action:"create", target_type:"users", devise_type:"users" }
231
- # user_subscription DELETE /subscriptions/:id(.:format)
268
+ # DELETE /subscriptions/:id(.:format)
232
269
  # { controller:"activity_notification/subscriptions_with_devise", action:"destroy", target_type:"users", devise_type:"users" }
233
- # subscribe_user_subscription POST /subscriptions/:id/subscribe(.:format)
270
+ # subscribe_user_subscription PUT /subscriptions/:id/subscribe(.:format)
234
271
  # { controller:"activity_notification/subscriptions_with_devise", action:"subscribe", target_type:"users", devise_type:"users" }
235
- # unsubscribe_user_subscription POST /subscriptions/:id/unsubscribe(.:format)
272
+ # unsubscribe_user_subscription PUT /subscriptions/:id/unsubscribe(.:format)
236
273
  # { controller:"activity_notification/subscriptions_with_devise", action:"unsubscribe", target_type:"users", devise_type:"users" }
237
- # subscribe_to_email_user_subscription POST /subscriptions/:id/subscribe_to_email(.:format)
274
+ # subscribe_to_email_user_subscription PUT /subscriptions/:id/subscribe_to_email(.:format)
238
275
  # { controller:"activity_notification/subscriptions_with_devise", action:"subscribe_to_email", target_type:"users", devise_type:"users" }
239
- # unsubscribe_to_email_user_subscription POST /subscriptions/:id/unsubscribe_to_email(.:format)
276
+ # unsubscribe_to_email_user_subscription PUT /subscriptions/:id/unsubscribe_to_email(.:format)
240
277
  # { controller:"activity_notification/subscriptions_with_devise", action:"unsubscribe_to_email", target_type:"users", devise_type:"users" }
241
- # subscribe_to_optional_target_user_subscription POST /subscriptions/:id/subscribe_to_optional_target(.:format)
278
+ # subscribe_to_optional_target_user_subscription PUT /subscriptions/:id/subscribe_to_optional_target(.:format)
242
279
  # { controller:"activity_notification/subscriptions_with_devise", action:"subscribe_to_optional_target", target_type:"users", devise_type:"users" }
243
- # unsubscribe_to_optional_target_user_subscription POST /subscriptions/:id/unsubscribe_to_optional_target(.:format)
280
+ # unsubscribe_to_optional_target_user_subscription PUT /subscriptions/:id/unsubscribe_to_optional_target(.:format)
244
281
  # { controller:"activity_notification/subscriptions_with_devise", action:"unsubscribe_to_optional_target", target_type:"users", devise_type:"users" }
245
282
  #
283
+ # When you use activity_notification controllers as REST API mode,
284
+ # you can create as follows in your routes:
285
+ # scope :api do
286
+ # scope :"v2" do
287
+ # subscribed_by :users, api_mode: true
288
+ # end
289
+ # end
290
+ # This api_mode option creates the needed routes as REST API:
291
+ # # Subscription as API mode routes
292
+ # GET /subscriptions(.:format)
293
+ # { controller:"activity_notification/subscriptions_api", action:"index", target_type:"users" }
294
+ # GET /subscriptions/find(.:format)
295
+ # { controller:"activity_notification/subscriptions_api", action:"find", target_type:"users" }
296
+ # GET /subscriptions/optional_target_names(.:format)
297
+ # { controller:"activity_notification/subscriptions_api", action:"optional_target_names", target_type:"users" }
298
+ # GET /subscriptions/:id(.:format)
299
+ # { controller:"activity_notification/subscriptions_api", action:"show", target_type:"users" }
300
+ # PUT /subscriptions(.:format)
301
+ # { controller:"activity_notification/subscriptions_api", action:"create", target_type:"users" }
302
+ # DELETE /subscriptions/:id(.:format)
303
+ # { controller:"activity_notification/subscriptions_api", action:"destroy", target_type:"users" }
304
+ # PUT /subscriptions/:id/subscribe(.:format)
305
+ # { controller:"activity_notification/subscriptions_api", action:"subscribe", target_type:"users" }
306
+ # PUT /subscriptions/:id/unsubscribe(.:format)
307
+ # { controller:"activity_notification/subscriptions_api", action:"unsubscribe", target_type:"users" }
308
+ # PUT /subscriptions/:id/subscribe_to_email(.:format)
309
+ # { controller:"activity_notification/subscriptions_api", action:"subscribe_to_email", target_type:"users" }
310
+ # PUT /subscriptions/:id/unsubscribe_to_email(.:format)
311
+ # { controller:"activity_notification/subscriptions_api", action:"unsubscribe_to_email", target_type:"users" }
312
+ # PUT /subscriptions/:id/subscribe_to_optional_target(.:format)
313
+ # { controller:"activity_notification/subscriptions_api", action:"subscribe_to_optional_target", target_type:"users" }
314
+ # PUT /subscriptions/:id/unsubscribe_to_optional_target(.:format)
315
+ # { controller:"activity_notification/subscriptions_api", action:"unsubscribe_to_optional_target", target_type:"users" }
316
+ #
246
317
  # @example Define subscribed_by in config/routes.rb
247
318
  # subscribed_by :users
248
319
  # @example Define subscribed_by with options
249
320
  # subscribed_by :users, except: [:index, :show]
250
321
  # @example Integrated with Devise authentication
251
322
  # subscribed_by :users, with_devise: :users
323
+ # @example Define subscription paths as API mode
324
+ # scope :api do
325
+ # scope :"v2" do
326
+ # subscribed_by :users, api_mode: true
327
+ # end
328
+ # end
252
329
  #
253
330
  # @overload subscribed_by(*resources, *options)
254
331
  # @param [Symbol] resources Resources to notify
255
332
  # @option options [String] :routing_scope (nil) Routing scope for subscription routes
256
333
  # @option options [Symbol] :with_devise (false) Devise resources name for devise integration. Devise integration will be enabled by this option.
257
334
  # @option options [Boolean] :devise_default_routes (false) Whether you will create routes as device default routes assciated with authenticated devise resource as the default target
335
+ # @option options [Boolean] :api_mode (false) Whether you will use activity_notification controllers as REST API mode
258
336
  # @option options [String] :model (:subscriptions) Model name of subscriptions
259
337
  # @option options [String] :controller ("activity_notification/subscriptions" | activity_notification/subscriptions_with_devise") :controller option as resources routing
260
338
  # @option options [Symbol] :as (nil) :as option as resources routing
@@ -266,7 +344,7 @@ module ActionDispatch::Routing
266
344
 
267
345
  resources.each do |target|
268
346
  options[:defaults] = { target_type: target.to_s }.merge(options[:devise_defaults])
269
- resources_options = options.select { |key, _| [:with_devise, :devise_default_routes, :model, :devise_defaults].exclude? key }
347
+ resources_options = options.select { |key, _| [:api_mode, :with_devise, :devise_default_routes, :model, :devise_defaults].exclude? key }
270
348
  if options[:with_devise].present? && options[:devise_default_routes].present?
271
349
  create_subscription_routes options, resources_options
272
350
  else
@@ -305,20 +383,22 @@ module ActionDispatch::Routing
305
383
  # Check resources if it includes target module
306
384
  resources_name = resource.to_s.pluralize.underscore
307
385
  options[:model] ||= resources_name.to_sym
386
+ controller_name = "activity_notification/#{resources_name}"
387
+ controller_name.concat("_api") if options[:api_mode]
308
388
  if options[:with_devise].present?
309
- options[:controller] ||= "activity_notification/#{resources_name}_with_devise"
389
+ options[:controller] ||= "#{controller_name}_with_devise"
310
390
  options[:as] ||= resources_name
311
391
  # Check devise configuration in model
312
392
  options[:devise_defaults] = { devise_type: options[:with_devise].to_s }
313
393
  options[:devise_defaults] = options[:devise_defaults].merge(options.slice(:devise_default_routes))
314
394
  else
315
- options[:controller] ||= "activity_notification/#{resources_name}"
395
+ options[:controller] ||= controller_name
316
396
  options[:devise_defaults] = {}
317
397
  end
318
398
  (options[:except] ||= []).concat(except_actions)
319
399
  if options[:with_subscription].present?
320
400
  options[:subscription_option] = (options[:with_subscription].is_a?(Hash) ? options[:with_subscription] : {})
321
- .merge(options.slice(:with_devise, :devise_default_routes, :routing_scope))
401
+ .merge(options.slice(:api_mode, :with_devise, :devise_default_routes, :routing_scope))
322
402
  end
323
403
  # Support other options like :as, :path_prefix, :path_names ...
324
404
  options
@@ -337,7 +417,7 @@ module ActionDispatch::Routing
337
417
  end
338
418
  member do
339
419
  get :move unless ignore_path?(:move, options)
340
- post :open unless ignore_path?(:open, options)
420
+ put :open unless ignore_path?(:open, options)
341
421
  end
342
422
  end
343
423
  end
@@ -350,13 +430,17 @@ module ActionDispatch::Routing
350
430
  # @param [Hash] resources_options Options to send resources method
351
431
  def create_subscription_routes(options = {}, resources_options = [])
352
432
  self.resources options[:model], resources_options do
433
+ collection do
434
+ get :find unless ignore_path?(:find, options)
435
+ get :optional_target_names if options[:api_mode] && !ignore_path?(:optional_target_names, options)
436
+ end
353
437
  member do
354
- post :subscribe unless ignore_path?(:subscribe, options)
355
- post :unsubscribe unless ignore_path?(:unsubscribe, options)
356
- post :subscribe_to_email unless ignore_path?(:subscribe_to_email, options)
357
- post :unsubscribe_to_email unless ignore_path?(:unsubscribe_to_email, options)
358
- post :subscribe_to_optional_target unless ignore_path?(:subscribe_to_optional_target, options)
359
- post :unsubscribe_to_optional_target unless ignore_path?(:unsubscribe_to_optional_target, options)
438
+ put :subscribe unless ignore_path?(:subscribe, options)
439
+ put :unsubscribe unless ignore_path?(:unsubscribe, options)
440
+ put :subscribe_to_email unless ignore_path?(:subscribe_to_email, options)
441
+ put :unsubscribe_to_email unless ignore_path?(:unsubscribe_to_email, options)
442
+ put :subscribe_to_optional_target unless ignore_path?(:subscribe_to_optional_target, options)
443
+ put :unsubscribe_to_optional_target unless ignore_path?(:unsubscribe_to_optional_target, options)
360
444
  end
361
445
  end
362
446
  end
@@ -143,6 +143,8 @@ module ActivityNotification
143
143
  # @option params [String] :layout (nil) Layout template name
144
144
  # @option params [String] :layout_root ('layouts') Root path of layout template
145
145
  # @option params [String, Symbol] :fallback (nil) Fallback template to use when MissingTemplate is raised. Set :text to use i18n text as fallback.
146
+ # @option params [Hash] :assigns Parameters to be set as assigns
147
+ # @option params [Hash] :locals Parameters to be set as locals
146
148
  # @option params [Hash] others Parameters to be set as locals
147
149
  # @return [String] Rendered view or text as string
148
150
  def render(context, params = {})
@@ -150,16 +152,17 @@ module ActivityNotification
150
152
 
151
153
  partial = partial_path(*params.values_at(:partial, :partial_root, :target))
152
154
  layout = layout_path(*params.values_at(:layout, :layout_root))
155
+ assigns = prepare_assigns(params)
153
156
  locals = prepare_locals(params)
154
157
 
155
158
  begin
156
- context.render params.merge(partial: partial, layout: layout, locals: locals)
159
+ context.render params.merge(partial: partial, layout: layout, assigns: assigns, locals: locals)
157
160
  rescue ActionView::MissingTemplate => e
158
161
  if params[:fallback] == :text
159
162
  context.render plain: self.text(params)
160
163
  elsif params[:fallback].present?
161
164
  partial = partial_path(*params.values_at(:fallback, :partial_root, :target))
162
- context.render params.merge(partial: partial, layout: layout, locals: locals)
165
+ context.render params.merge(partial: partial, layout: layout, assigns: assigns, locals: locals)
163
166
  else
164
167
  raise e
165
168
  end
@@ -196,6 +199,14 @@ module ActivityNotification
196
199
  select_path(path, root)
197
200
  end
198
201
 
202
+ # Returns assigns parameter for view
203
+ #
204
+ # @param [Hash] params Parameters to add parameters at assigns
205
+ # @return [Hash] assigns parameter
206
+ def prepare_assigns(params)
207
+ params.delete(:assigns) || {}
208
+ end
209
+
199
210
  # Returns locals parameter for view
200
211
  # There are three variables to be add by method:
201
212
  # * notification
@@ -99,14 +99,26 @@ module ActivityNotification
99
99
  # * Whether activity_notification publishes notifications to ActionCable channel.
100
100
  # Specified method or symbol is expected to return true (not nil) or false (nil).
101
101
  # This parameter is a optional since default value is false.
102
- # To use ActionCable for notifications, action_cable_allowed option must return true (not nil) in both of notifiable and target model.
103
- # This can be also configured default option in initializer.
102
+ # To use ActionCable for notifications, action_cable_allowed option of target model must also return true (not nil).
103
+ # This can be also configured default option in initializer as action_cable_enabled.
104
104
  # @example Enable notification ActionCable for this notifiable model
105
105
  # # app/models/comment.rb
106
106
  # class Comment < ActiveRecord::Base
107
107
  # acts_as_notifiable :users, targets: User.all, action_cable_allowed: true
108
108
  # end
109
109
  #
110
+ # * :action_cable_api_allowed
111
+ # * Whether activity_notification publishes notifications to ActionCable API channel.
112
+ # Specified method or symbol is expected to return true (not nil) or false (nil).
113
+ # This parameter is a optional since default value is false.
114
+ # To use ActionCable for notifications, action_cable_allowed option of target model must also return true (not nil).
115
+ # This can be also configured default option in initializer as action_cable_api_enabled.
116
+ # @example Enable notification ActionCable for this notifiable model
117
+ # # app/models/comment.rb
118
+ # class Comment < ActiveRecord::Base
119
+ # acts_as_notifiable :users, targets: User.all, action_cable_api_allowed: true
120
+ # end
121
+ #
110
122
  # * :notifiable_path
111
123
  # * Path to redirect from open or move action of notification controller.
112
124
  # You can also use this notifiable_path as notifiable link in notification view.
@@ -227,13 +239,34 @@ module ActivityNotification
227
239
  configured_params.update(add_destroy_dependency(target_type, options[:dependent_notifications]))
228
240
  end
229
241
 
242
+ # :nocov:
243
+ if Rails::VERSION::MAJOR >= 5
244
+ if options[:action_cable_allowed] || (ActivityNotification.config.action_cable_enabled && options[:action_cable_allowed] != false)
245
+ options[:optional_targets] ||= {}
246
+ require 'activity_notification/optional_targets/action_cable_channel'
247
+ unless options[:optional_targets].has_key?(ActivityNotification::OptionalTarget::ActionCableChannel)
248
+ options[:optional_targets][ActivityNotification::OptionalTarget::ActionCableChannel] = {}
249
+ end
250
+ end
251
+
252
+ if options[:action_cable_api_allowed] || (ActivityNotification.config.action_cable_api_enabled && options[:action_cable_api_allowed] != false)
253
+ options[:optional_targets] ||= {}
254
+ require 'activity_notification/optional_targets/action_cable_api_channel'
255
+ unless options[:optional_targets].has_key?(ActivityNotification::OptionalTarget::ActionCableApiChannel)
256
+ options[:optional_targets][ActivityNotification::OptionalTarget::ActionCableApiChannel] = {}
257
+ end
258
+ end
259
+ end
260
+ # :nocov:
261
+
230
262
  if options[:optional_targets].is_a?(Hash)
231
263
  options[:optional_targets] = arrange_optional_targets_option(options[:optional_targets])
232
264
  end
233
265
 
234
266
  options[:printable_notifiable_name] ||= options.delete(:printable_name)
235
267
  configured_params
236
- .merge set_acts_as_parameters_for_target(target_type, [:targets, :group, :group_expiry_delay, :parameters, :email_allowed, :action_cable_allowed], options, "notification_")
268
+ .merge set_acts_as_parameters_for_target(target_type, [:targets, :group, :group_expiry_delay, :parameters, :email_allowed], options, "notification_")
269
+ .merge set_acts_as_parameters_for_target(target_type, [:action_cable_allowed, :action_cable_api_allowed], options, "notifiable_")
237
270
  .merge set_acts_as_parameters_for_target(target_type, [:notifier, :notifiable_path, :printable_notifiable_name, :optional_targets], options)
238
271
  end
239
272
 
@@ -247,6 +280,7 @@ module ActivityNotification
247
280
  :parameters,
248
281
  :email_allowed,
249
282
  :action_cable_allowed,
283
+ :action_cable_api_allowed,
250
284
  :notifiable_path,
251
285
  :printable_notifiable_name, :printable_name,
252
286
  :dependent_notifications,
@@ -299,21 +333,9 @@ module ActivityNotification
299
333
  # https://github.com/rails/rails/issues/30779
300
334
  # https://github.com/rails/rails/pull/32167
301
335
 
302
- # :only-rails5-plus#only-rails-without-callback-issue:
303
- # :only-rails5-plus#only-rails-without-callback-issue#except-dynamoid:
304
- # :except-rails5-plus#only-rails-without-callback-issue:
305
- # :except-rails5-plus#only-rails-without-callback-issue#except-dynamoid:
336
+ # :nocov:
306
337
  if !(Gem::Version.new("5.1.6") <= Rails.gem_version && Rails.gem_version < Gem::Version.new("5.2.2")) && respond_to?(:after_commit)
307
338
  after_commit tracked_proc, on: tracked_action
308
- # :only-rails5-plus#only-rails-without-callback-issue:
309
- # :only-rails5-plus#only-rails-without-callback-issue#except-dynamoid:
310
- # :except-rails5-plus#only-rails-without-callback-issue:
311
- # :except-rails5-plus#only-rails-without-callback-issue#except-dynamoid:
312
-
313
- # :only-rails5-plus#only-rails-with-callback-issue:
314
- # :only-rails5-plus#only-rails-with-callback-issue#except-dynamoid:
315
- # :except-rails5-plus#only-rails-with-callback-issue:
316
- # :except-rails5-plus#only-rails-with-callback-issue#except-dynamoid:
317
339
  else
318
340
  case tracked_action
319
341
  when :create
@@ -322,10 +344,7 @@ module ActivityNotification
322
344
  after_update tracked_proc
323
345
  end
324
346
  end
325
- # :only-rails5-plus#only-rails-with-callback-issue:
326
- # :only-rails5-plus#only-rails-with-callback-issue#except-dynamoid:
327
- # :except-rails5-plus#only-rails-with-callback-issue:
328
- # :except-rails5-plus#only-rails-with-callback-issue#except-dynamoid:
347
+ # :nocov:
329
348
  end
330
349
 
331
350
  # Adds destroy dependency.