Class: ActionDispatch::Routing::Mapper
- Inherits:
-
Object
- Object
- ActionDispatch::Routing::Mapper
- Includes:
- ActivityNotification::PolymorphicHelpers
- Defined in:
- lib/activity_notification/rails/routes.rb
Overview
Extended ActionDispatch::Routing::Mapper implementation to add routing method of ActivityNotification.
Instance Method Summary collapse
-
#notify_to(*resources, *options) ⇒ ActionDispatch::Routing::Mapper
Includes notify_to method for routes, which is responsible to generate all necessary routes for notifications of activity_notification.
-
#subscribed_by(*resources, *options) ⇒ ActionDispatch::Routing::Mapper
Includes subscribed_by method for routes, which is responsible to generate all necessary routes for subscriptions of activity_notification.
Instance Method Details
#notify_to(*resources, *options) ⇒ ActionDispatch::Routing::Mapper
Includes notify_to method for routes, which is responsible to generate all necessary routes for notifications of activity_notification.
When you have an User model configured as a target (e.g. defined acts_as_target), you can create as follows in your routes:
notify_to :users
This method creates the needed routes:
# Notification routes
user_notifications GET /users/:user_id/notifications(.:format)
{ controller:"activity_notification/notifications", action:"index", target_type:"users" }
user_notification GET /users/:user_id/notifications/:id(.:format)
{ controller:"activity_notification/notifications", action:"show", target_type:"users" }
user_notification DELETE /users/:user_id/notifications/:id(.:format)
{ controller:"activity_notification/notifications", action:"destroy", target_type:"users" }
open_all_user_notifications POST /users/:user_id/notifications/open_all(.:format)
{ controller:"activity_notification/notifications", action:"open_all", target_type:"users" }
move_user_notification GET /users/:user_id/notifications/:id/move(.:format)
{ controller:"activity_notification/notifications", action:"move", target_type:"users" }
open_user_notification POST /users/:user_id/notifications/:id/open(.:format)
{ controller:"activity_notification/notifications", action:"open", target_type:"users" }
When you use devise authentication and you want make notification targets assciated with devise, you can create as follows in your routes:
notify_to :users, with_devise: :users
This with_devise option creates the needed routes assciated with devise authentication:
# Notification with devise routes
user_notifications GET /users/:user_id/notifications(.:format)
{ controller:"activity_notification/notifications_with_devise", action:"index", target_type:"users", devise_type:"users" }
user_notification GET /users/:user_id/notifications/:id(.:format)
{ controller:"activity_notification/notifications_with_devise", action:"show", target_type:"users", devise_type:"users" }
user_notification DELETE /users/:user_id/notifications/:id(.:format)
{ controller:"activity_notification/notifications_with_devise", action:"destroy", target_type:"users", devise_type:"users" }
open_all_user_notifications POST /users/:user_id/notifications/open_all(.:format)
{ controller:"activity_notification/notifications_with_devise", action:"open_all", target_type:"users", devise_type:"users" }
move_user_notification GET /users/:user_id/notifications/:id/move(.:format)
{ controller:"activity_notification/notifications_with_devise", action:"move", target_type:"users", devise_type:"users" }
open_user_notification POST /users/:user_id/notifications/:id/open(.:format)
{ controller:"activity_notification/notifications_with_devise", action:"open", target_type:"users", devise_type:"users" }
When you would like to define subscription management paths with notification paths, you can create as follows in your routes:
notify_to :users, with_subscription: true
or you can also set options for subscription path:
notify_to :users, with_subscription: { except: [:index] }
If you configure this :with_subscription option with :with_devise option, with_subscription paths are also automatically configured with devise authentication as the same as notifications
notify_to :users, with_devise: :users, with_subscription: true
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/activity_notification/rails/routes.rb', line 74 def notify_to(*resources) = (:notifications, resources., [:new, :create, :edit, :update]) resources.each do |target| self.resources target, only: :none do [:defaults] = { target_type: target.to_s }.merge([:devise_defaults]) = .select { |key, _| [:with_devise, :with_subscription, :subscription_option, :model, :devise_defaults].exclude? key } self.resources [:model], do collection do post :open_all unless ignore_path?(:open_all, ) end member do get :move unless ignore_path?(:move, ) post :open unless ignore_path?(:open, ) end end end if [:with_subscription].present? && target.to_s.to_model_class.subscription_enabled? subscribed_by target, [:subscription_option] end end self end |
#subscribed_by(*resources, *options) ⇒ ActionDispatch::Routing::Mapper
Includes subscribed_by method for routes, which is responsible to generate all necessary routes for subscriptions of activity_notification.
When you have an User model configured as a target (e.g. defined acts_as_target), you can create as follows in your routes:
subscribed_by :users
This method creates the needed routes:
# Subscription routes
user_subscriptions GET /users/:user_id/subscriptions(.:format)
{ controller:"activity_notification/subscriptions", action:"index", target_type:"users" }
user_subscription GET /users/:user_id/subscriptions/:id(.:format)
{ controller:"activity_notification/subscriptions", action:"show", target_type:"users" }
open_all_user_subscriptions POST /users/:user_id/subscriptions(.:format)
{ controller:"activity_notification/subscriptions", action:"create", target_type:"users" }
user_subscription DELETE /users/:user_id/subscriptions/:id(.:format)
{ controller:"activity_notification/subscriptions", action:"destroy", target_type:"users" }
subscribe_user_subscription POST /users/:user_id/subscriptions/:id/subscribe(.:format)
{ controller:"activity_notification/subscriptions", action:"subscribe", target_type:"users" }
unsubscribe_user_subscription POST /users/:user_id/subscriptions/:id/unsubscribe(.:format)
{ controller:"activity_notification/subscriptions", action:"unsubscribe", target_type:"users" }
subscribe_to_email_user_subscription POST /users/:user_id/subscriptions/:id/subscribe_to_email(.:format)
{ controller:"activity_notification/subscriptions", action:"subscribe_to_email", target_type:"users" }
unsubscribe_to_email_user_subscription POST /users/:user_id/subscriptions/:id/unsubscribe_to_email(.:format)
{ controller:"activity_notification/subscriptions", action:"unsubscribe_to_email", target_type:"users" }
subscribe_to_optional_target_user_subscription POST /users/:user_id/subscriptions/:id/subscribe_to_optional_target(.:format)
{ controller:"activity_notification/subscriptions", action:"subscribe_to_optional_target", target_type:"users" }
unsubscribe_to_optional_target_user_subscription POST /users/:user_id/subscriptions/:id/unsubscribe_to_optional_target(.:format)
{ controller:"activity_notification/subscriptions", action:"unsubscribe_to_optional_target", target_type:"users" }
When you use devise authentication and you want make subscription targets assciated with devise, you can create as follows in your routes:
notify_to :users, with_devise: :users
This with_devise option creates the needed routes assciated with devise authentication:
# Subscription with devise routes
user_subscriptions GET /users/:user_id/subscriptions(.:format)
{ controller:"activity_notification/subscriptions_with_devise", action:"index", target_type:"users", devise_type:"users" }
user_subscription GET /users/:user_id/subscriptions/:id(.:format)
{ controller:"activity_notification/subscriptions_with_devise", action:"show", target_type:"users", devise_type:"users" }
open_all_user_subscriptions POST /users/:user_id/subscriptions(.:format)
{ controller:"activity_notification/subscriptions_with_devise", action:"create", target_type:"users", devise_type:"users" }
user_subscription DELETE /users/:user_id/subscriptions/:id(.:format)
{ controller:"activity_notification/subscriptions_with_devise", action:"destroy", target_type:"users", devise_type:"users" }
subscribe_user_subscription POST /users/:user_id/subscriptions/:id/subscribe(.:format)
{ controller:"activity_notification/subscriptions_with_devise", action:"subscribe", target_type:"users", devise_type:"users" }
unsubscribe_user_subscription POST /users/:user_id/subscriptions/:id/unsubscribe(.:format)
{ controller:"activity_notification/subscriptions_with_devise", action:"unsubscribe", target_type:"users", devise_type:"users" }
subscribe_to_email_user_subscription POST /users/:user_id/subscriptions/:id/subscribe_to_email(.:format)
{ controller:"activity_notification/subscriptions_with_devise", action:"subscribe_to_email", target_type:"users", devise_type:"users" }
unsubscribe_to_email_user_subscription POST /users/:user_id/subscriptions/:id/unsubscribe_to_email(.:format)
{ controller:"activity_notification/subscriptions_with_devise", action:"unsubscribe_to_email", target_type:"users", devise_type:"users" }
subscribe_to_optional_target_user_subscription POST /users/:user_id/subscriptions/:id/subscribe_to_optional_target(.:format)
{ controller:"activity_notification/subscriptions_with_devise", action:"subscribe_to_optional_target", target_type:"users", devise_type:"users" }
unsubscribe_to_optional_target_user_subscription POST /users/:user_id/subscriptions/:id/unsubscribe_to_optional_target(.:format)
{ controller:"activity_notification/subscriptions_with_devise", action:"unsubscribe_to_optional_target", target_type:"users", devise_type:"users" }
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 |
# File 'lib/activity_notification/rails/routes.rb', line 170 def subscribed_by(*resources) = (:subscriptions, resources., [:new, :edit, :update]) resources.each do |target| self.resources target, only: :none do [:defaults] = { target_type: target.to_s }.merge([:devise_defaults]) = .select { |key, _| [:with_devise, :model, :devise_defaults].exclude? key } self.resources [:model], do member do post :subscribe unless ignore_path?(:subscribe, ) post :unsubscribe unless ignore_path?(:unsubscribe, ) post :subscribe_to_email unless ignore_path?(:subscribe_to_email, ) post :unsubscribe_to_email unless ignore_path?(:unsubscribe_to_email, ) post :subscribe_to_optional_target unless ignore_path?(:subscribe_to_optional_target, ) post :unsubscribe_to_optional_target unless ignore_path?(:unsubscribe_to_optional_target, ) end end end end self end |