Added Package.best_screenshot_for_version

This commit is contained in:
Christoph Haas 2016-06-23 00:17:27 +02:00
parent ff254f8e00
commit 6feaa53920

View file

@ -47,17 +47,32 @@ class Package < ActiveRecord::Base
self.joins(:screenshots).where(screenshots: {approved:false}).distinct(:name) self.joins(:screenshots).where(screenshots: {approved:false}).distinct(:name)
end end
# Get all screenshots and have them sorted descendingly by their version number (Debian style).
def screenshots_sorted_by_version def screenshots_sorted_by_version
self.screenshots.to_a.sort do |x,y| self.screenshots.to_a.sort { |x,y| version_compare(x.version,y.version) }
version_x = DebImporter::Version.new(x.version) end
version_y = DebImporter::Version.new(y.version)
if version_x<version_y # Return the newest screenshot that is not newer than the given version.
1 def best_screenshot_for_version(version)
elsif version_x>version_y sorted_screenshots = self.screenshots_sorted_by_version
-1 sorted_screenshots.each do |ss|
else logger.debug { "Comparing version #{version} against #{ss.version}" }
0 return ss if version_compare(version, ss.version)<=0
end end
return sorted_screenshots.last
end
private
def version_compare(x,y)
version_x = DebImporter::Version.new(x)
version_y = DebImporter::Version.new(y)
if version_x<version_y
1
elsif version_x>version_y
-1
else
0
end end
end end
end end