activity_notification 1.0.2 → 1.1.0
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 +4 -4
 - data/.codeclimate.yml +33 -0
 - data/.rubocop.yml +1157 -0
 - data/.yardopts +3 -0
 - data/CHANGELOG.md +25 -0
 - data/Gemfile.lock +15 -17
 - data/README.md +154 -27
 - data/activity_notification.gemspec +1 -1
 - data/app/controllers/activity_notification/notifications_controller.rb +30 -104
 - data/app/controllers/activity_notification/notifications_with_devise_controller.rb +1 -33
 - data/app/controllers/activity_notification/subscriptions_controller.rb +184 -0
 - data/app/controllers/activity_notification/subscriptions_with_devise_controller.rb +6 -0
 - data/app/mailers/activity_notification/mailer.rb +3 -3
 - data/app/views/activity_notification/notifications/default/_index.html.erb +3 -0
 - data/app/views/activity_notification/notifications/default/index.html.erb +8 -10
 - data/app/views/activity_notification/notifications/default/show.html.erb +24 -2
 - data/app/views/activity_notification/subscriptions/default/_form.html.erb +52 -0
 - data/app/views/activity_notification/subscriptions/default/_notification_keys.html.erb +89 -0
 - data/app/views/activity_notification/subscriptions/default/_subscription.html.erb +73 -0
 - data/app/views/activity_notification/subscriptions/default/_subscriptions.html.erb +13 -0
 - data/app/views/activity_notification/subscriptions/default/create.js.erb +5 -0
 - data/app/views/activity_notification/subscriptions/default/destroy.js.erb +5 -0
 - data/app/views/activity_notification/subscriptions/default/index.html.erb +197 -0
 - data/app/views/activity_notification/subscriptions/default/show.html.erb +177 -0
 - data/app/views/activity_notification/subscriptions/default/subscribe.js.erb +8 -0
 - data/app/views/activity_notification/subscriptions/default/subscribe_to_email.js.erb +6 -0
 - data/app/views/activity_notification/subscriptions/default/unsubscribe.js.erb +8 -0
 - data/app/views/activity_notification/subscriptions/default/unsubscribe_to_email.js.erb +6 -0
 - data/gemfiles/Gemfile.rails-4.2.lock +18 -20
 - data/gemfiles/Gemfile.rails-5.0.lock +18 -20
 - data/lib/activity_notification.rb +7 -3
 - data/lib/activity_notification/apis/notification_api.rb +95 -61
 - data/lib/activity_notification/apis/subscription_api.rb +51 -0
 - data/lib/activity_notification/common.rb +1 -1
 - data/lib/activity_notification/config.rb +65 -17
 - data/lib/activity_notification/controllers/common_controller.rb +118 -0
 - data/lib/activity_notification/controllers/devise_authentication_controller.rb +41 -0
 - data/lib/activity_notification/helpers/view_helpers.rb +131 -3
 - data/lib/activity_notification/mailers/helpers.rb +6 -8
 - data/lib/activity_notification/models/concerns/notifiable.rb +45 -27
 - data/lib/activity_notification/models/concerns/subscriber.rb +149 -0
 - data/lib/activity_notification/models/concerns/target.rb +100 -66
 - data/lib/activity_notification/models/notification.rb +7 -5
 - data/lib/activity_notification/models/subscription.rb +93 -0
 - data/lib/activity_notification/rails/routes.rb +148 -33
 - data/lib/activity_notification/renderable.rb +3 -4
 - data/lib/activity_notification/roles/acts_as_notifiable.rb +14 -1
 - data/lib/activity_notification/roles/acts_as_target.rb +11 -8
 - data/lib/activity_notification/version.rb +1 -1
 - data/lib/generators/activity_notification/controllers_generator.rb +2 -2
 - data/lib/generators/activity_notification/install_generator.rb +0 -1
 - data/lib/generators/activity_notification/migration/migration_generator.rb +8 -2
 - data/lib/generators/activity_notification/models_generator.rb +53 -0
 - data/lib/generators/activity_notification/views_generator.rb +7 -7
 - data/lib/generators/templates/activity_notification.rb +17 -3
 - data/lib/generators/templates/controllers/notifications_controller.rb +18 -17
 - data/lib/generators/templates/controllers/notifications_with_devise_controller.rb +18 -17
 - data/lib/generators/templates/controllers/subscriptions_controller.rb +79 -0
 - data/lib/generators/templates/controllers/subscriptions_with_devise_controller.rb +87 -0
 - data/lib/generators/templates/migrations/migration.rb +57 -0
 - data/lib/generators/templates/models/README +10 -0
 - data/lib/generators/templates/{notification → models}/notification.rb +1 -3
 - data/lib/generators/templates/models/subscription.rb +4 -0
 - data/spec/concerns/apis/notification_api_spec.rb +48 -11
 - data/spec/concerns/apis/subscription_api_spec.rb +167 -0
 - data/spec/concerns/models/notifiable_spec.rb +60 -0
 - data/spec/concerns/models/subscriber_spec.rb +525 -0
 - data/spec/concerns/models/target_spec.rb +271 -42
 - data/spec/controllers/common_controller_spec.rb +25 -0
 - data/spec/controllers/dummy_common_controller.rb +5 -0
 - data/spec/controllers/notifications_controller_shared_examples.rb +2 -6
 - data/spec/controllers/subscriptions_controller_shared_examples.rb +735 -0
 - data/spec/controllers/subscriptions_controller_spec.rb +12 -0
 - data/spec/controllers/subscriptions_with_devise_controller_spec.rb +91 -0
 - data/spec/factories/dummy/dummy_subscriber.rb +4 -0
 - data/spec/factories/subscriptions.rb +8 -0
 - data/spec/generators/controllers_generator_spec.rb +25 -2
 - data/spec/generators/migration/migration_generator_spec.rb +3 -3
 - data/spec/generators/models_generator_spec.rb +96 -0
 - data/spec/generators/views_generator_spec.rb +84 -0
 - data/spec/helpers/view_helpers_spec.rb +143 -0
 - data/spec/mailers/mailer_spec.rb +5 -4
 - data/spec/models/dummy/dummy_subscriber_spec.rb +5 -0
 - data/spec/models/notification_spec.rb +7 -7
 - data/spec/models/subscription_spec.rb +158 -0
 - data/spec/rails_app/app/controllers/users/notifications_controller.rb +67 -0
 - data/spec/rails_app/app/controllers/users/notifications_with_devise_controller.rb +75 -0
 - data/spec/rails_app/app/controllers/users/subscriptions_controller.rb +79 -0
 - data/spec/rails_app/app/controllers/users/subscriptions_with_devise_controller.rb +87 -0
 - data/spec/rails_app/app/models/admin.rb +1 -0
 - data/spec/rails_app/app/models/dummy/dummy_subscriber.rb +4 -0
 - data/spec/rails_app/app/models/user.rb +2 -1
 - data/spec/rails_app/app/views/activity_notification/mailer/dummy_subscribers/test_key.text.erb +1 -0
 - data/spec/rails_app/app/views/articles/index.html.erb +6 -0
 - data/spec/rails_app/config/initializers/activity_notification.rb +17 -3
 - data/spec/rails_app/config/routes.rb +2 -2
 - data/spec/rails_app/db/migrate/20160715050420_create_activity_notification_tables.rb +33 -0
 - data/spec/rails_app/db/schema.rb +18 -0
 - data/spec/roles/acts_as_notifiable_spec.rb +1 -1
 - data/spec/roles/acts_as_target_spec.rb +1 -1
 - metadata +70 -11
 - data/lib/generators/activity_notification/notification/notification_generator.rb +0 -20
 - data/lib/generators/templates/active_record/migration.rb +0 -18
 - data/spec/generators/notification/notification_generator_spec.rb +0 -41
 - data/spec/rails_app/db/migrate/20160715050420_create_notifications.rb +0 -18
 
| 
         @@ -27,7 +27,7 @@ Gem::Specification.new do |s| 
     | 
|
| 
       27 
27 
     | 
    
         | 
| 
       28 
28 
     | 
    
         
             
              s.add_development_dependency 'sqlite3', '~> 1.3.12'
         
     | 
| 
       29 
29 
     | 
    
         
             
              s.add_development_dependency 'rspec-rails', '~> 3.5.1'
         
     | 
| 
       30 
     | 
    
         
            -
              s.add_development_dependency 'factory_girl_rails', '~> 4. 
     | 
| 
      
 30 
     | 
    
         
            +
              s.add_development_dependency 'factory_girl_rails', '~> 4.8.0'
         
     | 
| 
       31 
31 
     | 
    
         
             
              s.add_development_dependency 'simplecov', '~> 0.12.0'
         
     | 
| 
       32 
32 
     | 
    
         
             
              s.add_development_dependency 'yard', '~> 0.9.5'
         
     | 
| 
       33 
33 
     | 
    
         
             
              s.add_development_dependency 'yard-activesupport-concern', '~> 0.0.1'
         
     | 
| 
         @@ -1,19 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module ActivityNotification
         
     | 
| 
       2 
2 
     | 
    
         
             
              # Controller to manage notifications.
         
     | 
| 
       3 
3 
     | 
    
         
             
              class NotificationsController < ActivityNotification.config.parent_controller.constantize
         
     | 
| 
       4 
     | 
    
         
            -
                # Include  
     | 
| 
       5 
     | 
    
         
            -
                include  
     | 
| 
       6 
     | 
    
         
            -
                # Include PolymorphicHelpers to resolve string extentions
         
     | 
| 
       7 
     | 
    
         
            -
                include ActivityNotification::PolymorphicHelpers
         
     | 
| 
       8 
     | 
    
         
            -
                prepend_before_action :set_target
         
     | 
| 
      
 4 
     | 
    
         
            +
                # Include CommonController to select target and define common methods
         
     | 
| 
      
 5 
     | 
    
         
            +
                include CommonController
         
     | 
| 
       9 
6 
     | 
    
         
             
                before_action :set_notification, except: [:index, :open_all]
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
              
         
     | 
| 
       12 
     | 
    
         
            -
                DEFAULT_VIEW_DIRECTORY = "default"
         
     | 
| 
       13 
     | 
    
         
            -
              
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
       14 
8 
     | 
    
         
             
                # Shows notification index of the target.
         
     | 
| 
       15 
9 
     | 
    
         
             
                #
         
     | 
| 
       16 
     | 
    
         
            -
                # GET /:target_type/:target_id/ 
     | 
| 
      
 10 
     | 
    
         
            +
                # GET /:target_type/:target_id/notifications
         
     | 
| 
       17 
11 
     | 
    
         
             
                # @overload index(params)
         
     | 
| 
       18 
12 
     | 
    
         
             
                #   @param [Hash] params Request parameter options for notification index
         
     | 
| 
       19 
13 
     | 
    
         
             
                #   @option params [String] :filter                 (nil)     Filter option to load notification index (Nothing as auto, 'opened' or 'unopened')
         
     | 
| 
         @@ -29,7 +23,7 @@ module ActivityNotification 
     | 
|
| 
       29 
23 
     | 
    
         
             
                #   @return [Responce] HTML view as default or JSON of notification index with json format parameter
         
     | 
| 
       30 
24 
     | 
    
         
             
                def index
         
     | 
| 
       31 
25 
     | 
    
         
             
                  set_index_options
         
     | 
| 
       32 
     | 
    
         
            -
                   
     | 
| 
      
 26 
     | 
    
         
            +
                  load_index if params[:reload].to_s.to_boolean(true)
         
     | 
| 
       33 
27 
     | 
    
         
             
                  respond_to do |format|
         
     | 
| 
       34 
28 
     | 
    
         
             
                    format.html # index.html.erb
         
     | 
| 
       35 
29 
     | 
    
         
             
                    format.json { render json: @notifications.to_json(include: [:target, :notifiable, :group]) }
         
     | 
| 
         @@ -38,7 +32,7 @@ module ActivityNotification 
     | 
|
| 
       38 
32 
     | 
    
         | 
| 
       39 
33 
     | 
    
         
             
                # Opens all notifications of the target.
         
     | 
| 
       40 
34 
     | 
    
         
             
                #
         
     | 
| 
       41 
     | 
    
         
            -
                # POST /:target_type/:target_id/ 
     | 
| 
      
 35 
     | 
    
         
            +
                # POST /:target_type/:target_id/notifications/open_all
         
     | 
| 
       42 
36 
     | 
    
         
             
                # @overload open_all(params)
         
     | 
| 
       43 
37 
     | 
    
         
             
                #   @param [Hash] params Request parameters
         
     | 
| 
       44 
38 
     | 
    
         
             
                #   @option params [String] :filter  (nil)     Filter option to load notification index (Nothing as auto, 'opened' or 'unopened')
         
     | 
| 
         @@ -58,7 +52,7 @@ module ActivityNotification 
     | 
|
| 
       58 
52 
     | 
    
         | 
| 
       59 
53 
     | 
    
         
             
                # Shows a notification.
         
     | 
| 
       60 
54 
     | 
    
         
             
                #
         
     | 
| 
       61 
     | 
    
         
            -
                # GET /:target_type/:target_id/ 
     | 
| 
      
 55 
     | 
    
         
            +
                # GET /:target_type/:target_id/notifications/:id
         
     | 
| 
       62 
56 
     | 
    
         
             
                # @overload show(params)
         
     | 
| 
       63 
57 
     | 
    
         
             
                #   @param [Hash] params Request parameters
         
     | 
| 
       64 
58 
     | 
    
         
             
                #   @return [Responce] HTML view as default
         
     | 
| 
         @@ -67,7 +61,7 @@ module ActivityNotification 
     | 
|
| 
       67 
61 
     | 
    
         | 
| 
       68 
62 
     | 
    
         
             
                # Deletes a notification.
         
     | 
| 
       69 
63 
     | 
    
         
             
                #
         
     | 
| 
       70 
     | 
    
         
            -
                # DELETE /:target_type/:target_id/ 
     | 
| 
      
 64 
     | 
    
         
            +
                # DELETE /:target_type/:target_id/notifications/:id
         
     | 
| 
       71 
65 
     | 
    
         
             
                #
         
     | 
| 
       72 
66 
     | 
    
         
             
                # @overload destroy(params)
         
     | 
| 
       73 
67 
     | 
    
         
             
                #   @param [Hash] params Request parameters
         
     | 
| 
         @@ -84,7 +78,7 @@ module ActivityNotification 
     | 
|
| 
       84 
78 
     | 
    
         | 
| 
       85 
79 
     | 
    
         
             
                # Opens a notification.
         
     | 
| 
       86 
80 
     | 
    
         
             
                #
         
     | 
| 
       87 
     | 
    
         
            -
                # POST /:target_type/:target_id/ 
     | 
| 
      
 81 
     | 
    
         
            +
                # POST /:target_type/:target_id/notifications/:id/open
         
     | 
| 
       88 
82 
     | 
    
         
             
                # @overload open(params)
         
     | 
| 
       89 
83 
     | 
    
         
             
                #   @param [Hash] params Request parameters
         
     | 
| 
       90 
84 
     | 
    
         
             
                #   @option params [String] :move               ('false') Whether redirects to notifiable_path after the notification is opened
         
     | 
| 
         @@ -104,7 +98,7 @@ module ActivityNotification 
     | 
|
| 
       104 
98 
     | 
    
         | 
| 
       105 
99 
     | 
    
         
             
                # Moves to notifiable_path of the notification.
         
     | 
| 
       106 
100 
     | 
    
         
             
                #
         
     | 
| 
       107 
     | 
    
         
            -
                # GET /:target_type/:target_id/ 
     | 
| 
      
 101 
     | 
    
         
            +
                # GET /:target_type/:target_id/notifications/:id/move
         
     | 
| 
       108 
102 
     | 
    
         
             
                # @overload open(params)
         
     | 
| 
       109 
103 
     | 
    
         
             
                #   @param [Hash] params Request parameters
         
     | 
| 
       110 
104 
     | 
    
         
             
                #   @option params [String] :open    ('false') Whether the notification will be opened
         
     | 
| 
         @@ -117,48 +111,19 @@ module ActivityNotification 
     | 
|
| 
       117 
111 
     | 
    
         
             
                  redirect_to @notification.notifiable_path
         
     | 
| 
       118 
112 
     | 
    
         
             
                end
         
     | 
| 
       119 
113 
     | 
    
         | 
| 
       120 
     | 
    
         
            -
                # Returns controller path.
         
     | 
| 
       121 
     | 
    
         
            -
                # This method has no action routing and is called from target_view_path method.
         
     | 
| 
       122 
     | 
    
         
            -
                # This method can be overriden.
         
     | 
| 
       123 
     | 
    
         
            -
                # @return [String] "activity_notification/notifications" as controller path
         
     | 
| 
       124 
     | 
    
         
            -
                def controller_path
         
     | 
| 
       125 
     | 
    
         
            -
                  "activity_notification/notifications"
         
     | 
| 
       126 
     | 
    
         
            -
                end
         
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
114 
     | 
    
         
             
                # Returns path of the target view templates.
         
     | 
| 
       129 
115 
     | 
    
         
             
                # This method has no action routing and needs to be public since it is called from view helper.
         
     | 
| 
       130 
116 
     | 
    
         
             
                def target_view_path
         
     | 
| 
       131 
     | 
    
         
            -
                   
     | 
| 
       132 
     | 
    
         
            -
                  view_path = [controller_path, target_type].join('/')
         
     | 
| 
       133 
     | 
    
         
            -
                  lookup_context.exists?(action_name, view_path) ?
         
     | 
| 
       134 
     | 
    
         
            -
                    view_path :
         
     | 
| 
       135 
     | 
    
         
            -
                    [controller_path, DEFAULT_VIEW_DIRECTORY].join('/')
         
     | 
| 
      
 117 
     | 
    
         
            +
                  super
         
     | 
| 
       136 
118 
     | 
    
         
             
                end
         
     | 
| 
       137 
119 
     | 
    
         | 
| 
       138 
120 
     | 
    
         
             
                protected
         
     | 
| 
       139 
121 
     | 
    
         | 
| 
       140 
     | 
    
         
            -
                  # Sets @target instance variable from request parameters.
         
     | 
| 
       141 
     | 
    
         
            -
                  # @api protected
         
     | 
| 
       142 
     | 
    
         
            -
                  # @return [Object] Target instance (Returns HTTP 400 when request parameters are not enough)
         
     | 
| 
       143 
     | 
    
         
            -
                  def set_target
         
     | 
| 
       144 
     | 
    
         
            -
                    if (target_type = params[:target_type]).present?
         
     | 
| 
       145 
     | 
    
         
            -
                      target_class = target_type.to_model_class
         
     | 
| 
       146 
     | 
    
         
            -
                      @target = params[:target_id].present? ?
         
     | 
| 
       147 
     | 
    
         
            -
                        target_class.find_by_id!(params[:target_id]) : 
         
     | 
| 
       148 
     | 
    
         
            -
                        target_class.find_by_id!(params["#{target_type.to_resource_name}_id"])
         
     | 
| 
       149 
     | 
    
         
            -
                    else
         
     | 
| 
       150 
     | 
    
         
            -
                      render plain: "400 Bad Request: Missing parameter", status: 400
         
     | 
| 
       151 
     | 
    
         
            -
                    end
         
     | 
| 
       152 
     | 
    
         
            -
                  end
         
     | 
| 
       153 
     | 
    
         
            -
              
         
     | 
| 
       154 
122 
     | 
    
         
             
                  # Sets @notification instance variable from request parameters.
         
     | 
| 
       155 
123 
     | 
    
         
             
                  # @api protected
         
     | 
| 
       156 
124 
     | 
    
         
             
                  # @return [Object] Notification instance (Returns HTTP 403 when the target of notification is different from specified target by request parameter)
         
     | 
| 
       157 
125 
     | 
    
         
             
                  def set_notification
         
     | 
| 
       158 
     | 
    
         
            -
                    @notification = Notification.find_by_id!(params[:id])
         
     | 
| 
       159 
     | 
    
         
            -
                    if @target.present? and @notification.target != @target
         
     | 
| 
       160 
     | 
    
         
            -
                      render plain: "403 Forbidden: Wrong target", status: 403
         
     | 
| 
       161 
     | 
    
         
            -
                    end
         
     | 
| 
      
 126 
     | 
    
         
            +
                    validate_target(@notification = Notification.includes(:target).find_by_id!(params[:id]))
         
     | 
| 
       162 
127 
     | 
    
         
             
                  end
         
     | 
| 
       163 
128 
     | 
    
         | 
| 
       164 
129 
     | 
    
         
             
                  # Sets options to load notification index from request parameters.
         
     | 
| 
         @@ -170,71 +135,32 @@ module ActivityNotification 
     | 
|
| 
       170 
135 
     | 
    
         
             
                                           params[:reverse].to_s.to_boolean(false) : nil
         
     | 
| 
       171 
136 
     | 
    
         
             
                    with_group_members = params[:with_group_members].present? || params[:without_grouping].present? ?
         
     | 
| 
       172 
137 
     | 
    
         
             
                                           params[:with_group_members].to_s.to_boolean(false) || params[:without_grouping].to_s.to_boolean(false) : nil
         
     | 
| 
       173 
     | 
    
         
            -
                    @index_options 
     | 
| 
       174 
     | 
    
         
            -
             
     | 
| 
       175 
     | 
    
         
            -
             
     | 
| 
      
 138 
     | 
    
         
            +
                    @index_options     = params.permit(:filter, :filtered_by_type, :filtered_by_group_type, :filtered_by_group_id, :filtered_by_key)
         
     | 
| 
      
 139 
     | 
    
         
            +
                                               .to_h.symbolize_keys
         
     | 
| 
      
 140 
     | 
    
         
            +
                                               .merge(limit: limit, reverse: reverse, with_group_members: with_group_members)
         
     | 
| 
       176 
141 
     | 
    
         
             
                  end
         
     | 
| 
       177 
142 
     | 
    
         | 
| 
       178 
143 
     | 
    
         
             
                  # Loads notification index with request parameters.
         
     | 
| 
       179 
144 
     | 
    
         
             
                  # @api protected
         
     | 
| 
       180 
     | 
    
         
            -
                  # @param [Hash] params Request parameter options for notification index
         
     | 
| 
       181 
     | 
    
         
            -
                  # @option params [String]  :filter                 (nil)   Filter option to load notification index (Nothing as auto, 'opened' or 'unopened')
         
     | 
| 
       182 
     | 
    
         
            -
                  # @option params [Integer] :limit                  (nil)   Limit to query for notifications
         
     | 
| 
       183 
     | 
    
         
            -
                  # @option params [Boolean] :reverse                (false) If notification index will be ordered as earliest first
         
     | 
| 
       184 
     | 
    
         
            -
                  # @option params [Boolean] :without_grouping       (false) If notification index will include group members
         
     | 
| 
       185 
     | 
    
         
            -
                  # @option params [String]  :filtered_by_type       (nil)   Notifiable type for filter
         
     | 
| 
       186 
     | 
    
         
            -
                  # @option params [String]  :filtered_by_group_type (nil)   Group type for filter, valid with :filtered_by_group_id
         
     | 
| 
       187 
     | 
    
         
            -
                  # @option params [String]  :filtered_by_group_id   (nil)   Group instance id for filter, valid with :filtered_by_group_type
         
     | 
| 
       188 
     | 
    
         
            -
                  # @option params [String]  :filtered_by_key        (nil)   Key of the notification for filter
         
     | 
| 
       189 
145 
     | 
    
         
             
                  # @return [Array] Array of notification index
         
     | 
| 
       190 
     | 
    
         
            -
                  def  
     | 
| 
       191 
     | 
    
         
            -
                     
     | 
| 
       192 
     | 
    
         
            -
             
     | 
| 
       193 
     | 
    
         
            -
                       
     | 
| 
       194 
     | 
    
         
            -
             
     | 
| 
       195 
     | 
    
         
            -
                       
     | 
| 
       196 
     | 
    
         
            -
             
     | 
| 
       197 
     | 
    
         
            -
                       
     | 
| 
       198 
     | 
    
         
            -
             
     | 
| 
      
 146 
     | 
    
         
            +
                  def load_index
         
     | 
| 
      
 147 
     | 
    
         
            +
                    @notifications = 
         
     | 
| 
      
 148 
     | 
    
         
            +
                      case @index_options[:filter]
         
     | 
| 
      
 149 
     | 
    
         
            +
                      when :opened, 'opened'
         
     | 
| 
      
 150 
     | 
    
         
            +
                        @target.opened_notification_index_with_attributes(@index_options)
         
     | 
| 
      
 151 
     | 
    
         
            +
                      when :unopened, 'unopened'
         
     | 
| 
      
 152 
     | 
    
         
            +
                        @target.unopened_notification_index_with_attributes(@index_options)
         
     | 
| 
      
 153 
     | 
    
         
            +
                      else
         
     | 
| 
      
 154 
     | 
    
         
            +
                        @target.notification_index_with_attributes(@index_options)
         
     | 
| 
      
 155 
     | 
    
         
            +
                      end
         
     | 
| 
       199 
156 
     | 
    
         
             
                  end
         
     | 
| 
       200 
157 
     | 
    
         | 
| 
       201 
     | 
    
         
            -
                  #  
     | 
| 
      
 158 
     | 
    
         
            +
                  # Returns controller path.
         
     | 
| 
      
 159 
     | 
    
         
            +
                  # This method is called from target_view_path method and can be overriden.
         
     | 
| 
       202 
160 
     | 
    
         
             
                  # @api protected
         
     | 
| 
       203 
     | 
    
         
            -
                   
     | 
| 
       204 
     | 
    
         
            -
             
     | 
| 
       205 
     | 
    
         
            -
             
     | 
| 
       206 
     | 
    
         
            -
              
         
     | 
| 
       207 
     | 
    
         
            -
                  # Returns JavaScript view for ajax request or redirects to back as default.
         
     | 
| 
       208 
     | 
    
         
            -
                  # @api protected
         
     | 
| 
       209 
     | 
    
         
            -
                  # @option params [String]  :filter                 (nil)   Filter option to load notification index (Nothing as auto, 'opened' or 'unopened')
         
     | 
| 
       210 
     | 
    
         
            -
                  # @option params [Integer] :limit                  (nil)   Limit to query for notifications
         
     | 
| 
       211 
     | 
    
         
            -
                  # @option params [Boolean] :reverse                (false) If notification index will be ordered as earliest first
         
     | 
| 
       212 
     | 
    
         
            -
                  # @option params [Boolean] :without_grouping       (false) If notification index will include group members
         
     | 
| 
       213 
     | 
    
         
            -
                  # @option params [String]  :filtered_by_type       (nil)   Notifiable type for filter
         
     | 
| 
       214 
     | 
    
         
            -
                  # @option params [String]  :filtered_by_group_type (nil)   Group type for filter, valid with :filtered_by_group_id
         
     | 
| 
       215 
     | 
    
         
            -
                  # @option params [String]  :filtered_by_group_id   (nil)   Group instance id for filter, valid with :filtered_by_group_type
         
     | 
| 
       216 
     | 
    
         
            -
                  # @option params [String]  :filtered_by_key        (nil)   Key of the notification for filter
         
     | 
| 
       217 
     | 
    
         
            -
                  # @return [Responce] JavaScript view for ajax request or redirects to back as default
         
     | 
| 
       218 
     | 
    
         
            -
                  def return_back_or_ajax
         
     | 
| 
       219 
     | 
    
         
            -
                    set_index_options
         
     | 
| 
       220 
     | 
    
         
            -
                    if params[:reload].to_s.to_boolean(true)
         
     | 
| 
       221 
     | 
    
         
            -
                      @notifications = load_notification_index(@index_options) 
         
     | 
| 
       222 
     | 
    
         
            -
                    end
         
     | 
| 
       223 
     | 
    
         
            -
                    respond_to do |format|
         
     | 
| 
       224 
     | 
    
         
            -
                      if request.xhr?
         
     | 
| 
       225 
     | 
    
         
            -
                        format.js
         
     | 
| 
       226 
     | 
    
         
            -
                      # :skip-rails4:
         
     | 
| 
       227 
     | 
    
         
            -
                      elsif Rails::VERSION::MAJOR >= 5
         
     | 
| 
       228 
     | 
    
         
            -
                        redirect_back fallback_location: { action: :index }, **@index_options and return
         
     | 
| 
       229 
     | 
    
         
            -
                      # :skip-rails4:
         
     | 
| 
       230 
     | 
    
         
            -
                      # :skip-rails5:
         
     | 
| 
       231 
     | 
    
         
            -
                      elsif request.referer
         
     | 
| 
       232 
     | 
    
         
            -
                        redirect_to :back, **@index_options and return
         
     | 
| 
       233 
     | 
    
         
            -
                      else
         
     | 
| 
       234 
     | 
    
         
            -
                        redirect_to action: :index, **@index_options and return
         
     | 
| 
       235 
     | 
    
         
            -
                      end
         
     | 
| 
       236 
     | 
    
         
            -
                      # :skip-rails5:
         
     | 
| 
       237 
     | 
    
         
            -
                    end
         
     | 
| 
      
 161 
     | 
    
         
            +
                  # @return [String] "activity_notification/notifications" as controller path
         
     | 
| 
      
 162 
     | 
    
         
            +
                  def controller_path
         
     | 
| 
      
 163 
     | 
    
         
            +
                    "activity_notification/notifications"
         
     | 
| 
       238 
164 
     | 
    
         
             
                  end
         
     | 
| 
       239 
165 
     | 
    
         | 
| 
       240 
166 
     | 
    
         
             
              end
         
     | 
| 
         @@ -1,38 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module ActivityNotification
         
     | 
| 
       2 
2 
     | 
    
         
             
              # Controller to manage notifications with Devise authentication.
         
     | 
| 
       3 
3 
     | 
    
         
             
              class NotificationsWithDeviseController < NotificationsController
         
     | 
| 
       4 
     | 
    
         
            -
                 
     | 
| 
       5 
     | 
    
         
            -
                before_action :authenticate_target!
         
     | 
| 
       6 
     | 
    
         
            -
                
         
     | 
| 
       7 
     | 
    
         
            -
                protected
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
                  # Authenticate devise resource by Devise (e.g. calling authenticate_user! method).
         
     | 
| 
       10 
     | 
    
         
            -
                  # @api protected
         
     | 
| 
       11 
     | 
    
         
            -
                  # @todo Needs to call authenticate method by more secure way
         
     | 
| 
       12 
     | 
    
         
            -
                  # @return [Responce] Redirects for unsigned in target by Devise, returns HTTP 403 without neccesary target method or returns 400 when request parameters are not enough
         
     | 
| 
       13 
     | 
    
         
            -
                  def authenticate_devise_resource!
         
     | 
| 
       14 
     | 
    
         
            -
                    if params[:devise_type].present?
         
     | 
| 
       15 
     | 
    
         
            -
                      authenticate_method_name = "authenticate_#{params[:devise_type].to_resource_name}!"
         
     | 
| 
       16 
     | 
    
         
            -
                      if respond_to?(authenticate_method_name)
         
     | 
| 
       17 
     | 
    
         
            -
                        send(authenticate_method_name)
         
     | 
| 
       18 
     | 
    
         
            -
                      else
         
     | 
| 
       19 
     | 
    
         
            -
                        render plain: "403 Forbidden: Unauthenticated", status: 403
         
     | 
| 
       20 
     | 
    
         
            -
                      end
         
     | 
| 
       21 
     | 
    
         
            -
                    else
         
     | 
| 
       22 
     | 
    
         
            -
                      render plain: "400 Bad Request: Missing parameter", status: 400
         
     | 
| 
       23 
     | 
    
         
            -
                    end
         
     | 
| 
       24 
     | 
    
         
            -
                  end
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                  # Authenticate the target of requested notification with authenticated devise resource.
         
     | 
| 
       27 
     | 
    
         
            -
                  # @api protected
         
     | 
| 
       28 
     | 
    
         
            -
                  # @todo Needs to call authenticate method by more secure way
         
     | 
| 
       29 
     | 
    
         
            -
                  # @return [Responce] Returns HTTP 403 for unauthorized target
         
     | 
| 
       30 
     | 
    
         
            -
                  def authenticate_target!
         
     | 
| 
       31 
     | 
    
         
            -
                    current_resource_method_name = "current_#{params[:devise_type].to_resource_name}"
         
     | 
| 
       32 
     | 
    
         
            -
                    unless @target.authenticated_with_devise?(send(current_resource_method_name))
         
     | 
| 
       33 
     | 
    
         
            -
                      render plain: "403 Forbidden: Unauthorized target", status: 403
         
     | 
| 
       34 
     | 
    
         
            -
                    end
         
     | 
| 
       35 
     | 
    
         
            -
                  end
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
                include DeviceAuthenticationController
         
     | 
| 
       37 
5 
     | 
    
         
             
              end
         
     | 
| 
       38 
6 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,184 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module ActivityNotification
         
     | 
| 
      
 2 
     | 
    
         
            +
              # Controller to manage subscriptions.
         
     | 
| 
      
 3 
     | 
    
         
            +
              class SubscriptionsController < ActivityNotification.config.parent_controller.constantize
         
     | 
| 
      
 4 
     | 
    
         
            +
                # Include CommonController to select target and define common methods
         
     | 
| 
      
 5 
     | 
    
         
            +
                include CommonController
         
     | 
| 
      
 6 
     | 
    
         
            +
                before_action :set_subscription, except: [:index, :create]
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                # Shows subscription index of the target.
         
     | 
| 
      
 9 
     | 
    
         
            +
                #
         
     | 
| 
      
 10 
     | 
    
         
            +
                # GET /:target_type/:target_id/subscriptions
         
     | 
| 
      
 11 
     | 
    
         
            +
                # @overload index(params)
         
     | 
| 
      
 12 
     | 
    
         
            +
                #   @param [Hash] params Request parameter options for subscription index
         
     | 
| 
      
 13 
     | 
    
         
            +
                #   @option params [String] :filter          (nil)     Filter option to load subscription index (Nothing as all, 'configured' or 'unconfigured')
         
     | 
| 
      
 14 
     | 
    
         
            +
                #   @option params [String] :limit           (nil)     Limit to query for subscriptions
         
     | 
| 
      
 15 
     | 
    
         
            +
                #   @option params [String] :reverse         ('false') If subscription index and unconfigured notification keys will be ordered as earliest first
         
     | 
| 
      
 16 
     | 
    
         
            +
                #   @option params [String] :filtered_by_key (nil)     Key of the subscription for filter
         
     | 
| 
      
 17 
     | 
    
         
            +
                #   @return [Responce] HTML view as default or JSON of subscription index with json format parameter
         
     | 
| 
      
 18 
     | 
    
         
            +
                def index
         
     | 
| 
      
 19 
     | 
    
         
            +
                  set_index_options
         
     | 
| 
      
 20 
     | 
    
         
            +
                  load_index if params[:reload].to_s.to_boolean(true)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  respond_to do |format|
         
     | 
| 
      
 22 
     | 
    
         
            +
                    format.html # index.html.erb
         
     | 
| 
      
 23 
     | 
    
         
            +
                    format.json { render json: { subscriptions: @subscriptions, unconfigured_notification_keys: @notification_keys } }
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                # Creates a subscription.
         
     | 
| 
      
 28 
     | 
    
         
            +
                #
         
     | 
| 
      
 29 
     | 
    
         
            +
                # POST /:target_type/:target_id/subscriptions
         
     | 
| 
      
 30 
     | 
    
         
            +
                #
         
     | 
| 
      
 31 
     | 
    
         
            +
                # @overload create(params)
         
     | 
| 
      
 32 
     | 
    
         
            +
                #   @param [Hash] params Request parameters
         
     | 
| 
      
 33 
     | 
    
         
            +
                #   @option params [String] :subscription                              Subscription parameters
         
     | 
| 
      
 34 
     | 
    
         
            +
                #   @option params [String] :subscription[:key]                        Key of the subscription
         
     | 
| 
      
 35 
     | 
    
         
            +
                #   @option params [String] :subscription[:subscribing]          (nil) If the target will subscribe to the notification
         
     | 
| 
      
 36 
     | 
    
         
            +
                #   @option params [String] :subscription[:subscribing_to_email] (nil) If the target will subscribe to the notification email
         
     | 
| 
      
 37 
     | 
    
         
            +
                #   @option params [String] :filter          (nil)     Filter option to load subscription index (Nothing as all, 'configured' or 'unconfigured')
         
     | 
| 
      
 38 
     | 
    
         
            +
                #   @option params [String] :limit           (nil)     Limit to query for subscriptions
         
     | 
| 
      
 39 
     | 
    
         
            +
                #   @option params [String] :reverse         ('false') If subscription index and unconfigured notification keys will be ordered as earliest first
         
     | 
| 
      
 40 
     | 
    
         
            +
                #   @option params [String] :filtered_by_key (nil)     Key of the subscription for filter
         
     | 
| 
      
 41 
     | 
    
         
            +
                #   @return [Responce] JavaScript view for ajax request or redirects to back as default
         
     | 
| 
      
 42 
     | 
    
         
            +
                def create
         
     | 
| 
      
 43 
     | 
    
         
            +
                  @target.create_subscription(subscription_params)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  return_back_or_ajax
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                # Shows a subscription.
         
     | 
| 
      
 48 
     | 
    
         
            +
                #
         
     | 
| 
      
 49 
     | 
    
         
            +
                # GET /:target_type/:target_id/subscriptions/:id
         
     | 
| 
      
 50 
     | 
    
         
            +
                # @overload show(params)
         
     | 
| 
      
 51 
     | 
    
         
            +
                #   @param [Hash] params Request parameters
         
     | 
| 
      
 52 
     | 
    
         
            +
                #   @return [Responce] HTML view as default
         
     | 
| 
      
 53 
     | 
    
         
            +
                def show
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
              
         
     | 
| 
      
 56 
     | 
    
         
            +
                # Deletes a subscription.
         
     | 
| 
      
 57 
     | 
    
         
            +
                #
         
     | 
| 
      
 58 
     | 
    
         
            +
                # DELETE /:target_type/:target_id/subscriptions/:id
         
     | 
| 
      
 59 
     | 
    
         
            +
                #
         
     | 
| 
      
 60 
     | 
    
         
            +
                # @overload destroy(params)
         
     | 
| 
      
 61 
     | 
    
         
            +
                #   @param [Hash] params Request parameters
         
     | 
| 
      
 62 
     | 
    
         
            +
                #   @option params [String] :filter          (nil)     Filter option to load subscription index (Nothing as all, 'configured' or 'unconfigured')
         
     | 
| 
      
 63 
     | 
    
         
            +
                #   @option params [String] :limit           (nil)     Limit to query for subscriptions
         
     | 
| 
      
 64 
     | 
    
         
            +
                #   @option params [String] :reverse         ('false') If subscription index and unconfigured notification keys will be ordered as earliest first
         
     | 
| 
      
 65 
     | 
    
         
            +
                #   @option params [String] :filtered_by_key (nil)     Key of the subscription for filter
         
     | 
| 
      
 66 
     | 
    
         
            +
                #   @return [Responce] JavaScript view for ajax request or redirects to back as default
         
     | 
| 
      
 67 
     | 
    
         
            +
                def destroy
         
     | 
| 
      
 68 
     | 
    
         
            +
                  @subscription.destroy
         
     | 
| 
      
 69 
     | 
    
         
            +
                  return_back_or_ajax
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                # Subscribes to the notification.
         
     | 
| 
      
 73 
     | 
    
         
            +
                #
         
     | 
| 
      
 74 
     | 
    
         
            +
                # POST /:target_type/:target_id/subscriptions/:id/subscribe
         
     | 
| 
      
 75 
     | 
    
         
            +
                # @overload open(params)
         
     | 
| 
      
 76 
     | 
    
         
            +
                #   @param [Hash] params Request parameters
         
     | 
| 
      
 77 
     | 
    
         
            +
                #   @option params [String] :with_email_subscription ('true')  If the subscriber also subscribes notification email
         
     | 
| 
      
 78 
     | 
    
         
            +
                #   @option params [String] :filter                  (nil)     Filter option to load subscription index (Nothing as all, 'configured' or 'unconfigured')
         
     | 
| 
      
 79 
     | 
    
         
            +
                #   @option params [String] :limit                   (nil)     Limit to query for subscriptions
         
     | 
| 
      
 80 
     | 
    
         
            +
                #   @option params [String] :reverse                 ('false') If subscription index and unconfigured notification keys will be ordered as earliest first
         
     | 
| 
      
 81 
     | 
    
         
            +
                #   @option params [String] :filtered_by_key         (nil)     Key of the subscription for filter
         
     | 
| 
      
 82 
     | 
    
         
            +
                #   @return [Responce] JavaScript view for ajax request or redirects to back as default
         
     | 
| 
      
 83 
     | 
    
         
            +
                def subscribe
         
     | 
| 
      
 84 
     | 
    
         
            +
                  @subscription.subscribe(with_email_subscription: params[:with_email_subscription].to_s.to_boolean(true))
         
     | 
| 
      
 85 
     | 
    
         
            +
                  return_back_or_ajax
         
     | 
| 
      
 86 
     | 
    
         
            +
                end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                # Unsubscribes to the notification.
         
     | 
| 
      
 89 
     | 
    
         
            +
                #
         
     | 
| 
      
 90 
     | 
    
         
            +
                # POST /:target_type/:target_id/subscriptions/:id/unsubscribe
         
     | 
| 
      
 91 
     | 
    
         
            +
                # @overload open(params)
         
     | 
| 
      
 92 
     | 
    
         
            +
                #   @param [Hash] params Request parameters
         
     | 
| 
      
 93 
     | 
    
         
            +
                #   @option params [String] :filter          (nil)     Filter option to load subscription index (Nothing as all, 'configured' or 'unconfigured')
         
     | 
| 
      
 94 
     | 
    
         
            +
                #   @option params [String] :limit           (nil)     Limit to query for subscriptions
         
     | 
| 
      
 95 
     | 
    
         
            +
                #   @option params [String] :reverse         ('false') If subscription index and unconfigured notification keys will be ordered as earliest first
         
     | 
| 
      
 96 
     | 
    
         
            +
                #   @option params [String] :filtered_by_key (nil)     Key of the subscription for filter
         
     | 
| 
      
 97 
     | 
    
         
            +
                #   @return [Responce] JavaScript view for ajax request or redirects to back as default
         
     | 
| 
      
 98 
     | 
    
         
            +
                def unsubscribe
         
     | 
| 
      
 99 
     | 
    
         
            +
                  @subscription.unsubscribe
         
     | 
| 
      
 100 
     | 
    
         
            +
                  return_back_or_ajax
         
     | 
| 
      
 101 
     | 
    
         
            +
                end
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
                # Subscribes to the notification email.
         
     | 
| 
      
 104 
     | 
    
         
            +
                #
         
     | 
| 
      
 105 
     | 
    
         
            +
                # POST /:target_type/:target_id/subscriptions/:id/subscribe_email
         
     | 
| 
      
 106 
     | 
    
         
            +
                # @overload open(params)
         
     | 
| 
      
 107 
     | 
    
         
            +
                #   @param [Hash] params Request parameters
         
     | 
| 
      
 108 
     | 
    
         
            +
                #   @option params [String] :filter          (nil)     Filter option to load subscription index (Nothing as all, 'configured' or 'unconfigured')
         
     | 
| 
      
 109 
     | 
    
         
            +
                #   @option params [String] :limit           (nil)     Limit to query for subscriptions
         
     | 
| 
      
 110 
     | 
    
         
            +
                #   @option params [String] :reverse         ('false') If subscription index and unconfigured notification keys will be ordered as earliest first
         
     | 
| 
      
 111 
     | 
    
         
            +
                #   @option params [String] :filtered_by_key (nil)     Key of the subscription for filter
         
     | 
| 
      
 112 
     | 
    
         
            +
                #   @return [Responce] JavaScript view for ajax request or redirects to back as default
         
     | 
| 
      
 113 
     | 
    
         
            +
                def subscribe_to_email
         
     | 
| 
      
 114 
     | 
    
         
            +
                  @subscription.subscribe_to_email
         
     | 
| 
      
 115 
     | 
    
         
            +
                  return_back_or_ajax
         
     | 
| 
      
 116 
     | 
    
         
            +
                end
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
                # Unsubscribes to the notification email.
         
     | 
| 
      
 119 
     | 
    
         
            +
                #
         
     | 
| 
      
 120 
     | 
    
         
            +
                # POST /:target_type/:target_id/subscriptions/:id/unsubscribe_email
         
     | 
| 
      
 121 
     | 
    
         
            +
                # @overload open(params)
         
     | 
| 
      
 122 
     | 
    
         
            +
                #   @param [Hash] params Request parameters
         
     | 
| 
      
 123 
     | 
    
         
            +
                #   @option params [String] :filter          (nil)     Filter option to load subscription index (Nothing as all, 'configured' or 'unconfigured')
         
     | 
| 
      
 124 
     | 
    
         
            +
                #   @option params [String] :limit           (nil)     Limit to query for subscriptions
         
     | 
| 
      
 125 
     | 
    
         
            +
                #   @option params [String] :reverse         ('false') If subscription index and unconfigured notification keys will be ordered as earliest first
         
     | 
| 
      
 126 
     | 
    
         
            +
                #   @option params [String] :filtered_by_key (nil)     Key of the subscription for filter
         
     | 
| 
      
 127 
     | 
    
         
            +
                #   @return [Responce] JavaScript view for ajax request or redirects to back as default
         
     | 
| 
      
 128 
     | 
    
         
            +
                def unsubscribe_to_email
         
     | 
| 
      
 129 
     | 
    
         
            +
                  @subscription.unsubscribe_to_email
         
     | 
| 
      
 130 
     | 
    
         
            +
                  return_back_or_ajax
         
     | 
| 
      
 131 
     | 
    
         
            +
                end
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
                protected
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
                  # Sets @subscription instance variable from request parameters.
         
     | 
| 
      
 136 
     | 
    
         
            +
                  # @api protected
         
     | 
| 
      
 137 
     | 
    
         
            +
                  # @return [Object] Subscription instance (Returns HTTP 403 when the target of subscription is different from specified target by request parameter)
         
     | 
| 
      
 138 
     | 
    
         
            +
                  def set_subscription
         
     | 
| 
      
 139 
     | 
    
         
            +
                    validate_target(@subscription = Subscription.includes(:target).find_by_id!(params[:id]))
         
     | 
| 
      
 140 
     | 
    
         
            +
                  end
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
                  # Only allow a trusted parameter "white list" through.
         
     | 
| 
      
 143 
     | 
    
         
            +
                  def subscription_params
         
     | 
| 
      
 144 
     | 
    
         
            +
                    params.require(:subscription).permit(:key, :subscribing, :subscribing_to_email)
         
     | 
| 
      
 145 
     | 
    
         
            +
                  end
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
                  # Sets options to load subscription index from request parameters.
         
     | 
| 
      
 148 
     | 
    
         
            +
                  # @api protected
         
     | 
| 
      
 149 
     | 
    
         
            +
                  # @return [Hash] options to load subscription index
         
     | 
| 
      
 150 
     | 
    
         
            +
                  def set_index_options
         
     | 
| 
      
 151 
     | 
    
         
            +
                    limit          = params[:limit].to_i > 0 ? params[:limit].to_i : nil
         
     | 
| 
      
 152 
     | 
    
         
            +
                    reverse        = params[:reverse].present? ?
         
     | 
| 
      
 153 
     | 
    
         
            +
                                       params[:reverse].to_s.to_boolean(false) : nil
         
     | 
| 
      
 154 
     | 
    
         
            +
                    @index_options = params.permit(:filter, :filtered_by_key)
         
     | 
| 
      
 155 
     | 
    
         
            +
                                           .to_h.symbolize_keys.merge(limit: limit, reverse: reverse)
         
     | 
| 
      
 156 
     | 
    
         
            +
                  end
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
                  # Loads subscription index with request parameters.
         
     | 
| 
      
 159 
     | 
    
         
            +
                  # @api protected
         
     | 
| 
      
 160 
     | 
    
         
            +
                  # @return [Array] Array of subscription index
         
     | 
| 
      
 161 
     | 
    
         
            +
                  def load_index
         
     | 
| 
      
 162 
     | 
    
         
            +
                    case @index_options[:filter]
         
     | 
| 
      
 163 
     | 
    
         
            +
                    when :configured, 'configured'
         
     | 
| 
      
 164 
     | 
    
         
            +
                      @subscriptions = @target.subscription_index(@index_options.merge(with_target: true))
         
     | 
| 
      
 165 
     | 
    
         
            +
                      @notification_keys = nil
         
     | 
| 
      
 166 
     | 
    
         
            +
                    when :unconfigured, 'unconfigured'
         
     | 
| 
      
 167 
     | 
    
         
            +
                      @subscriptions = nil
         
     | 
| 
      
 168 
     | 
    
         
            +
                      @notification_keys = @target.notification_keys(@index_options.merge(filter: :unconfigured))
         
     | 
| 
      
 169 
     | 
    
         
            +
                    else
         
     | 
| 
      
 170 
     | 
    
         
            +
                      @subscriptions = @target.subscription_index(@index_options.merge(with_target: true))
         
     | 
| 
      
 171 
     | 
    
         
            +
                      @notification_keys = @target.notification_keys(@index_options.merge(filter: :unconfigured))
         
     | 
| 
      
 172 
     | 
    
         
            +
                    end
         
     | 
| 
      
 173 
     | 
    
         
            +
                  end
         
     | 
| 
      
 174 
     | 
    
         
            +
             
     | 
| 
      
 175 
     | 
    
         
            +
                  # Returns controller path.
         
     | 
| 
      
 176 
     | 
    
         
            +
                  # This method is called from target_view_path method and can be overriden.
         
     | 
| 
      
 177 
     | 
    
         
            +
                  # @api protected
         
     | 
| 
      
 178 
     | 
    
         
            +
                  # @return [String] "activity_notification/subscriptions" as controller path
         
     | 
| 
      
 179 
     | 
    
         
            +
                  def controller_path
         
     | 
| 
      
 180 
     | 
    
         
            +
                    "activity_notification/subscriptions"
         
     | 
| 
      
 181 
     | 
    
         
            +
                  end
         
     | 
| 
      
 182 
     | 
    
         
            +
             
     | 
| 
      
 183 
     | 
    
         
            +
              end
         
     | 
| 
      
 184 
     | 
    
         
            +
            end
         
     |