rosa-build/app/models/subscribe.rb

60 lines
2.3 KiB
Ruby
Raw Normal View History

class Subscribe < ActiveRecord::Base
2012-01-24 12:18:39 +00:00
ON = 1
OFF = 0
belongs_to :subscribeable, :polymorphic => true
belongs_to :user
2012-01-23 19:42:54 +00:00
belongs_to :project
validates :status, :inclusion => {:in => 0..1}
2012-01-24 12:18:39 +00:00
scope :on, where(:status => ON)
scope :off, where(:status => OFF)
scope :finder_hack, order('') # FIXME .subscribes - error; .subscribes.finder_hack - success Oo
2012-01-29 20:18:14 +00:00
def subscribed?
status == ON
end
2012-01-24 12:18:39 +00:00
def self.comment_subscribes(comment)
2012-01-24 19:00:51 +00:00
Subscribe.where(:subscribeable_id => comment.commentable.id, :subscribeable_type => comment.commentable.class.name, :project_id => comment.project)
2012-01-24 12:18:39 +00:00
end
2012-01-19 18:20:03 +00:00
2012-01-21 13:32:22 +00:00
def self.new_comment_notification(comment)
commentable_class = comment.commentable.class
2012-01-24 12:18:39 +00:00
Subscribe.new_comment_issue_notification(comment) if commentable_class == Issue
Subscribe.new_comment_commit_notification(comment) if commentable_class == Grit::Commit
end
def self.new_comment_issue_notification(comment)
comment.commentable.subscribes.finder_hack.each do |subscribe|
next if comment.own_comment?(subscribe.user) || !subscribe.user.notifier.can_notify
UserMailer.delay.new_comment_notification(comment, subscribe.user) if subscribe.user.notifier.new_comment_reply
2012-01-21 13:32:22 +00:00
end
2012-01-24 12:18:39 +00:00
end
def self.new_comment_commit_notification(comment)
2012-01-29 20:18:14 +00:00
subscribes = Subscribe.comment_subscribes(comment).on
2012-01-21 13:32:22 +00:00
subscribes.each do |subscribe|
2012-01-24 12:18:39 +00:00
next if comment.own_comment?(subscribe.user) || !subscribe.user.notifier.can_notify
UserMailer.delay.new_comment_notification(comment, subscribe.user)
2012-01-19 18:20:03 +00:00
end
end
2012-01-29 20:18:14 +00:00
def self.subscribed_to_commit?(project, user, commit)
subscribe = user.subscribes.where(:subscribeable_id => commit.id, :subscribeable_type => commit.class.name, :project_id => project.id).first
return subscribe.subscribed? if subscribe # return status if already subscribe present
# return status by settings
2012-01-25 17:33:26 +00:00
(project.owner?(user) && user.notifier.new_comment_commit_repo_owner) or
2012-01-29 20:18:14 +00:00
(user.commentor?(commit) && user.notifier.new_comment_commit_commentor) or
(user.committer?(commit) && user.notifier.new_comment_commit_owner)
2012-01-23 19:42:54 +00:00
end
2012-01-29 20:18:14 +00:00
def self.set_subscribe_to_commit(options, status)
if subscribe = Subscribe.where(options).first
2012-01-23 19:42:54 +00:00
subscribe.update_attribute(:status, status)
else
2012-01-25 17:33:26 +00:00
Subscribe.create(options.merge(:status => status))
2012-01-23 19:42:54 +00:00
end
2012-01-21 19:13:33 +00:00
end
end