user.rb 1.01 KB
class User
  PER_PAGE = 30
  include Mongoid::Document
  include Mongoid::Timestamps

  devise :database_authenticatable,
         :recoverable, :rememberable, :trackable,
         :validatable, :token_authenticatable

  field :name
  field :admin, :type => Boolean, :default => false
  field :per_page, :type => Fixnum, :default => PER_PAGE

  after_destroy :destroy_watchers
  before_save :ensure_authentication_token
  
  validates_presence_of :name
  
  attr_protected :admin
  
  # Mongoid doesn't seem to currently support
  # referencing embedded documents
  def watchers
    App.all.map(&:watchers).flatten.select {|w| w.user_id.to_s == id.to_s}
  end

  def per_page
    self[:per_page] || PER_PAGE
  end
  
  def apps
    # This is completely wasteful but became necessary
    # due to bugs in Mongoid 
    app_ids = watchers.map {|w| w.app.id}
    App.any_in(:_id => app_ids)
  end
  
  def watching?(app)
    apps.all.include?(app)
  end
  
  protected
  
    def destroy_watchers
      watchers.each(&:destroy)
    end
end