gitextract_qznkm5wg/ ├── .codeclimate.yml ├── .coveralls.yml ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ ├── pull_request_template.md │ └── workflows/ │ └── build.yml ├── .gitignore ├── .rspec ├── .rubocop.yml ├── .yardopts ├── CHANGELOG.md ├── Gemfile ├── MIT-LICENSE ├── Procfile ├── README.md ├── Rakefile ├── activity_notification.gemspec ├── ai-docs/ │ ├── ROADMAP.md │ └── issues/ │ ├── 107/ │ │ └── CC_FEATURE_IMPLEMENTATION.md │ ├── 127/ │ │ ├── CASCADING_NOTIFICATIONS_EXAMPLE.md │ │ ├── CASCADING_NOTIFICATIONS_IMPLEMENTATION.md │ │ ├── CASCADING_NOTIFICATIONS_QUICKSTART.md │ │ └── IMPLEMENTATION_SUMMARY.md │ ├── 148/ │ │ ├── design.md │ │ ├── requirements.md │ │ └── tasks.md │ ├── 154/ │ │ ├── design.md │ │ ├── requirements.md │ │ └── tasks.md │ ├── 172/ │ │ ├── design.md │ │ └── tasks.md │ ├── 188/ │ │ ├── design.md │ │ ├── requirements.md │ │ ├── tasks.md │ │ └── upstream-contributions.md │ ├── 202/ │ │ ├── design.md │ │ ├── requirements.md │ │ └── tasks.md │ └── 50/ │ ├── design.md │ ├── requirements.md │ └── tasks.md ├── app/ │ ├── channels/ │ │ └── activity_notification/ │ │ ├── notification_api_channel.rb │ │ ├── notification_api_with_devise_channel.rb │ │ ├── notification_channel.rb │ │ └── notification_with_devise_channel.rb │ ├── controllers/ │ │ └── activity_notification/ │ │ ├── apidocs_controller.rb │ │ ├── notifications_api_controller.rb │ │ ├── notifications_api_with_devise_controller.rb │ │ ├── notifications_controller.rb │ │ ├── notifications_with_devise_controller.rb │ │ ├── subscriptions_api_controller.rb │ │ ├── subscriptions_api_with_devise_controller.rb │ │ ├── subscriptions_controller.rb │ │ └── subscriptions_with_devise_controller.rb │ ├── jobs/ │ │ └── activity_notification/ │ │ ├── cascading_notification_job.rb │ │ ├── notify_all_job.rb │ │ ├── notify_job.rb │ │ └── notify_to_job.rb │ ├── mailers/ │ │ └── activity_notification/ │ │ └── mailer.rb │ └── views/ │ └── activity_notification/ │ ├── mailer/ │ │ └── default/ │ │ ├── batch_default.html.erb │ │ ├── batch_default.text.erb │ │ ├── default.html.erb │ │ └── default.text.erb │ ├── notifications/ │ │ └── default/ │ │ ├── _default.html.erb │ │ ├── _default_without_grouping.html.erb │ │ ├── _index.html.erb │ │ ├── destroy.js.erb │ │ ├── destroy_all.js.erb │ │ ├── index.html.erb │ │ ├── open.js.erb │ │ ├── open_all.js.erb │ │ └── show.html.erb │ ├── optional_targets/ │ │ └── default/ │ │ ├── action_cable_channel/ │ │ │ └── _default.html.erb │ │ ├── base/ │ │ │ └── _default.text.erb │ │ └── slack/ │ │ └── _default.text.erb │ └── subscriptions/ │ └── default/ │ ├── _form.html.erb │ ├── _notification_keys.html.erb │ ├── _subscription.html.erb │ ├── _subscriptions.html.erb │ ├── create.js.erb │ ├── destroy.js.erb │ ├── index.html.erb │ ├── show.html.erb │ ├── subscribe.js.erb │ ├── subscribe_to_email.js.erb │ ├── subscribe_to_optional_target.js.erb │ ├── unsubscribe.js.erb │ ├── unsubscribe_to_email.js.erb │ └── unsubscribe_to_optional_target.js.erb ├── bin/ │ ├── _dynamodblocal │ ├── bundle_update.sh │ ├── deploy_on_heroku.sh │ ├── install_dynamodblocal.sh │ ├── start_dynamodblocal.sh │ └── stop_dynamodblocal.sh ├── docs/ │ ├── CODE_OF_CONDUCT.md │ ├── CONTRIBUTING.md │ ├── Functions.md │ ├── Setup.md │ ├── Testing.md │ └── Upgrade-to-2.6.md ├── gemfiles/ │ ├── Gemfile.rails-5.0 │ ├── Gemfile.rails-5.1 │ ├── Gemfile.rails-5.2 │ ├── Gemfile.rails-6.0 │ ├── Gemfile.rails-6.1 │ ├── Gemfile.rails-7.0 │ ├── Gemfile.rails-7.1 │ ├── Gemfile.rails-7.2 │ ├── Gemfile.rails-8.0 │ └── Gemfile.rails-8.1 ├── lib/ │ ├── activity_notification/ │ │ ├── apis/ │ │ │ ├── cascading_notification_api.rb │ │ │ ├── notification_api.rb │ │ │ ├── subscription_api.rb │ │ │ └── swagger.rb │ │ ├── common.rb │ │ ├── config.rb │ │ ├── controllers/ │ │ │ ├── common_api_controller.rb │ │ │ ├── common_controller.rb │ │ │ ├── concerns/ │ │ │ │ └── swagger/ │ │ │ │ ├── error_responses.rb │ │ │ │ ├── notifications_api.rb │ │ │ │ ├── notifications_parameters.rb │ │ │ │ ├── subscriptions_api.rb │ │ │ │ └── subscriptions_parameters.rb │ │ │ ├── devise_authentication_controller.rb │ │ │ └── store_controller.rb │ │ ├── gem_version.rb │ │ ├── helpers/ │ │ │ ├── errors.rb │ │ │ ├── polymorphic_helpers.rb │ │ │ └── view_helpers.rb │ │ ├── mailers/ │ │ │ └── helpers.rb │ │ ├── models/ │ │ │ ├── concerns/ │ │ │ │ ├── group.rb │ │ │ │ ├── notifiable.rb │ │ │ │ ├── notifier.rb │ │ │ │ ├── subscriber.rb │ │ │ │ ├── swagger/ │ │ │ │ │ ├── error_schema.rb │ │ │ │ │ ├── notification_schema.rb │ │ │ │ │ └── subscription_schema.rb │ │ │ │ └── target.rb │ │ │ ├── notification.rb │ │ │ └── subscription.rb │ │ ├── models.rb │ │ ├── notification_resilience.rb │ │ ├── optional_targets/ │ │ │ ├── action_cable_api_channel.rb │ │ │ ├── action_cable_channel.rb │ │ │ ├── amazon_sns.rb │ │ │ ├── base.rb │ │ │ └── slack.rb │ │ ├── orm/ │ │ │ ├── active_record/ │ │ │ │ ├── notification.rb │ │ │ │ └── subscription.rb │ │ │ ├── active_record.rb │ │ │ ├── dynamoid/ │ │ │ │ ├── extension.rb │ │ │ │ ├── notification.rb │ │ │ │ └── subscription.rb │ │ │ ├── dynamoid.rb │ │ │ ├── mongoid/ │ │ │ │ ├── notification.rb │ │ │ │ └── subscription.rb │ │ │ └── mongoid.rb │ │ ├── rails/ │ │ │ └── routes.rb │ │ ├── rails.rb │ │ ├── renderable.rb │ │ ├── roles/ │ │ │ ├── acts_as_common.rb │ │ │ ├── acts_as_group.rb │ │ │ ├── acts_as_notifiable.rb │ │ │ ├── acts_as_notifier.rb │ │ │ └── acts_as_target.rb │ │ └── version.rb │ ├── activity_notification.rb │ ├── generators/ │ │ ├── activity_notification/ │ │ │ ├── add_notifiable_to_subscriptions/ │ │ │ │ └── add_notifiable_to_subscriptions_generator.rb │ │ │ ├── controllers_generator.rb │ │ │ ├── install_generator.rb │ │ │ ├── migration/ │ │ │ │ └── migration_generator.rb │ │ │ ├── models_generator.rb │ │ │ └── views_generator.rb │ │ └── templates/ │ │ ├── README │ │ ├── activity_notification.rb │ │ ├── controllers/ │ │ │ ├── README │ │ │ ├── notifications_api_controller.rb │ │ │ ├── notifications_api_with_devise_controller.rb │ │ │ ├── notifications_controller.rb │ │ │ ├── notifications_with_devise_controller.rb │ │ │ ├── subscriptions_api_controller.rb │ │ │ ├── subscriptions_api_with_devise_controller.rb │ │ │ ├── subscriptions_controller.rb │ │ │ └── subscriptions_with_devise_controller.rb │ │ ├── locales/ │ │ │ └── en.yml │ │ ├── migrations/ │ │ │ ├── add_notifiable_to_subscriptions.rb │ │ │ └── migration.rb │ │ └── models/ │ │ ├── README │ │ ├── notification.rb │ │ └── subscription.rb │ └── tasks/ │ └── activity_notification_tasks.rake ├── package.json └── spec/ ├── channels/ │ ├── notification_api_channel_shared_examples.rb │ ├── notification_api_channel_spec.rb │ ├── notification_api_with_devise_channel_spec.rb │ ├── notification_channel_shared_examples.rb │ ├── notification_channel_spec.rb │ └── notification_with_devise_channel_spec.rb ├── concerns/ │ ├── apis/ │ │ ├── cascading_notification_api_spec.rb │ │ ├── notification_api_performance_spec.rb │ │ ├── notification_api_spec.rb │ │ └── subscription_api_spec.rb │ ├── common_spec.rb │ ├── models/ │ │ ├── group_spec.rb │ │ ├── instance_subscription_spec.rb │ │ ├── notifiable_spec.rb │ │ ├── notifier_spec.rb │ │ ├── subscriber_spec.rb │ │ └── target_spec.rb │ └── renderable_spec.rb ├── config_spec.rb ├── controllers/ │ ├── common_controller_spec.rb │ ├── controller_spec_utility.rb │ ├── dummy_common_controller.rb │ ├── notifications_api_controller_shared_examples.rb │ ├── notifications_api_controller_spec.rb │ ├── notifications_api_with_devise_controller_spec.rb │ ├── notifications_controller_shared_examples.rb │ ├── notifications_controller_spec.rb │ ├── notifications_with_devise_controller_spec.rb │ ├── subscriptions_api_controller_shared_examples.rb │ ├── subscriptions_api_controller_spec.rb │ ├── subscriptions_api_with_devise_controller_spec.rb │ ├── subscriptions_controller_shared_examples.rb │ ├── subscriptions_controller_spec.rb │ └── subscriptions_with_devise_controller_spec.rb ├── factories/ │ ├── admins.rb │ ├── articles.rb │ ├── comments.rb │ ├── dummy/ │ │ ├── dummy_group.rb │ │ ├── dummy_notifiable.rb │ │ ├── dummy_notifier.rb │ │ ├── dummy_subscriber.rb │ │ └── dummy_target.rb │ ├── notifications.rb │ ├── subscriptions.rb │ └── users.rb ├── generators/ │ ├── controllers_generator_spec.rb │ ├── install_generator_spec.rb │ ├── migration/ │ │ ├── add_notifiable_to_subscriptions_generator_spec.rb │ │ └── migration_generator_spec.rb │ ├── models_generator_spec.rb │ └── views_generator_spec.rb ├── helpers/ │ ├── polymorphic_helpers_spec.rb │ └── view_helpers_spec.rb ├── integration/ │ └── cascading_notifications_spec.rb ├── jobs/ │ ├── cascading_notification_job_spec.rb │ ├── notification_resilience_job_spec.rb │ ├── notify_all_job_spec.rb │ ├── notify_job_spec.rb │ └── notify_to_job_spec.rb ├── mailers/ │ ├── mailer_spec.rb │ └── notification_resilience_spec.rb ├── models/ │ ├── dummy/ │ │ ├── dummy_group_spec.rb │ │ ├── dummy_instance_subscription_spec.rb │ │ ├── dummy_notifiable_spec.rb │ │ ├── dummy_notifier_spec.rb │ │ ├── dummy_subscriber_spec.rb │ │ └── dummy_target_spec.rb │ ├── notification_spec.rb │ └── subscription_spec.rb ├── optional_targets/ │ ├── action_cable_api_channel_spec.rb │ ├── action_cable_channel_spec.rb │ ├── amazon_sns_spec.rb │ ├── base_spec.rb │ └── slack_spec.rb ├── orm/ │ └── dynamoid_spec.rb ├── rails_app/ │ ├── Rakefile │ ├── app/ │ │ ├── assets/ │ │ │ ├── config/ │ │ │ │ └── manifest.js │ │ │ ├── images/ │ │ │ │ └── .keep │ │ │ ├── javascripts/ │ │ │ │ ├── application.js │ │ │ │ └── cable.js │ │ │ └── stylesheets/ │ │ │ ├── application.css │ │ │ ├── reset.css │ │ │ └── style.css │ │ ├── controllers/ │ │ │ ├── admins_controller.rb │ │ │ ├── application_controller.rb │ │ │ ├── articles_controller.rb │ │ │ ├── comments_controller.rb │ │ │ ├── concerns/ │ │ │ │ └── .keep │ │ │ ├── spa_controller.rb │ │ │ ├── users/ │ │ │ │ ├── notifications_controller.rb │ │ │ │ ├── notifications_with_devise_controller.rb │ │ │ │ ├── subscriptions_controller.rb │ │ │ │ └── subscriptions_with_devise_controller.rb │ │ │ └── users_controller.rb │ │ ├── helpers/ │ │ │ ├── application_helper.rb │ │ │ └── devise_helper.rb │ │ ├── javascript/ │ │ │ ├── App.vue │ │ │ ├── components/ │ │ │ │ ├── DeviseTokenAuth.vue │ │ │ │ ├── Top.vue │ │ │ │ ├── notifications/ │ │ │ │ │ ├── Index.vue │ │ │ │ │ ├── Notification.vue │ │ │ │ │ └── NotificationContent.vue │ │ │ │ └── subscriptions/ │ │ │ │ ├── Index.vue │ │ │ │ ├── NewSubscription.vue │ │ │ │ ├── NotificationKey.vue │ │ │ │ └── Subscription.vue │ │ │ ├── config/ │ │ │ │ ├── development.js │ │ │ │ ├── environment.js │ │ │ │ ├── production.js │ │ │ │ └── test.js │ │ │ ├── packs/ │ │ │ │ ├── application.js │ │ │ │ └── spa.js │ │ │ ├── router/ │ │ │ │ └── index.js │ │ │ └── store/ │ │ │ └── index.js │ │ ├── mailers/ │ │ │ ├── .keep │ │ │ └── custom_notification_mailer.rb │ │ ├── models/ │ │ │ ├── admin.rb │ │ │ ├── article.rb │ │ │ ├── comment.rb │ │ │ ├── dummy/ │ │ │ │ ├── dummy_base.rb │ │ │ │ ├── dummy_group.rb │ │ │ │ ├── dummy_notifiable.rb │ │ │ │ ├── dummy_notifiable_target.rb │ │ │ │ ├── dummy_notifier.rb │ │ │ │ ├── dummy_subscriber.rb │ │ │ │ └── dummy_target.rb │ │ │ └── user.rb │ │ └── views/ │ │ ├── activity_notification/ │ │ │ ├── mailer/ │ │ │ │ └── dummy_subscribers/ │ │ │ │ └── test_key.text.erb │ │ │ ├── notifications/ │ │ │ │ ├── default/ │ │ │ │ │ ├── article/ │ │ │ │ │ │ └── _update.html.erb │ │ │ │ │ └── custom/ │ │ │ │ │ ├── _path_test.html.erb │ │ │ │ │ └── _test.html.erb │ │ │ │ └── users/ │ │ │ │ ├── _custom_index.html.erb │ │ │ │ ├── custom/ │ │ │ │ │ └── _test.html.erb │ │ │ │ └── overridden/ │ │ │ │ └── custom/ │ │ │ │ └── _test.html.erb │ │ │ └── optional_targets/ │ │ │ └── admins/ │ │ │ └── amazon_sns/ │ │ │ └── comment/ │ │ │ └── _default.text.erb │ │ ├── articles/ │ │ │ ├── _form.html.erb │ │ │ ├── edit.html.erb │ │ │ ├── index.html.erb │ │ │ ├── new.html.erb │ │ │ └── show.html.erb │ │ ├── layouts/ │ │ │ ├── _header.html.erb │ │ │ └── application.html.erb │ │ └── spa/ │ │ └── index.html.erb │ ├── babel.config.js │ ├── bin/ │ │ ├── bundle │ │ ├── rails │ │ ├── rake │ │ ├── setup │ │ ├── webpack │ │ └── webpack-dev-server │ ├── config/ │ │ ├── application.rb │ │ ├── boot.rb │ │ ├── cable.yml │ │ ├── database.yml │ │ ├── dynamoid.rb │ │ ├── environment.rb │ │ ├── environments/ │ │ │ ├── development.rb │ │ │ ├── production.rb │ │ │ └── test.rb │ │ ├── initializers/ │ │ │ ├── activity_notification.rb │ │ │ ├── assets.rb │ │ │ ├── backtrace_silencers.rb │ │ │ ├── cookies_serializer.rb │ │ │ ├── copy_it.aws.rb.template │ │ │ ├── devise.rb │ │ │ ├── devise_token_auth.rb │ │ │ ├── filter_parameter_logging.rb │ │ │ ├── inflections.rb │ │ │ ├── mime_types.rb │ │ │ ├── mysql.rb │ │ │ ├── session_store.rb │ │ │ ├── wrap_parameters.rb │ │ │ └── zeitwerk.rb │ │ ├── locales/ │ │ │ ├── activity_notification.en.yml │ │ │ └── devise.en.yml │ │ ├── mongoid.yml │ │ ├── routes.rb │ │ ├── secrets.yml │ │ ├── webpack/ │ │ │ ├── development.js │ │ │ ├── environment.js │ │ │ ├── loaders/ │ │ │ │ └── vue.js │ │ │ ├── production.js │ │ │ └── test.js │ │ └── webpacker.yml │ ├── config.ru │ ├── db/ │ │ ├── migrate/ │ │ │ ├── 20160716000000_create_test_tables.rb │ │ │ ├── 20181209000000_create_activity_notification_tables.rb │ │ │ └── 20191201000000_add_tokens_to_users.rb │ │ ├── schema.rb │ │ └── seeds.rb │ ├── lib/ │ │ ├── custom_optional_targets/ │ │ │ ├── console_output.rb │ │ │ ├── raise_error.rb │ │ │ └── wrong_target.rb │ │ └── mailer_previews/ │ │ └── mailer_preview.rb │ ├── package.json │ ├── postcss.config.js │ └── public/ │ ├── 404.html │ ├── 422.html │ └── 500.html ├── roles/ │ ├── acts_as_group_spec.rb │ ├── acts_as_notifiable_spec.rb │ ├── acts_as_notifier_spec.rb │ └── acts_as_target_spec.rb ├── spec_helper.rb └── version_spec.rb