Created
June 7, 2014 05:04
-
-
Save firedev/5a4b537014dcab54cfd4 to your computer and use it in GitHub Desktop.
ReadMarkable
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module ReadMarkable | |
extend ActiveSupport::Concern | |
included do | |
has_many :read_marks | |
def touch_read_at | |
update_column(:read_at, Time.now) | |
end | |
def mark_as_unread_except current_user | |
ReadMark.delete_all(inquiry_id: id) | |
ReadMark.create(inquiry_id: id, user_id: current_user.id) | |
touch_read_at | |
end | |
def mark_as_unread_for current_user | |
ReadMark.delete_all(inquiry_id: id) | |
touch_read_at | |
end | |
def mark_as_unread_for_priveleged current_user | |
priveleged_users = User.select(:id).privileged | |
ReadMark.delete_all(inquiry_id: id, user_id: priveleged_users.pluck(:id)) | |
ReadMark.create(inquiry_id: id, user_id: current_user.id) | |
touch_read_at | |
end | |
def mark_as_read_for current_user | |
ReadMark.delete_all(inquiry_id: id, user_id: current_user.id) | |
ReadMark.create(inquiry_id: id, user_id: current_user.id) | |
touch_read_at | |
end | |
def unread? current_user | |
ReadMark.where(inquiry_id: id, user_id: current_user.id).count.zero? | |
end | |
def self.count_unread_by current_user | |
count - includes(:read_marks).where(read_marks: { user_id: current_user.id }).count | |
end | |
def self.ordered_by_unread_for current_user | |
joins( | |
"LEFT JOIN read_marks ON read_marks.inquiry_id = inquiries.id | |
AND read_marks.user_id = #{current_user.id}" | |
). | |
order('IF(read_marks.inquiry_id IS NULL, 1, 0) DESC'). | |
readonly(false) | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment