Added callback that removes images files when a screenshot gets destroyed
This commit is contained in:
parent
8b9b40fdee
commit
dc17ff1e3e
2 changed files with 30 additions and 2 deletions
|
|
@ -5,7 +5,10 @@ class Package < ActiveRecord::Base
|
|||
# TODO: Make search weighted on users' rating
|
||||
pg_search_scope :general_search, :against => [:name, :description, :long_description]
|
||||
|
||||
has_many :screenshots, :inverse_of=>:package
|
||||
# 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')
|
||||
|
|
|
|||
|
|
@ -19,7 +19,8 @@ class Screenshot < ActiveRecord::Base
|
|||
basepath = "/screenshots/unapproved/"
|
||||
end
|
||||
|
||||
File.join(basepath, self.package.name[0], self.package.name, "#{self.id}_#{size}.png")
|
||||
#File.join(basepath, self.package.name[0], self.package.name, "#{self.id}_#{size}.png")
|
||||
Rails.config.images_path.join(self.package.name[0], self.package.name, "#{self.id}_#{size}.png")
|
||||
end
|
||||
|
||||
# Return caption for full-screen screenshots.
|
||||
|
|
@ -32,4 +33,28 @@ class Screenshot < ActiveRecord::Base
|
|||
self.package.description
|
||||
end
|
||||
end
|
||||
|
||||
def image_file(size)
|
||||
# Screenshot files are at e.g.
|
||||
# .../public/screenshots/f/firefox/5871654_large.png
|
||||
Rails.configuration.images_path.join(self.package.name[0], self.package.name, "#{self.id}_#{size}.png")
|
||||
end
|
||||
|
||||
# Delete all image files related to this screenshot
|
||||
def delete_all_images
|
||||
Rails.configuration.image_sizes.each do |size,dimensions|
|
||||
image_file = self.image_file(size)
|
||||
Rails.logger.info "(before_destroy) Deleting screenshot image '#{image_file}' from disk"
|
||||
if File.exist?(image_file)
|
||||
File.delete(image_file)
|
||||
else
|
||||
Rails.logger.error "(before_destroy) File '#{image_file}' not found - could not delete it"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Callback to delete image files from disk when a screenshot record gets destroyed
|
||||
before_destroy do |screenshot|
|
||||
screenshot.delete_all_images
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue