Commit 410d25c8 authored by Valery Sizov's avatar Valery Sizov

rename table subscribe; make it polymorfic

parent 0e20dc91
...@@ -100,7 +100,7 @@ class Projects::IssuesController < Projects::ApplicationController ...@@ -100,7 +100,7 @@ class Projects::IssuesController < Projects::ApplicationController
def set_subscription def set_subscription
subscribed = params[:subscription] == "Subscribe" subscribed = params[:subscription] == "Subscribe"
sub = @issue.subscribes.find_or_create_by(user_id: current_user.id) sub = @issue.subscriptions.find_or_create_by(user_id: current_user.id)
sub.update(subscribed: subscribed) sub.update(subscribed: subscribed)
render nothing: true render nothing: true
......
...@@ -177,7 +177,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController ...@@ -177,7 +177,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
def set_subscription def set_subscription
subscribed = params[:subscription] == "Subscribe" subscribed = params[:subscription] == "Subscribe"
sub = @merge_request.subscribes.find_or_create_by(user_id: current_user.id) sub = @merge_request.subscriptions.find_or_create_by(user_id: current_user.id)
sub.update(subscribed: subscribed) sub.update(subscribed: subscribed)
render nothing: true render nothing: true
......
...@@ -15,7 +15,7 @@ module Issuable ...@@ -15,7 +15,7 @@ module Issuable
has_many :notes, as: :noteable, dependent: :destroy has_many :notes, as: :noteable, dependent: :destroy
has_many :label_links, as: :target, dependent: :destroy has_many :label_links, as: :target, dependent: :destroy
has_many :labels, through: :label_links has_many :labels, through: :label_links
has_many :subscribes, dependent: :destroy has_many :subscriptions, dependent: :destroy, as: :subscribable
validates :author, presence: true validates :author, presence: true
validates :title, presence: true, length: { within: 0..255 } validates :title, presence: true, length: { within: 0..255 }
...@@ -133,10 +133,11 @@ module Issuable ...@@ -133,10 +133,11 @@ module Issuable
users.concat(mentions.reduce([], :|)).uniq users.concat(mentions.reduce([], :|)).uniq
end end
def subscribe_status(user) def subscription_status(user)
subscribe = subscribes.find_by_user_id(user.id) subscription = subscriptions.find_by_user_id(user.id)
if subscribe
return subscribe.subscribed if subscription
return subscription.subscribed
end end
participants.include?(user) participants.include?(user)
......
class Subscribe < ActiveRecord::Base
belongs_to :user
validates :issue_id, uniqueness: { scope: :user_id, allow_nil: true }
validates :merge_request_id, uniqueness: { scope: :user_id, allow_nil: true }
end
class Subscription < ActiveRecord::Base
belongs_to :subscribable, polymorphic: true
validates :user_id,
uniqueness: { scope: [:subscribable_id, :subscribable_type]},
presence: true
end
...@@ -316,8 +316,8 @@ class NotificationService ...@@ -316,8 +316,8 @@ class NotificationService
def reject_unsubscribed_users(recipients, target) def reject_unsubscribed_users(recipients, target)
recipients.reject do |user| recipients.reject do |user|
subscribe = target.subscribes.find_by_user_id(user.id) subscription = target.subscriptions.find_by_user_id(user.id)
subscribe && !subscribe.subscribed subscription && !subscription.subscribed
end end
end end
...@@ -375,9 +375,9 @@ class NotificationService ...@@ -375,9 +375,9 @@ class NotificationService
end end
def add_subscribed_users(recipients, target) def add_subscribed_users(recipients, target)
subscribes = target.subscribes subscriptions = target.subscriptions
if subscribes.any? if subscriptions.any?
recipients.merge(subscribes.where("subscribed is true").map(&:user)) recipients.merge(subscriptions.where("subscribed is true").map(&:user))
else else
recipients recipients
end end
......
...@@ -33,8 +33,8 @@ ...@@ -33,8 +33,8 @@
Subscription: Subscription:
%i.fa.fa-spinner.fa-spin.hidden.subscription %i.fa.fa-spinner.fa-spin.hidden.subscription
%span.sub_status %span.sub_status
= @issue.subscribe_status(current_user) ? "subscribed" : "unsubscribed" = @issue.subscription_status(current_user) ? "subscribed" : "unsubscribed"
- subscribe_action = @issue.subscribe_status(current_user) ? "Unsubscribe" : "Subscribe" - subscribe_action = @issue.subscription_status(current_user) ? "Unsubscribe" : "Subscribe"
%input.btn.subscribe-button{:type => "button", :value => subscribe_action} %input.btn.subscribe-button{:type => "button", :value => subscribe_action}
:coffeescript :coffeescript
......
...@@ -35,8 +35,8 @@ ...@@ -35,8 +35,8 @@
Subscription: Subscription:
%i.fa.fa-spinner.fa-spin.hidden.subscription %i.fa.fa-spinner.fa-spin.hidden.subscription
%span.sub_status %span.sub_status
= @merge_request.subscribe_status(current_user) ? "subscribed" : "unsubscribed" = @merge_request.subscription_status(current_user) ? "subscribed" : "unsubscribed"
- subscribe_action = @merge_request.subscribe_status(current_user) ? "Unsubscribe" : "Subscribe" - subscribe_action = @merge_request.subscription_status(current_user) ? "Unsubscribe" : "Subscribe"
%input.btn.subscribe-button{:type => "button", :value => subscribe_action} %input.btn.subscribe-button{:type => "button", :value => subscribe_action}
:coffeescript :coffeescript
......
class CreateSubscribesTable < ActiveRecord::Migration
def change
create_table :subscribes do |t|
t.integer :user_id
t.integer :merge_request_id
t.integer :issue_id
t.boolean :subscribed
t.timestamps
end
add_index :subscribes, :user_id
add_index :subscribes, :issue_id
add_index :subscribes, :merge_request_id
end
end
class CreateSubscriptionsTable < ActiveRecord::Migration
def change
create_table :subscriptions do |t|
t.integer :user_id
t.references :subscribable, polymorphic: true
t.boolean :subscribed
t.timestamps
end
add_index :subscriptions, [:subscribable_id, :subscribable_type, :user_id], unique: true, name: 'subscriptions_user_id_and_ref_fields'
end
end
...@@ -397,18 +397,16 @@ ActiveRecord::Schema.define(version: 20150313012111) do ...@@ -397,18 +397,16 @@ ActiveRecord::Schema.define(version: 20150313012111) do
add_index "snippets", ["project_id"], name: "index_snippets_on_project_id", using: :btree add_index "snippets", ["project_id"], name: "index_snippets_on_project_id", using: :btree
add_index "snippets", ["visibility_level"], name: "index_snippets_on_visibility_level", using: :btree add_index "snippets", ["visibility_level"], name: "index_snippets_on_visibility_level", using: :btree
create_table "subscribes", force: true do |t| create_table "subscriptions", force: true do |t|
t.integer "user_id" t.integer "user_id"
t.integer "merge_request_id" t.integer "subscribable_id"
t.integer "issue_id" t.string "subscribable_type"
t.boolean "subscribed" t.boolean "subscribed"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
end end
add_index "subscribes", ["issue_id"], name: "index_subscribes_on_issue_id", using: :btree add_index "subscriptions", ["subscribable_id", "subscribable_type", "user_id"], name: "subscriptions_user_id_and_ref_fields", unique: true, using: :btree
add_index "subscribes", ["merge_request_id"], name: "index_subscribes_on_merge_request_id", using: :btree
add_index "subscribes", ["user_id"], name: "index_subscribes_on_user_id", using: :btree
create_table "taggings", force: true do |t| create_table "taggings", force: true do |t|
t.integer "tag_id" t.integer "tag_id"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment