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
@@ -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.