Class: Watcher

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/watcher.rb

Overview

Redmine - project management software Copyright (C) 2006-2020 Jean-Philippe Lang

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Class Method Summary collapse

Class Method Details

.any_watched?(objects, user) ⇒ Boolean

Returns true if at least one object among objects is watched by user

Returns:

  • (Boolean)

29
30
31
32
33
34
35
36
37
38
39
# File 'app/models/watcher.rb', line 29

def self.any_watched?(objects, user)
  objects = objects.reject(&:new_record?)
  if objects.any?
    objects.group_by {|object| object.class.base_class}.each do |base_class, objects|
      if Watcher.where(:watchable_type => base_class.name, :watchable_id => objects.map(&:id), :user_id => user.id).exists?
        return true
      end
    end
  end
  false
end

.prune(options = {}) ⇒ Object

Unwatch things that users are no longer allowed to view


42
43
44
45
46
47
48
49
50
51
52
# File 'app/models/watcher.rb', line 42

def self.prune(options={})
  if options.has_key?(:user)
    prune_single_user(options[:user], options)
  else
    pruned = 0
    User.where("id IN (SELECT DISTINCT user_id FROM #{table_name})").each do |user|
      pruned += prune_single_user(user, options)
    end
    pruned
  end
end