diff options
-rw-r--r-- | app/models/subscription.rb | 3 | ||||
-rw-r--r-- | app/services/notification_service.rb | 29 | ||||
-rw-r--r-- | db/schema.rb | 2 |
3 files changed, 22 insertions, 12 deletions
diff --git a/app/models/subscription.rb b/app/models/subscription.rb index 7e57a8570ec..276cf0e9465 100644 --- a/app/models/subscription.rb +++ b/app/models/subscription.rb @@ -1,7 +1,8 @@ class Subscription < ActiveRecord::Base + belongs_to :user belongs_to :subscribable, polymorphic: true validates :user_id, - uniqueness: { scope: [:subscribable_id, :subscribable_type]}, + uniqueness: { scope: [:subscribable_id, :subscribable_type] }, presence: true end diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb index e02418b7246..5ebde8fea84 100644 --- a/app/services/notification_service.rb +++ b/app/services/notification_service.rb @@ -151,6 +151,10 @@ class NotificationService # Reject mutes users recipients = reject_muted_users(recipients, note.project) + recipients = add_subscribed_users(recipients, note.noteable) + + recipients = reject_unsubscribed_users(recipients, note.noteable) + # Reject author recipients.delete(note.author) @@ -315,12 +319,26 @@ class NotificationService end def reject_unsubscribed_users(recipients, target) + return recipients unless target.respond_to? :subscriptions + recipients.reject do |user| subscription = target.subscriptions.find_by_user_id(user.id) subscription && !subscription.subscribed end end + def add_subscribed_users(recipients, target) + return recipients unless target.respond_to? :subscriptions + + subscriptions = target.subscriptions + + if subscriptions.any? + recipients + subscriptions.where("subscribed is true").map(&:user) + else + recipients + end + end + def new_resource_email(target, project, method) recipients = build_recipients(target, project) recipients.delete(target.author) @@ -368,21 +386,12 @@ class NotificationService recipients = reject_muted_users(recipients, project) recipients = reject_mention_users(recipients, project) - recipients = add_subscribed_users(recipients, project) + recipients = add_subscribed_users(recipients, target) recipients = recipients.concat(project_watchers(project)).uniq recipients = reject_unsubscribed_users(recipients, target) recipients end - def add_subscribed_users(recipients, target) - subscriptions = target.subscriptions - if subscriptions.any? - recipients.merge(subscriptions.where("subscribed is true").map(&:user)) - else - recipients - end - end - def mailer Notify.delay end diff --git a/db/schema.rb b/db/schema.rb index 3f808d5ac3f..ebbeb2beab0 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -334,12 +334,12 @@ ActiveRecord::Schema.define(version: 20150313012111) do t.string "import_url" t.integer "visibility_level", default: 0, null: false t.boolean "archived", default: false, null: false + t.string "avatar" t.string "import_status" t.float "repository_size", default: 0.0 t.integer "star_count", default: 0, null: false t.string "import_type" t.string "import_source" - t.string "avatar" end add_index "projects", ["created_at", "id"], name: "index_projects_on_created_at_and_id", using: :btree |