activity_notification 1.4.4 → 2.2.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.
- checksums.yaml +5 -5
- data/.github/ISSUE_TEMPLATE/bug_report.md +22 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +17 -0
- data/.github/pull_request_template.md +13 -0
- data/.github/workflows/build.yml +116 -0
- data/.gitignore +15 -3
- data/CHANGELOG.md +200 -1
- data/Gemfile +17 -2
- data/Procfile +2 -0
- data/README.md +168 -1033
- data/Rakefile +19 -10
- data/activity_notification.gemspec +14 -9
- data/app/channels/activity_notification/notification_api_channel.rb +12 -0
- data/app/channels/activity_notification/notification_api_with_devise_channel.rb +46 -0
- data/app/channels/activity_notification/notification_channel.rb +37 -0
- data/app/channels/activity_notification/notification_with_devise_channel.rb +51 -0
- data/app/controllers/activity_notification/apidocs_controller.rb +75 -0
- data/app/controllers/activity_notification/notifications_api_controller.rb +143 -0
- data/app/controllers/activity_notification/notifications_api_with_devise_controller.rb +7 -0
- data/app/controllers/activity_notification/notifications_controller.rb +60 -54
- data/app/controllers/activity_notification/subscriptions_api_controller.rb +197 -0
- data/app/controllers/activity_notification/subscriptions_api_with_devise_controller.rb +7 -0
- data/app/controllers/activity_notification/subscriptions_controller.rb +83 -73
- data/app/jobs/activity_notification/notify_all_job.rb +25 -0
- data/app/jobs/activity_notification/notify_job.rb +26 -0
- data/app/jobs/activity_notification/notify_to_job.rb +25 -0
- data/app/views/activity_notification/notifications/default/_default.html.erb +23 -23
- data/app/views/activity_notification/notifications/default/_default_without_grouping.html.erb +19 -19
- data/app/views/activity_notification/notifications/default/_index.html.erb +3 -3
- data/app/views/activity_notification/notifications/default/index.html.erb +60 -7
- data/app/views/activity_notification/notifications/default/open.js.erb +2 -2
- data/app/views/activity_notification/notifications/default/open_all.js.erb +2 -2
- data/app/views/activity_notification/notifications/default/show.html.erb +2 -2
- data/app/views/activity_notification/optional_targets/default/action_cable_channel/_default.html.erb +176 -0
- data/app/views/activity_notification/optional_targets/default/base/_default.text.erb +1 -1
- data/app/views/activity_notification/optional_targets/default/slack/_default.text.erb +1 -1
- data/app/views/activity_notification/subscriptions/default/_form.html.erb +2 -2
- data/app/views/activity_notification/subscriptions/default/_notification_keys.html.erb +5 -33
- data/app/views/activity_notification/subscriptions/default/_subscription.html.erb +8 -8
- data/app/views/activity_notification/subscriptions/default/index.html.erb +13 -9
- data/app/views/activity_notification/subscriptions/default/show.html.erb +3 -3
- data/app/views/activity_notification/subscriptions/default/subscribe.js.erb +1 -1
- data/app/views/activity_notification/subscriptions/default/subscribe_to_email.js.erb +1 -1
- data/app/views/activity_notification/subscriptions/default/subscribe_to_optional_target.js.erb +1 -1
- data/app/views/activity_notification/subscriptions/default/unsubscribe.js.erb +1 -1
- data/app/views/activity_notification/subscriptions/default/unsubscribe_to_email.js.erb +1 -1
- data/app/views/activity_notification/subscriptions/default/unsubscribe_to_optional_target.js.erb +1 -1
- data/bin/_dynamodblocal +4 -0
- data/bin/bundle_update.sh +7 -0
- data/bin/deploy_on_heroku.sh +16 -0
- data/bin/install_dynamodblocal.sh +5 -0
- data/bin/start_dynamodblocal.sh +47 -0
- data/bin/stop_dynamodblocal.sh +34 -0
- data/docs/CODE_OF_CONDUCT.md +76 -0
- data/docs/CONTRIBUTING.md +36 -0
- data/docs/Functions.md +1146 -0
- data/docs/Setup.md +817 -0
- data/docs/Testing.md +148 -0
- data/gemfiles/Gemfile.rails-5.0 +8 -1
- data/gemfiles/Gemfile.rails-5.1 +7 -1
- data/gemfiles/Gemfile.rails-5.2 +24 -0
- data/gemfiles/Gemfile.rails-6.0 +23 -0
- data/gemfiles/Gemfile.rails-6.1 +22 -0
- data/gemfiles/Gemfile.rails-7.0 +25 -0
- data/lib/activity_notification/apis/notification_api.rb +356 -159
- data/lib/activity_notification/apis/subscription_api.rb +98 -59
- data/lib/activity_notification/apis/swagger.rb +6 -0
- data/lib/activity_notification/common.rb +18 -7
- data/lib/activity_notification/config.rb +176 -30
- data/lib/activity_notification/controllers/common_api_controller.rb +30 -0
- data/lib/activity_notification/controllers/common_controller.rb +47 -27
- data/lib/activity_notification/controllers/concerns/swagger/error_responses.rb +55 -0
- data/lib/activity_notification/controllers/concerns/swagger/notifications_api.rb +273 -0
- data/lib/activity_notification/controllers/concerns/swagger/notifications_parameters.rb +92 -0
- data/lib/activity_notification/controllers/concerns/swagger/subscriptions_api.rb +405 -0
- data/lib/activity_notification/controllers/concerns/swagger/subscriptions_parameters.rb +50 -0
- data/lib/activity_notification/controllers/devise_authentication_controller.rb +22 -5
- data/lib/activity_notification/gem_version.rb +14 -0
- data/lib/activity_notification/helpers/errors.rb +6 -0
- data/lib/activity_notification/helpers/view_helpers.rb +118 -28
- data/lib/activity_notification/mailers/helpers.rb +19 -12
- data/lib/activity_notification/models/concerns/notifiable.rb +142 -55
- data/lib/activity_notification/models/concerns/subscriber.rb +28 -13
- data/lib/activity_notification/models/concerns/swagger/error_schema.rb +36 -0
- data/lib/activity_notification/models/concerns/swagger/notification_schema.rb +209 -0
- data/lib/activity_notification/models/concerns/swagger/subscription_schema.rb +162 -0
- data/lib/activity_notification/models/concerns/target.rb +131 -32
- data/lib/activity_notification/models/notification.rb +1 -0
- data/lib/activity_notification/models/subscription.rb +1 -0
- data/lib/activity_notification/models.rb +23 -1
- data/lib/activity_notification/optional_targets/action_cable_api_channel.rb +69 -0
- data/lib/activity_notification/optional_targets/action_cable_channel.rb +68 -0
- data/lib/activity_notification/optional_targets/base.rb +9 -15
- data/lib/activity_notification/orm/active_record/notification.rb +23 -34
- data/lib/activity_notification/orm/active_record/subscription.rb +1 -1
- data/lib/activity_notification/orm/active_record.rb +1 -1
- data/lib/activity_notification/orm/dynamoid/extension.rb +262 -0
- data/lib/activity_notification/orm/dynamoid/notification.rb +224 -0
- data/lib/activity_notification/orm/dynamoid/subscription.rb +82 -0
- data/lib/activity_notification/orm/dynamoid.rb +530 -0
- data/lib/activity_notification/orm/mongoid/notification.rb +29 -28
- data/lib/activity_notification/orm/mongoid/subscription.rb +3 -3
- data/lib/activity_notification/orm/mongoid.rb +33 -1
- data/lib/activity_notification/rails/routes.rb +273 -60
- data/lib/activity_notification/renderable.rb +22 -7
- data/lib/activity_notification/roles/acts_as_notifiable.rb +64 -1
- data/lib/activity_notification/roles/acts_as_target.rb +99 -9
- data/lib/activity_notification/version.rb +1 -1
- data/lib/activity_notification.rb +14 -0
- data/lib/generators/activity_notification/controllers_generator.rb +2 -1
- data/lib/generators/templates/activity_notification.rb +61 -7
- data/lib/generators/templates/controllers/README +2 -2
- data/lib/generators/templates/controllers/notifications_api_controller.rb +31 -0
- data/lib/generators/templates/controllers/notifications_api_with_devise_controller.rb +31 -0
- data/lib/generators/templates/controllers/notifications_controller.rb +1 -37
- data/lib/generators/templates/controllers/notifications_with_devise_controller.rb +1 -45
- data/lib/generators/templates/controllers/subscriptions_api_controller.rb +61 -0
- data/lib/generators/templates/controllers/subscriptions_api_with_devise_controller.rb +61 -0
- data/lib/generators/templates/controllers/subscriptions_controller.rb +14 -37
- data/lib/generators/templates/controllers/subscriptions_with_devise_controller.rb +14 -45
- data/lib/generators/templates/migrations/migration.rb +5 -5
- data/lib/generators/templates/models/README +8 -4
- data/lib/generators/templates/models/notification.rb +1 -1
- data/lib/generators/templates/models/subscription.rb +1 -1
- data/lib/tasks/activity_notification_tasks.rake +14 -4
- data/package.json +8 -0
- data/spec/channels/notification_api_channel_shared_examples.rb +59 -0
- data/spec/channels/notification_api_channel_spec.rb +49 -0
- data/spec/channels/notification_api_with_devise_channel_spec.rb +76 -0
- data/spec/channels/notification_channel_shared_examples.rb +59 -0
- data/spec/channels/notification_channel_spec.rb +48 -0
- data/spec/channels/notification_with_devise_channel_spec.rb +97 -0
- data/spec/concerns/apis/notification_api_spec.rb +177 -12
- data/spec/concerns/apis/subscription_api_spec.rb +146 -4
- data/spec/concerns/common_spec.rb +25 -3
- data/spec/concerns/models/notifiable_spec.rb +161 -11
- data/spec/concerns/models/subscriber_spec.rb +253 -79
- data/spec/concerns/models/target_spec.rb +180 -47
- data/spec/concerns/renderable_spec.rb +35 -16
- data/spec/config_spec.rb +52 -1
- data/spec/controllers/controller_spec_utility.rb +100 -0
- data/spec/controllers/notifications_api_controller_shared_examples.rb +506 -0
- data/spec/controllers/notifications_api_controller_spec.rb +19 -0
- data/spec/controllers/notifications_api_with_devise_controller_spec.rb +60 -0
- data/spec/controllers/notifications_controller_shared_examples.rb +55 -76
- data/spec/controllers/notifications_controller_spec.rb +1 -2
- data/spec/controllers/notifications_with_devise_controller_spec.rb +14 -8
- data/spec/controllers/subscriptions_api_controller_shared_examples.rb +750 -0
- data/spec/controllers/subscriptions_api_controller_spec.rb +19 -0
- data/spec/controllers/subscriptions_api_with_devise_controller_spec.rb +60 -0
- data/spec/controllers/subscriptions_controller_shared_examples.rb +99 -121
- data/spec/controllers/subscriptions_controller_spec.rb +1 -2
- data/spec/controllers/subscriptions_with_devise_controller_spec.rb +14 -8
- data/spec/factories/notifications.rb +1 -1
- data/spec/factories/subscriptions.rb +3 -3
- data/spec/factories/users.rb +3 -3
- data/spec/generators/migration/migration_generator_spec.rb +29 -4
- data/spec/helpers/view_helpers_spec.rb +31 -21
- data/spec/jobs/notify_all_job_spec.rb +23 -0
- data/spec/jobs/notify_job_spec.rb +23 -0
- data/spec/jobs/notify_to_job_spec.rb +23 -0
- data/spec/mailers/mailer_spec.rb +42 -1
- data/spec/models/dummy/dummy_group_spec.rb +4 -0
- data/spec/models/dummy/dummy_notifiable_spec.rb +4 -0
- data/spec/models/dummy/dummy_notifier_spec.rb +4 -0
- data/spec/models/dummy/dummy_subscriber_spec.rb +3 -0
- data/spec/models/dummy/dummy_target_spec.rb +4 -0
- data/spec/models/notification_spec.rb +181 -45
- data/spec/models/subscription_spec.rb +77 -27
- data/spec/optional_targets/action_cable_api_channel_spec.rb +34 -0
- data/spec/optional_targets/action_cable_channel_spec.rb +41 -0
- data/spec/optional_targets/amazon_sns_spec.rb +0 -2
- data/spec/optional_targets/slack_spec.rb +0 -2
- data/spec/orm/dynamoid_spec.rb +115 -0
- data/spec/rails_app/Rakefile +9 -0
- data/spec/rails_app/app/assets/config/manifest.js +3 -0
- data/spec/rails_app/app/assets/javascripts/application.js +2 -1
- data/spec/rails_app/app/assets/javascripts/cable.js +12 -0
- data/spec/rails_app/app/controllers/admins_controller.rb +21 -0
- data/spec/rails_app/app/controllers/application_controller.rb +1 -1
- data/spec/rails_app/app/controllers/articles_controller.rb +6 -1
- data/spec/rails_app/app/controllers/comments_controller.rb +3 -1
- data/spec/rails_app/app/controllers/spa_controller.rb +7 -0
- data/spec/rails_app/app/controllers/users/notifications_controller.rb +0 -65
- data/spec/rails_app/app/controllers/users/notifications_with_devise_controller.rb +0 -73
- data/spec/rails_app/app/controllers/users/subscriptions_controller.rb +0 -77
- data/spec/rails_app/app/controllers/users/subscriptions_with_devise_controller.rb +0 -85
- data/spec/rails_app/app/controllers/users_controller.rb +26 -0
- data/spec/rails_app/app/javascript/App.vue +40 -0
- data/spec/rails_app/app/javascript/components/DeviseTokenAuth.vue +82 -0
- data/spec/rails_app/app/javascript/components/Top.vue +98 -0
- data/spec/rails_app/app/javascript/components/notifications/Index.vue +200 -0
- data/spec/rails_app/app/javascript/components/notifications/Notification.vue +133 -0
- data/spec/rails_app/app/javascript/components/notifications/NotificationContent.vue +122 -0
- data/spec/rails_app/app/javascript/components/subscriptions/Index.vue +279 -0
- data/spec/rails_app/app/javascript/components/subscriptions/NewSubscription.vue +112 -0
- data/spec/rails_app/app/javascript/components/subscriptions/NotificationKey.vue +141 -0
- data/spec/rails_app/app/javascript/components/subscriptions/Subscription.vue +226 -0
- data/spec/rails_app/app/javascript/config/development.js +5 -0
- data/spec/rails_app/app/javascript/config/environment.js +7 -0
- data/spec/rails_app/app/javascript/config/production.js +5 -0
- data/spec/rails_app/app/javascript/config/test.js +5 -0
- data/spec/rails_app/app/javascript/packs/application.js +18 -0
- data/spec/rails_app/app/javascript/packs/spa.js +14 -0
- data/spec/rails_app/app/javascript/router/index.js +73 -0
- data/spec/rails_app/app/javascript/store/index.js +37 -0
- data/spec/rails_app/app/models/admin.rb +15 -10
- data/spec/rails_app/app/models/article.rb +25 -20
- data/spec/rails_app/app/models/comment.rb +27 -62
- data/spec/rails_app/app/models/dummy/dummy_base.rb +1 -0
- data/spec/rails_app/app/models/dummy/dummy_group.rb +9 -0
- data/spec/rails_app/app/models/dummy/dummy_notifiable.rb +1 -0
- data/spec/rails_app/app/models/dummy/dummy_notifiable_target.rb +27 -0
- data/spec/rails_app/app/models/dummy/dummy_notifier.rb +1 -0
- data/spec/rails_app/app/models/dummy/dummy_subscriber.rb +1 -0
- data/spec/rails_app/app/models/dummy/dummy_target.rb +1 -0
- data/spec/rails_app/app/models/user.rb +44 -18
- data/spec/rails_app/app/views/activity_notification/notifications/default/article/_update.html.erb +146 -0
- data/spec/rails_app/app/views/activity_notification/notifications/users/overridden/custom/_test.html.erb +1 -0
- data/spec/rails_app/app/views/activity_notification/optional_targets/admins/amazon_sns/comment/_default.text.erb +1 -1
- data/spec/rails_app/app/views/articles/index.html.erb +68 -20
- data/spec/rails_app/app/views/articles/show.html.erb +1 -1
- data/spec/rails_app/app/views/layouts/_header.html.erb +9 -3
- data/spec/rails_app/app/views/spa/index.html.erb +2 -0
- data/spec/rails_app/babel.config.js +72 -0
- data/spec/rails_app/bin/webpack +18 -0
- data/spec/rails_app/bin/webpack-dev-server +18 -0
- data/spec/rails_app/config/application.rb +26 -6
- data/spec/rails_app/config/cable.yml +8 -0
- data/spec/rails_app/config/database.yml +1 -1
- data/spec/rails_app/config/dynamoid.rb +13 -0
- data/spec/rails_app/config/environment.rb +5 -1
- data/spec/rails_app/config/environments/development.rb +5 -0
- data/spec/rails_app/config/environments/production.rb +7 -1
- data/spec/rails_app/config/environments/test.rb +7 -11
- data/spec/rails_app/config/initializers/activity_notification.rb +63 -9
- data/spec/rails_app/config/initializers/copy_it.aws.rb.template +6 -0
- data/spec/rails_app/config/initializers/devise_token_auth.rb +55 -0
- data/spec/rails_app/config/initializers/mysql.rb +9 -0
- data/spec/rails_app/config/locales/activity_notification.en.yml +10 -4
- data/spec/rails_app/config/routes.rb +42 -1
- data/spec/rails_app/config/webpack/development.js +5 -0
- data/spec/rails_app/config/webpack/environment.js +7 -0
- data/spec/rails_app/config/webpack/loaders/vue.js +6 -0
- data/spec/rails_app/config/webpack/production.js +5 -0
- data/spec/rails_app/config/webpack/test.js +5 -0
- data/spec/rails_app/config/webpacker.yml +97 -0
- data/spec/rails_app/db/migrate/{20160715050433_create_test_tables.rb → 20160716000000_create_test_tables.rb} +1 -1
- data/spec/rails_app/db/migrate/{20160715050420_create_activity_notification_tables.rb → 20181209000000_create_activity_notification_tables.rb} +3 -3
- data/spec/rails_app/db/migrate/20191201000000_add_tokens_to_users.rb +10 -0
- data/spec/rails_app/db/schema.rb +46 -43
- data/spec/rails_app/db/seeds.rb +28 -4
- data/spec/rails_app/lib/custom_optional_targets/raise_error.rb +14 -0
- data/spec/rails_app/lib/mailer_previews/mailer_preview.rb +14 -4
- data/spec/rails_app/package.json +23 -0
- data/spec/rails_app/postcss.config.js +12 -0
- data/spec/roles/acts_as_group_spec.rb +0 -2
- data/spec/roles/acts_as_notifiable_spec.rb +80 -20
- data/spec/roles/acts_as_notifier_spec.rb +0 -2
- data/spec/roles/acts_as_target_spec.rb +1 -5
- data/spec/spec_helper.rb +13 -11
- data/spec/version_spec.rb +31 -0
- metadata +306 -53
- data/.travis.yml +0 -85
- data/Gemfile.lock +0 -234
- data/gemfiles/Gemfile.rails-4.2 +0 -17
- data/gemfiles/Gemfile.rails-4.2.lock +0 -225
- data/gemfiles/Gemfile.rails-5.0.lock +0 -234
- data/gemfiles/Gemfile.rails-5.1.lock +0 -234
- data/spec/rails_app/app/views/activity_notification/notifications/users/overriden/custom/_test.html.erb +0 -1
- /data/spec/rails_app/app/{models → assets/images}/.keep +0 -0
|
@@ -23,9 +23,28 @@ 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
|
|
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
|
+
# You can also configure notification routes with scope like this:
|
|
30
|
+
# scope :myscope, as: :myscope do
|
|
31
|
+
# notify_to :users, routing_scope: :myscope
|
|
32
|
+
# end
|
|
33
|
+
# This routing_scope option creates the needed routes with specified scope like this:
|
|
34
|
+
# # Notification routes
|
|
35
|
+
# myscope_user_notifications GET /myscope/users/:user_id/notifications(.:format)
|
|
36
|
+
# { controller:"activity_notification/notifications", action:"index", target_type:"users", routing_scope: :myscope }
|
|
37
|
+
# myscope_user_notification GET /myscope/users/:user_id/notifications/:id(.:format)
|
|
38
|
+
# { controller:"activity_notification/notifications", action:"show", target_type:"users", routing_scope: :myscope }
|
|
39
|
+
# myscope_user_notification DELETE /myscope/users/:user_id/notifications/:id(.:format)
|
|
40
|
+
# { controller:"activity_notification/notifications", action:"destroy", target_type:"users", routing_scope: :myscope }
|
|
41
|
+
# open_all_myscope_user_notifications POST /myscope/users/:user_id/notifications/open_all(.:format)
|
|
42
|
+
# { controller:"activity_notification/notifications", action:"open_all", target_type:"users", routing_scope: :myscope }
|
|
43
|
+
# move_myscope_user_notification GET /myscope/users/:user_id/notifications/:id/move(.:format)
|
|
44
|
+
# { controller:"activity_notification/notifications", action:"move", target_type:"users", routing_scope: :myscope }
|
|
45
|
+
# open_myscope_user_notification PUT /myscope/users/:user_id/notifications/:id/open(.:format)
|
|
46
|
+
# { controller:"activity_notification/notifications", action:"open", target_type:"users", routing_scope: :myscope }
|
|
47
|
+
#
|
|
29
48
|
# When you use devise authentication and you want make notification targets assciated with devise,
|
|
30
49
|
# you can create as follows in your routes:
|
|
31
50
|
# notify_to :users, with_devise: :users
|
|
@@ -41,9 +60,48 @@ module ActionDispatch::Routing
|
|
|
41
60
|
# { controller:"activity_notification/notifications_with_devise", action:"open_all", target_type:"users", devise_type:"users" }
|
|
42
61
|
# move_user_notification GET /users/:user_id/notifications/:id/move(.:format)
|
|
43
62
|
# { controller:"activity_notification/notifications_with_devise", action:"move", target_type:"users", devise_type:"users" }
|
|
44
|
-
# open_user_notification
|
|
63
|
+
# open_user_notification PUT /users/:user_id/notifications/:id/open(.:format)
|
|
64
|
+
# { controller:"activity_notification/notifications_with_devise", action:"open", target_type:"users", devise_type:"users" }
|
|
65
|
+
#
|
|
66
|
+
# When you use with_devise option and you want to make simple default routes as follows, you can use devise_default_routes option:
|
|
67
|
+
# notify_to :users, with_devise: :users, devise_default_routes: true
|
|
68
|
+
# These with_devise and devise_default_routes options create the needed routes assciated with authenticated devise resource as the default target
|
|
69
|
+
# # Notification with default devise routes
|
|
70
|
+
# user_notifications GET /notifications(.:format)
|
|
71
|
+
# { controller:"activity_notification/notifications_with_devise", action:"index", target_type:"users", devise_type:"users" }
|
|
72
|
+
# user_notification GET /notifications/:id(.:format)
|
|
73
|
+
# { controller:"activity_notification/notifications_with_devise", action:"show", target_type:"users", devise_type:"users" }
|
|
74
|
+
# user_notification DELETE /notifications/:id(.:format)
|
|
75
|
+
# { controller:"activity_notification/notifications_with_devise", action:"destroy", target_type:"users", devise_type:"users" }
|
|
76
|
+
# open_all_user_notifications POST /notifications/open_all(.:format)
|
|
77
|
+
# { controller:"activity_notification/notifications_with_devise", action:"open_all", target_type:"users", devise_type:"users" }
|
|
78
|
+
# move_user_notification GET /notifications/:id/move(.:format)
|
|
79
|
+
# { controller:"activity_notification/notifications_with_devise", action:"move", target_type:"users", devise_type:"users" }
|
|
80
|
+
# open_user_notification PUT /notifications/:id/open(.:format)
|
|
45
81
|
# { controller:"activity_notification/notifications_with_devise", action:"open", target_type:"users", devise_type:"users" }
|
|
46
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
|
+
#
|
|
47
105
|
# When you would like to define subscription management paths with notification paths,
|
|
48
106
|
# you can create as follows in your routes:
|
|
49
107
|
# notify_to :users, with_subscription: true
|
|
@@ -60,32 +118,43 @@ module ActionDispatch::Routing
|
|
|
60
118
|
# notify_to :users, with_devise: :users
|
|
61
119
|
# @example Define notification paths including subscription paths
|
|
62
120
|
# notify_to :users, with_subscription: true
|
|
121
|
+
# @example Integrated with Devise authentication as simple default routes including subscription management
|
|
122
|
+
# notify_to :users, with_devise: :users, devise_default_routes: true, with_subscription: true
|
|
123
|
+
# @example Integrated with Devise authentication as simple default routes with scope including subscription management
|
|
124
|
+
# scope :myscope, as: :myscope do
|
|
125
|
+
# notify_to :myscope, with_devise: :users, devise_default_routes: true, with_subscription: true, routing_scope: :myscope
|
|
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
|
|
63
133
|
#
|
|
64
134
|
# @overload notify_to(*resources, *options)
|
|
65
135
|
# @param [Symbol] resources Resources to notify
|
|
66
|
-
# @option options [
|
|
67
|
-
# @option options [
|
|
68
|
-
# @option options [
|
|
69
|
-
# @option options [
|
|
70
|
-
# @option options [
|
|
71
|
-
# @option options [
|
|
72
|
-
# @option options [
|
|
136
|
+
# @option options [String] :routing_scope (nil) Routing scope for notification routes
|
|
137
|
+
# @option options [Symbol] :with_devise (false) Devise resources name for devise integration. Devise integration will be enabled by this option.
|
|
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
|
|
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.
|
|
141
|
+
# @option options [String] :model (:notifications) Model name of notifications
|
|
142
|
+
# @option options [String] :controller ("activity_notification/notifications" | activity_notification/notifications_with_devise") :controller option as resources routing
|
|
143
|
+
# @option options [Symbol] :as (nil) :as option as resources routing
|
|
144
|
+
# @option options [Array] :only (nil) :only option as resources routing
|
|
145
|
+
# @option options [Array] :except (nil) :except option as resources routing
|
|
73
146
|
# @return [ActionDispatch::Routing::Mapper] Routing mapper instance
|
|
74
147
|
def notify_to(*resources)
|
|
75
148
|
options = create_options(:notifications, resources.extract_options!, [:new, :create, :edit, :update])
|
|
76
149
|
|
|
77
150
|
resources.each do |target|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
member do
|
|
86
|
-
get :move unless ignore_path?(:move, options)
|
|
87
|
-
post :open unless ignore_path?(:open, options)
|
|
88
|
-
end
|
|
151
|
+
options[:defaults] = { target_type: target.to_s }.merge(options[:devise_defaults])
|
|
152
|
+
resources_options = options.select { |key, _| [:api_mode, :with_devise, :devise_default_routes, :with_subscription, :subscription_option, :model, :devise_defaults].exclude? key }
|
|
153
|
+
if options[:with_devise].present? && options[:devise_default_routes].present?
|
|
154
|
+
create_notification_routes options, resources_options
|
|
155
|
+
else
|
|
156
|
+
self.resources target, only: :none do
|
|
157
|
+
create_notification_routes options, resources_options
|
|
89
158
|
end
|
|
90
159
|
end
|
|
91
160
|
|
|
@@ -106,83 +175,181 @@ module ActionDispatch::Routing
|
|
|
106
175
|
# # Subscription routes
|
|
107
176
|
# user_subscriptions GET /users/:user_id/subscriptions(.:format)
|
|
108
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" }
|
|
109
180
|
# user_subscription GET /users/:user_id/subscriptions/:id(.:format)
|
|
110
181
|
# { controller:"activity_notification/subscriptions", action:"show", target_type:"users" }
|
|
111
|
-
#
|
|
182
|
+
# PUT /users/:user_id/subscriptions(.:format)
|
|
112
183
|
# { controller:"activity_notification/subscriptions", action:"create", target_type:"users" }
|
|
113
|
-
#
|
|
184
|
+
# DELETE /users/:user_id/subscriptions/:id(.:format)
|
|
114
185
|
# { controller:"activity_notification/subscriptions", action:"destroy", target_type:"users" }
|
|
115
|
-
# subscribe_user_subscription
|
|
186
|
+
# subscribe_user_subscription PUT /users/:user_id/subscriptions/:id/subscribe(.:format)
|
|
116
187
|
# { controller:"activity_notification/subscriptions", action:"subscribe", target_type:"users" }
|
|
117
|
-
# unsubscribe_user_subscription
|
|
188
|
+
# unsubscribe_user_subscription PUT /users/:user_id/subscriptions/:id/unsubscribe(.:format)
|
|
118
189
|
# { controller:"activity_notification/subscriptions", action:"unsubscribe", target_type:"users" }
|
|
119
|
-
# subscribe_to_email_user_subscription
|
|
190
|
+
# subscribe_to_email_user_subscription PUT /users/:user_id/subscriptions/:id/subscribe_to_email(.:format)
|
|
120
191
|
# { controller:"activity_notification/subscriptions", action:"subscribe_to_email", target_type:"users" }
|
|
121
|
-
# unsubscribe_to_email_user_subscription
|
|
192
|
+
# unsubscribe_to_email_user_subscription PUT /users/:user_id/subscriptions/:id/unsubscribe_to_email(.:format)
|
|
122
193
|
# { controller:"activity_notification/subscriptions", action:"unsubscribe_to_email", target_type:"users" }
|
|
123
|
-
# subscribe_to_optional_target_user_subscription
|
|
194
|
+
# subscribe_to_optional_target_user_subscription PUT /users/:user_id/subscriptions/:id/subscribe_to_optional_target(.:format)
|
|
124
195
|
# { controller:"activity_notification/subscriptions", action:"subscribe_to_optional_target", target_type:"users" }
|
|
125
|
-
# unsubscribe_to_optional_target_user_subscription
|
|
196
|
+
# unsubscribe_to_optional_target_user_subscription PUT /users/:user_id/subscriptions/:id/unsubscribe_to_optional_target(.:format)
|
|
126
197
|
# { controller:"activity_notification/subscriptions", action:"unsubscribe_to_optional_target", target_type:"users" }
|
|
127
198
|
#
|
|
199
|
+
# You can also configure notification routes with scope like this:
|
|
200
|
+
# scope :myscope, as: :myscope do
|
|
201
|
+
# subscribed_by :users, routing_scope: :myscope
|
|
202
|
+
# end
|
|
203
|
+
# This routing_scope option creates the needed routes with specified scope like this:
|
|
204
|
+
# # Subscription routes
|
|
205
|
+
# myscope_user_subscriptions GET /myscope/users/:user_id/subscriptions(.:format)
|
|
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 }
|
|
209
|
+
# myscope_user_subscription GET /myscope/users/:user_id/subscriptions/:id(.:format)
|
|
210
|
+
# { controller:"activity_notification/subscriptions", action:"show", target_type:"users", routing_scope: :myscope }
|
|
211
|
+
# PUT /myscope/users/:user_id/subscriptions(.:format)
|
|
212
|
+
# { controller:"activity_notification/subscriptions", action:"create", target_type:"users", routing_scope: :myscope }
|
|
213
|
+
# DELETE /myscope/users/:user_id/subscriptions/:id(.:format)
|
|
214
|
+
# { controller:"activity_notification/subscriptions", action:"destroy", target_type:"users", routing_scope: :myscope }
|
|
215
|
+
# subscribe_myscope_user_subscription PUT /myscope/users/:user_id/subscriptions/:id/subscribe(.:format)
|
|
216
|
+
# { controller:"activity_notification/subscriptions", action:"subscribe", target_type:"users", routing_scope: :myscope }
|
|
217
|
+
# unsubscribe_myscope_user_subscription PUT /myscope/users/:user_id/subscriptions/:id/unsubscribe(.:format)
|
|
218
|
+
# { controller:"activity_notification/subscriptions", action:"unsubscribe", target_type:"users", routing_scope: :myscope }
|
|
219
|
+
# subscribe_to_email_myscope_user_subscription PUT /myscope/users/:user_id/subscriptions/:id/subscribe_to_email(.:format)
|
|
220
|
+
# { controller:"activity_notification/subscriptions", action:"subscribe_to_email", target_type:"users", routing_scope: :myscope }
|
|
221
|
+
# unsubscribe_to_email_myscope_user_subscription PUT /myscope/users/:user_id/subscriptions/:id/unsubscribe_to_email(.:format)
|
|
222
|
+
# { controller:"activity_notification/subscriptions", action:"unsubscribe_to_email", target_type:"users", routing_scope: :myscope }
|
|
223
|
+
# subscribe_to_optional_target_myscope_user_subscription PUT /myscope/users/:user_id/subscriptions/:id/subscribe_to_optional_target(.:format)
|
|
224
|
+
# { controller:"activity_notification/subscriptions", action:"subscribe_to_optional_target", target_type:"users", routing_scope: :myscope }
|
|
225
|
+
# unsubscribe_to_optional_target_myscope_user_subscription PUT /myscope/users/:user_id/subscriptions/:id/unsubscribe_to_optional_target(.:format)
|
|
226
|
+
# { controller:"activity_notification/subscriptions", action:"unsubscribe_to_optional_target", target_type:"users", routing_scope: :myscope }
|
|
227
|
+
#
|
|
128
228
|
# When you use devise authentication and you want make subscription targets assciated with devise,
|
|
129
229
|
# you can create as follows in your routes:
|
|
130
|
-
#
|
|
230
|
+
# subscribed_by :users, with_devise: :users
|
|
131
231
|
# This with_devise option creates the needed routes assciated with devise authentication:
|
|
132
232
|
# # Subscription with devise routes
|
|
133
233
|
# user_subscriptions GET /users/:user_id/subscriptions(.:format)
|
|
134
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" }
|
|
135
237
|
# user_subscription GET /users/:user_id/subscriptions/:id(.:format)
|
|
136
238
|
# { controller:"activity_notification/subscriptions_with_devise", action:"show", target_type:"users", devise_type:"users" }
|
|
137
|
-
#
|
|
239
|
+
# PUT /users/:user_id/subscriptions(.:format)
|
|
240
|
+
# { controller:"activity_notification/subscriptions_with_devise", action:"create", target_type:"users", devise_type:"users" }
|
|
241
|
+
# DELETE /users/:user_id/subscriptions/:id(.:format)
|
|
242
|
+
# { controller:"activity_notification/subscriptions_with_devise", action:"destroy", target_type:"users", devise_type:"users" }
|
|
243
|
+
# subscribe_user_subscription PUT /users/:user_id/subscriptions/:id/subscribe(.:format)
|
|
244
|
+
# { controller:"activity_notification/subscriptions_with_devise", action:"subscribe", target_type:"users", devise_type:"users" }
|
|
245
|
+
# unsubscribe_user_subscription PUT /users/:user_id/subscriptions/:id/unsubscribe(.:format)
|
|
246
|
+
# { controller:"activity_notification/subscriptions_with_devise", action:"unsubscribe", target_type:"users", devise_type:"users" }
|
|
247
|
+
# subscribe_to_email_user_subscription PUT /users/:user_id/subscriptions/:id/subscribe_to_email(.:format)
|
|
248
|
+
# { controller:"activity_notification/subscriptions_with_devise", action:"subscribe_to_email", target_type:"users", devise_type:"users" }
|
|
249
|
+
# unsubscribe_to_email_user_subscription PUT /users/:user_id/subscriptions/:id/unsubscribe_to_email(.:format)
|
|
250
|
+
# { controller:"activity_notification/subscriptions_with_devise", action:"unsubscribe_to_email", target_type:"users", devise_type:"users" }
|
|
251
|
+
# subscribe_to_optional_target_user_subscription PUT /users/:user_id/subscriptions/:id/subscribe_to_optional_target(.:format)
|
|
252
|
+
# { controller:"activity_notification/subscriptions_with_devise", action:"subscribe_to_optional_target", target_type:"users", devise_type:"users" }
|
|
253
|
+
# unsubscribe_to_optional_target_user_subscription PUT /users/:user_id/subscriptions/:id/unsubscribe_to_optional_target(.:format)
|
|
254
|
+
# { controller:"activity_notification/subscriptions_with_devise", action:"unsubscribe_to_optional_target", target_type:"users", devise_type:"users" }
|
|
255
|
+
#
|
|
256
|
+
# When you use with_devise option and you want to make simple default routes as follows, you can use devise_default_routes option:
|
|
257
|
+
# subscribed_by :users, with_devise: :users, devise_default_routes: true
|
|
258
|
+
# These with_devise and devise_default_routes options create the needed routes assciated with authenticated devise resource as the default target
|
|
259
|
+
# # Subscription with devise routes
|
|
260
|
+
# user_subscriptions GET /subscriptions(.:format)
|
|
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" }
|
|
264
|
+
# user_subscription GET /subscriptions/:id(.:format)
|
|
265
|
+
# { controller:"activity_notification/subscriptions_with_devise", action:"show", target_type:"users", devise_type:"users" }
|
|
266
|
+
# PUT /subscriptions(.:format)
|
|
138
267
|
# { controller:"activity_notification/subscriptions_with_devise", action:"create", target_type:"users", devise_type:"users" }
|
|
139
|
-
#
|
|
268
|
+
# DELETE /subscriptions/:id(.:format)
|
|
140
269
|
# { controller:"activity_notification/subscriptions_with_devise", action:"destroy", target_type:"users", devise_type:"users" }
|
|
141
|
-
# subscribe_user_subscription
|
|
270
|
+
# subscribe_user_subscription PUT /subscriptions/:id/subscribe(.:format)
|
|
142
271
|
# { controller:"activity_notification/subscriptions_with_devise", action:"subscribe", target_type:"users", devise_type:"users" }
|
|
143
|
-
# unsubscribe_user_subscription
|
|
272
|
+
# unsubscribe_user_subscription PUT /subscriptions/:id/unsubscribe(.:format)
|
|
144
273
|
# { controller:"activity_notification/subscriptions_with_devise", action:"unsubscribe", target_type:"users", devise_type:"users" }
|
|
145
|
-
# subscribe_to_email_user_subscription
|
|
274
|
+
# subscribe_to_email_user_subscription PUT /subscriptions/:id/subscribe_to_email(.:format)
|
|
146
275
|
# { controller:"activity_notification/subscriptions_with_devise", action:"subscribe_to_email", target_type:"users", devise_type:"users" }
|
|
147
|
-
# unsubscribe_to_email_user_subscription
|
|
276
|
+
# unsubscribe_to_email_user_subscription PUT /subscriptions/:id/unsubscribe_to_email(.:format)
|
|
148
277
|
# { controller:"activity_notification/subscriptions_with_devise", action:"unsubscribe_to_email", target_type:"users", devise_type:"users" }
|
|
149
|
-
# subscribe_to_optional_target_user_subscription
|
|
278
|
+
# subscribe_to_optional_target_user_subscription PUT /subscriptions/:id/subscribe_to_optional_target(.:format)
|
|
150
279
|
# { controller:"activity_notification/subscriptions_with_devise", action:"subscribe_to_optional_target", target_type:"users", devise_type:"users" }
|
|
151
|
-
# unsubscribe_to_optional_target_user_subscription
|
|
280
|
+
# unsubscribe_to_optional_target_user_subscription PUT /subscriptions/:id/unsubscribe_to_optional_target(.:format)
|
|
152
281
|
# { controller:"activity_notification/subscriptions_with_devise", action:"unsubscribe_to_optional_target", target_type:"users", devise_type:"users" }
|
|
153
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
|
+
#
|
|
154
317
|
# @example Define subscribed_by in config/routes.rb
|
|
155
318
|
# subscribed_by :users
|
|
156
319
|
# @example Define subscribed_by with options
|
|
157
320
|
# subscribed_by :users, except: [:index, :show]
|
|
158
321
|
# @example Integrated with Devise authentication
|
|
159
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
|
|
160
329
|
#
|
|
161
330
|
# @overload subscribed_by(*resources, *options)
|
|
162
331
|
# @param [Symbol] resources Resources to notify
|
|
163
|
-
# @option options [
|
|
164
|
-
# @option options [
|
|
165
|
-
# @option options [
|
|
166
|
-
# @option options [
|
|
167
|
-
# @option options [
|
|
168
|
-
# @option options [
|
|
332
|
+
# @option options [String] :routing_scope (nil) Routing scope for subscription routes
|
|
333
|
+
# @option options [Symbol] :with_devise (false) Devise resources name for devise integration. Devise integration will be enabled by this option.
|
|
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
|
|
336
|
+
# @option options [String] :model (:subscriptions) Model name of subscriptions
|
|
337
|
+
# @option options [String] :controller ("activity_notification/subscriptions" | activity_notification/subscriptions_with_devise") :controller option as resources routing
|
|
338
|
+
# @option options [Symbol] :as (nil) :as option as resources routing
|
|
339
|
+
# @option options [Array] :only (nil) :only option as resources routing
|
|
340
|
+
# @option options [Array] :except (nil) :except option as resources routing
|
|
169
341
|
# @return [ActionDispatch::Routing::Mapper] Routing mapper instance
|
|
170
342
|
def subscribed_by(*resources)
|
|
171
343
|
options = create_options(:subscriptions, resources.extract_options!, [:new, :edit, :update])
|
|
172
344
|
|
|
173
345
|
resources.each do |target|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
post :subscribe_to_email unless ignore_path?(:subscribe_to_email, options)
|
|
182
|
-
post :unsubscribe_to_email unless ignore_path?(:unsubscribe_to_email, options)
|
|
183
|
-
post :subscribe_to_optional_target unless ignore_path?(:subscribe_to_optional_target, options)
|
|
184
|
-
post :unsubscribe_to_optional_target unless ignore_path?(:unsubscribe_to_optional_target, options)
|
|
185
|
-
end
|
|
346
|
+
options[:defaults] = { target_type: target.to_s }.merge(options[:devise_defaults])
|
|
347
|
+
resources_options = options.select { |key, _| [:api_mode, :with_devise, :devise_default_routes, :model, :devise_defaults].exclude? key }
|
|
348
|
+
if options[:with_devise].present? && options[:devise_default_routes].present?
|
|
349
|
+
create_subscription_routes options, resources_options
|
|
350
|
+
else
|
|
351
|
+
self.resources target, only: :none do
|
|
352
|
+
create_subscription_routes options, resources_options
|
|
186
353
|
end
|
|
187
354
|
end
|
|
188
355
|
end
|
|
@@ -202,35 +369,81 @@ module ActionDispatch::Routing
|
|
|
202
369
|
false
|
|
203
370
|
end
|
|
204
371
|
|
|
205
|
-
# Create options
|
|
372
|
+
# Create options for routing
|
|
206
373
|
# @api private
|
|
207
374
|
# @todo Check resources if it includes target module
|
|
208
375
|
# @todo Check devise configuration in model
|
|
209
376
|
# @todo Support other options like :as, :path_prefix, :path_names ...
|
|
210
377
|
#
|
|
211
378
|
# @param [Symbol] resource Name of the resource model
|
|
212
|
-
# @
|
|
379
|
+
# @param [Hash] options Passed options from notify_to or subscribed_by
|
|
380
|
+
# @param [Hash] except_actions Actions in [:index, :show, :new, :create, :edit, :update, :destroy] to remove routes
|
|
381
|
+
# @return [Hash] Options to create routes
|
|
213
382
|
def create_options(resource, options = {}, except_actions = [])
|
|
214
383
|
# Check resources if it includes target module
|
|
215
384
|
resources_name = resource.to_s.pluralize.underscore
|
|
216
385
|
options[:model] ||= resources_name.to_sym
|
|
386
|
+
controller_name = "activity_notification/#{resources_name}"
|
|
387
|
+
controller_name.concat("_api") if options[:api_mode]
|
|
217
388
|
if options[:with_devise].present?
|
|
218
|
-
options[:controller] ||= "
|
|
389
|
+
options[:controller] ||= "#{controller_name}_with_devise"
|
|
219
390
|
options[:as] ||= resources_name
|
|
220
391
|
# Check devise configuration in model
|
|
221
392
|
options[:devise_defaults] = { devise_type: options[:with_devise].to_s }
|
|
393
|
+
options[:devise_defaults] = options[:devise_defaults].merge(options.slice(:devise_default_routes))
|
|
222
394
|
else
|
|
223
|
-
options[:controller] ||=
|
|
395
|
+
options[:controller] ||= controller_name
|
|
224
396
|
options[:devise_defaults] = {}
|
|
225
397
|
end
|
|
226
398
|
(options[:except] ||= []).concat(except_actions)
|
|
227
399
|
if options[:with_subscription].present?
|
|
228
400
|
options[:subscription_option] = (options[:with_subscription].is_a?(Hash) ? options[:with_subscription] : {})
|
|
229
|
-
.merge(with_devise:
|
|
401
|
+
.merge(options.slice(:api_mode, :with_devise, :devise_default_routes, :routing_scope))
|
|
230
402
|
end
|
|
231
403
|
# Support other options like :as, :path_prefix, :path_names ...
|
|
232
404
|
options
|
|
233
405
|
end
|
|
234
406
|
|
|
407
|
+
# Create routes for notifications
|
|
408
|
+
# @api private
|
|
409
|
+
#
|
|
410
|
+
# @param [Symbol] resource Name of the resource model
|
|
411
|
+
# @param [Hash] options Passed options from notify_to
|
|
412
|
+
# @param [Hash] resources_options Options to send resources method
|
|
413
|
+
def create_notification_routes(options = {}, resources_options = [])
|
|
414
|
+
self.resources options[:model], resources_options do
|
|
415
|
+
collection do
|
|
416
|
+
post :open_all unless ignore_path?(:open_all, options)
|
|
417
|
+
end
|
|
418
|
+
member do
|
|
419
|
+
get :move unless ignore_path?(:move, options)
|
|
420
|
+
put :open unless ignore_path?(:open, options)
|
|
421
|
+
end
|
|
422
|
+
end
|
|
423
|
+
end
|
|
424
|
+
|
|
425
|
+
# Create routes for subscriptions
|
|
426
|
+
# @api private
|
|
427
|
+
#
|
|
428
|
+
# @param [Symbol] resource Name of the resource model
|
|
429
|
+
# @param [Hash] options Passed options from subscribed_by
|
|
430
|
+
# @param [Hash] resources_options Options to send resources method
|
|
431
|
+
def create_subscription_routes(options = {}, resources_options = [])
|
|
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
|
|
437
|
+
member do
|
|
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)
|
|
444
|
+
end
|
|
445
|
+
end
|
|
446
|
+
end
|
|
447
|
+
|
|
235
448
|
end
|
|
236
449
|
end
|
|
@@ -8,7 +8,7 @@ module ActivityNotification
|
|
|
8
8
|
#
|
|
9
9
|
# @param [Hash] params Parameters for rendering notification text
|
|
10
10
|
# @option params [String] :target Target type name to use as i18n text key
|
|
11
|
-
# @option params [Hash] others Parameters to be
|
|
11
|
+
# @option params [Hash] others Parameters to be referred in i18n text
|
|
12
12
|
# @return [String] Rendered text
|
|
13
13
|
def text(params = {})
|
|
14
14
|
k = key.split('.')
|
|
@@ -21,12 +21,16 @@ module ActivityNotification
|
|
|
21
21
|
k.push('text')
|
|
22
22
|
k = k.join('.')
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
attrs = (parameters.symbolize_keys.merge(params) || {}).merge(
|
|
25
25
|
group_member_count: group_member_count,
|
|
26
26
|
group_notification_count: group_notification_count,
|
|
27
27
|
group_member_notifier_count: group_member_notifier_count,
|
|
28
28
|
group_notifier_count: group_notifier_count
|
|
29
|
-
)
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
# Generate the :default fallback key without using pluralization key :count
|
|
32
|
+
default = I18n.t(k, **attrs)
|
|
33
|
+
I18n.t(k, **attrs.merge(count: group_notification_count, default: default))
|
|
30
34
|
end
|
|
31
35
|
|
|
32
36
|
# Renders notification from views.
|
|
@@ -88,7 +92,7 @@ module ActivityNotification
|
|
|
88
92
|
# <%= yield %>
|
|
89
93
|
#
|
|
90
94
|
# == Custom Layout Location
|
|
91
|
-
#
|
|
95
|
+
#
|
|
92
96
|
# You can customize the layout directory by supplying :layout_root
|
|
93
97
|
# or by using an absolute path.
|
|
94
98
|
#
|
|
@@ -139,23 +143,26 @@ module ActivityNotification
|
|
|
139
143
|
# @option params [String] :layout (nil) Layout template name
|
|
140
144
|
# @option params [String] :layout_root ('layouts') Root path of layout template
|
|
141
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
|
|
142
148
|
# @option params [Hash] others Parameters to be set as locals
|
|
143
149
|
# @return [String] Rendered view or text as string
|
|
144
150
|
def render(context, params = {})
|
|
145
|
-
params[:i18n] and return context.render
|
|
151
|
+
params[:i18n] and return context.render plain: self.text(params)
|
|
146
152
|
|
|
147
153
|
partial = partial_path(*params.values_at(:partial, :partial_root, :target))
|
|
148
154
|
layout = layout_path(*params.values_at(:layout, :layout_root))
|
|
155
|
+
assigns = prepare_assigns(params)
|
|
149
156
|
locals = prepare_locals(params)
|
|
150
157
|
|
|
151
158
|
begin
|
|
152
|
-
context.render params.merge(partial: partial, layout: layout, locals: locals)
|
|
159
|
+
context.render params.merge(partial: partial, layout: layout, assigns: assigns, locals: locals)
|
|
153
160
|
rescue ActionView::MissingTemplate => e
|
|
154
161
|
if params[:fallback] == :text
|
|
155
162
|
context.render plain: self.text(params)
|
|
156
163
|
elsif params[:fallback].present?
|
|
157
164
|
partial = partial_path(*params.values_at(:fallback, :partial_root, :target))
|
|
158
|
-
context.render params.merge(partial: partial, layout: layout, locals: locals)
|
|
165
|
+
context.render params.merge(partial: partial, layout: layout, assigns: assigns, locals: locals)
|
|
159
166
|
else
|
|
160
167
|
raise e
|
|
161
168
|
end
|
|
@@ -192,6 +199,14 @@ module ActivityNotification
|
|
|
192
199
|
select_path(path, root)
|
|
193
200
|
end
|
|
194
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
|
+
|
|
195
210
|
# Returns locals parameter for view
|
|
196
211
|
# There are three variables to be add by method:
|
|
197
212
|
# * notification
|