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
|
@@ -19,17 +19,17 @@ module ActivityNotification
|
|
|
19
19
|
# Belongs to target instance of this notification as polymorphic association.
|
|
20
20
|
# @scope instance
|
|
21
21
|
# @return [Object] Target instance of this notification
|
|
22
|
-
belongs_to_polymorphic_xdb_record :target
|
|
22
|
+
belongs_to_polymorphic_xdb_record :target, store_with_associated_records: true, as_json_options: { methods: [:printable_type, :printable_target_name] }
|
|
23
23
|
|
|
24
24
|
# Belongs to notifiable instance of this notification as polymorphic association.
|
|
25
25
|
# @scope instance
|
|
26
26
|
# @return [Object] Notifiable instance of this notification
|
|
27
|
-
belongs_to_polymorphic_xdb_record :notifiable
|
|
27
|
+
belongs_to_polymorphic_xdb_record :notifiable, store_with_associated_records: true, as_json_options: { methods: [:printable_type] }
|
|
28
28
|
|
|
29
29
|
# Belongs to group instance of this notification as polymorphic association.
|
|
30
30
|
# @scope instance
|
|
31
31
|
# @return [Object] Group instance of this notification
|
|
32
|
-
belongs_to_polymorphic_xdb_record :group
|
|
32
|
+
belongs_to_polymorphic_xdb_record :group, as_json_options: { methods: [:printable_type, :printable_group_name] }
|
|
33
33
|
|
|
34
34
|
field :key, type: String
|
|
35
35
|
field :parameters, type: Hash, default: {}
|
|
@@ -41,7 +41,7 @@ module ActivityNotification
|
|
|
41
41
|
# Group owner instance has nil as :group_owner association.
|
|
42
42
|
# @scope instance
|
|
43
43
|
# @return [Notification] Group owner notification instance of this notification
|
|
44
|
-
belongs_to :group_owner, { class_name: "ActivityNotification::Notification"
|
|
44
|
+
belongs_to :group_owner, { class_name: "ActivityNotification::Notification", optional: true }
|
|
45
45
|
|
|
46
46
|
# Has many group member notification instances of this notification.
|
|
47
47
|
# Only group owner instance has :group_members value.
|
|
@@ -53,7 +53,7 @@ module ActivityNotification
|
|
|
53
53
|
# Belongs to :otifier instance of this notification.
|
|
54
54
|
# @scope instance
|
|
55
55
|
# @return [Object] Notifier instance of this notification
|
|
56
|
-
belongs_to_polymorphic_xdb_record :notifier
|
|
56
|
+
belongs_to_polymorphic_xdb_record :notifier, store_with_associated_records: true, as_json_options: { methods: [:printable_type, :printable_notifier_name] }
|
|
57
57
|
|
|
58
58
|
validates :target, presence: true
|
|
59
59
|
validates :notifiable, presence: true
|
|
@@ -140,9 +140,27 @@ module ActivityNotification
|
|
|
140
140
|
scope :filtered_by_group, ->(group) {
|
|
141
141
|
group.present? ?
|
|
142
142
|
where(group_id: group.id, group_type: group.class.name) :
|
|
143
|
-
|
|
143
|
+
Gem::Version.new(::Mongoid::VERSION) >= Gem::Version.new('7.1.0') ?
|
|
144
|
+
where(:group_id.exists => false, :group_type.exists => false).or(group_id: nil, group_type: nil) :
|
|
145
|
+
any_of({ :group_id.exists => false, :group_type.exists => false }, { group_id: nil, group_type: nil })
|
|
144
146
|
}
|
|
145
147
|
|
|
148
|
+
# Selects filtered notifications later than specified time.
|
|
149
|
+
# @example Get filtered unopened notificatons of the @user later than @notification
|
|
150
|
+
# @notifications = @user.notifications.unopened_only.later_than(@notification.created_at)
|
|
151
|
+
# @scope class
|
|
152
|
+
# @param [Time] Created time of the notifications for filter
|
|
153
|
+
# @return [ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>] Database query of filtered notifications
|
|
154
|
+
scope :later_than, ->(created_time) { where(:created_at.gt => created_time) }
|
|
155
|
+
|
|
156
|
+
# Selects filtered notifications earlier than specified time.
|
|
157
|
+
# @example Get filtered unopened notificatons of the @user earlier than @notification
|
|
158
|
+
# @notifications = @user.notifications.unopened_only.earlier_than(@notification.created_at)
|
|
159
|
+
# @scope class
|
|
160
|
+
# @param [Time] Created time of the notifications for filter
|
|
161
|
+
# @return [ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>] Database query of filtered notifications
|
|
162
|
+
scope :earlier_than, ->(created_time) { where(:created_at.lt => created_time) }
|
|
163
|
+
|
|
146
164
|
# Includes target instance with query for notifications.
|
|
147
165
|
# @return [Mongoid::Criteria<Notificaion>] Database query of notifications with target
|
|
148
166
|
scope :with_target, -> { }
|
|
@@ -170,26 +188,6 @@ module ActivityNotification
|
|
|
170
188
|
# Dummy reload method for test of notifications.
|
|
171
189
|
scope :reload, -> { }
|
|
172
190
|
|
|
173
|
-
# Returns latest notification instance.
|
|
174
|
-
# @return [Notification] Latest notification instance
|
|
175
|
-
def self.latest
|
|
176
|
-
latest_order.first
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
# Returns earliest notification instance.
|
|
180
|
-
# @return [Notification] Earliest notification instance
|
|
181
|
-
def self.earliest
|
|
182
|
-
earliest_order.first
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
# Selects unique keys from query for notifications.
|
|
186
|
-
# @return [Array<String>] Array of notification unique keys
|
|
187
|
-
def self.uniq_keys
|
|
188
|
-
# distinct method cannot keep original sort
|
|
189
|
-
# distinct(:key)
|
|
190
|
-
pluck(:key).uniq
|
|
191
|
-
end
|
|
192
|
-
|
|
193
191
|
# Returns if the notification is group owner.
|
|
194
192
|
# Calls NotificationApi#group_owner? as super method.
|
|
195
193
|
# @return [Boolean] If the notification is group owner
|
|
@@ -197,9 +195,12 @@ module ActivityNotification
|
|
|
197
195
|
super
|
|
198
196
|
end
|
|
199
197
|
|
|
200
|
-
# Raise DeleteRestrictionError for notifications.
|
|
198
|
+
# Raise ActivityNotification::DeleteRestrictionError for notifications.
|
|
199
|
+
# @param [String] error_text Error text for raised exception
|
|
200
|
+
# @raise [ActivityNotification::DeleteRestrictionError] DeleteRestrictionError from used ORM
|
|
201
|
+
# @return [void]
|
|
201
202
|
def self.raise_delete_restriction_error(error_text)
|
|
202
|
-
raise error_text
|
|
203
|
+
raise ActivityNotification::DeleteRestrictionError, error_text
|
|
203
204
|
end
|
|
204
205
|
|
|
205
206
|
protected
|
|
@@ -20,15 +20,15 @@ module ActivityNotification
|
|
|
20
20
|
|
|
21
21
|
field :key, type: String
|
|
22
22
|
field :subscribing, type: Boolean, default: ActivityNotification.config.subscribe_as_default
|
|
23
|
-
field :subscribing_to_email, type: Boolean, default: ActivityNotification.config.
|
|
23
|
+
field :subscribing_to_email, type: Boolean, default: ActivityNotification.config.subscribe_to_email_as_default
|
|
24
24
|
field :subscribed_at, type: DateTime
|
|
25
25
|
field :unsubscribed_at, type: DateTime
|
|
26
26
|
field :subscribed_to_email_at, type: DateTime
|
|
27
27
|
field :unsubscribed_to_email_at, type: DateTime
|
|
28
28
|
field :optional_targets, type: Hash, default: {}
|
|
29
|
-
|
|
29
|
+
|
|
30
30
|
validates :target, presence: true
|
|
31
|
-
validates :key, presence: true
|
|
31
|
+
validates :key, presence: true, uniqueness: { scope: [:target_type, :target_id] }
|
|
32
32
|
validates_inclusion_of :subscribing, in: [true, false]
|
|
33
33
|
validates_inclusion_of :subscribing_to_email, in: [true, false]
|
|
34
34
|
validate :subscribing_to_email_cannot_be_true_when_subscribing_is_false
|
|
@@ -8,7 +8,7 @@ module ActivityNotification
|
|
|
8
8
|
# @param [String] name Association name
|
|
9
9
|
# @param [Object] instance Associated instance
|
|
10
10
|
# @return [Mongoid::Criteria<Notificaion>] Database query of filtered notifications
|
|
11
|
-
scope :filtered_by_association, ->(name, instance) {
|
|
11
|
+
scope :filtered_by_association, ->(name, instance) { where("#{name}_id" => instance.present? ? instance.id : nil, "#{name}_type" => instance.present? ? instance.class.name : nil) }
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
class_methods do
|
|
@@ -24,6 +24,8 @@ module ActivityNotification
|
|
|
24
24
|
id_field, type_field = "#{association_name}_id", "#{association_name}_type"
|
|
25
25
|
field id_field, type: String
|
|
26
26
|
field type_field, type: String
|
|
27
|
+
associated_record_field = "stored_#{association_name}"
|
|
28
|
+
field associated_record_field, type: Hash if ActivityNotification.config.store_with_associated_records && _options[:store_with_associated_records]
|
|
27
29
|
|
|
28
30
|
self.instance_eval do
|
|
29
31
|
define_method(name) do |reload = false|
|
|
@@ -41,6 +43,14 @@ module ActivityNotification
|
|
|
41
43
|
if new_instance.nil? then instance_id, instance_type = nil, nil else instance_id, instance_type = new_instance.id, new_instance.class.name end
|
|
42
44
|
self.send("#{id_field}=", instance_id)
|
|
43
45
|
self.send("#{type_field}=", instance_type)
|
|
46
|
+
associated_record_json = new_instance.as_json(_options[:as_json_options] || {})
|
|
47
|
+
# Cast Hash $oid field to String id to handle BSON::String::IllegalKey
|
|
48
|
+
if associated_record_json.present?
|
|
49
|
+
associated_record_json.each do |k, v|
|
|
50
|
+
associated_record_json[k] = v['$oid'] if v.is_a?(Hash) && v.has_key?('$oid')
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
self.send("#{associated_record_field}=", associated_record_json) if ActivityNotification.config.store_with_associated_records && _options[:store_with_associated_records]
|
|
44
54
|
self.instance_variable_set("@#{name}", nil)
|
|
45
55
|
end
|
|
46
56
|
end
|
|
@@ -69,5 +79,27 @@ module ActivityNotification
|
|
|
69
79
|
end
|
|
70
80
|
end
|
|
71
81
|
|
|
82
|
+
# Monkey patching for Mongoid::Document as_json
|
|
83
|
+
module Mongoid
|
|
84
|
+
# Monkey patching for Mongoid::Document as_json
|
|
85
|
+
module Document
|
|
86
|
+
# Monkey patching for Mongoid::Document as_json
|
|
87
|
+
# @param [Hash] options Options parameter
|
|
88
|
+
# @return [Hash] Hash representing the model
|
|
89
|
+
def as_json(options = {})
|
|
90
|
+
json = super(options)
|
|
91
|
+
json["id"] = json["_id"].to_s.start_with?("{\"$oid\"=>") ? self.id.to_s : json["_id"].to_s
|
|
92
|
+
if options.has_key?(:include)
|
|
93
|
+
case options[:include]
|
|
94
|
+
when Symbol then json[options[:include].to_s] = self.send(options[:include]).as_json
|
|
95
|
+
when Array then options[:include].each {|model| json[model.to_s] = self.send(model).as_json }
|
|
96
|
+
when Hash then options[:include].each {|model, options| json[model.to_s] = self.send(model).as_json(options) }
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
json
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
72
104
|
require_relative 'mongoid/notification.rb'
|
|
73
105
|
require_relative 'mongoid/subscription.rb'
|