50 lines
1.6 KiB
Ruby
50 lines
1.6 KiB
Ruby
class Package < ActiveRecord::Base
|
|
# PostgreSQL-based full-text search:
|
|
# https://github.com/Casecommons/pg_search
|
|
include PgSearch
|
|
# TODO: Make search weighted on users' rating
|
|
pg_search_scope :general_search,
|
|
:against => [:name, :description, :long_description],
|
|
:using => {
|
|
:tsearch => {:dictionary => "english"}
|
|
}
|
|
|
|
# I am using "destroy_all" here so that when a package gets destroys the
|
|
# callbacks for all dependent screenshots are executed - thus removing the
|
|
# screenshot files from disk.
|
|
has_many :screenshots, :inverse_of=>:package, :dependent => :destroy
|
|
|
|
default_scope {
|
|
order('name ASC')
|
|
}
|
|
|
|
# Return a query of all packages that have screenshots
|
|
def self.with_screenshots
|
|
# Query for all packages who's ID appears in a screenshot's "package_id" field
|
|
subselect = Screenshot.select(:package_id)
|
|
where(id: subselect )
|
|
end
|
|
|
|
# Return a query of all packages that have screenshots
|
|
def self.without_screenshots
|
|
# Query for all packages who's ID does not appear in a screenshot's "package_id" field
|
|
subselect = Screenshot.select(:package_id)
|
|
where.not(id: subselect)
|
|
end
|
|
|
|
# Return a query of all approved/public screenshots of this package
|
|
def self.screenshots_approved
|
|
self.screenshots.find_by(approved: true)
|
|
end
|
|
|
|
# Return a query of all screenshots that the current user may see
|
|
# Consists of:
|
|
# - approved (public) screenshots
|
|
# - screenshots uploaded by the user (determined by cookie session)
|
|
def screenshots_visible_to_user(token)
|
|
self.screenshots.where(
|
|
# "approved=true"
|
|
"approved=true OR uploaderhash=?", token
|
|
)
|
|
end
|
|
end
|