lib/artwork/model.rb in artwork-0.6.1 vs lib/artwork/model.rb in artwork-0.7.0
- old
+ new
@@ -1,13 +1,20 @@
require 'artwork/thumbnail'
module Artwork
module Model
- def artwork_thumb_for(attachment_name, size)
+ def artwork_thumb_for(attachment_name, size, alternative_sizes = nil)
+ size = determine_alternative_size_for(alternative_sizes) || size
+
+ size, base_resolution = size.to_s.split('@')
+ base_resolution ||= Artwork.base_resolution
+
desired_thumb = Thumbnail.new(size)
matching_thumb_name = nil
+ ratio_for_current_resolution = base_resolution.to_f / Artwork.current_resolution.to_f
+
if desired_thumb.compatible?
desired_size = desired_thumb.width / ratio_for_current_resolution
thumbs = attachment_styles_for(attachment_name).map { |thumb_name| Thumbnail.new(thumb_name) }
@@ -40,20 +47,26 @@
matching_thumb_name.to_sym
end
def artwork_url(attachment_name, size, options = {})
- thumb_name = artwork_thumb_for(attachment_name, size)
+ thumb_name = artwork_thumb_for(attachment_name, size, options)
send(attachment_name).url(thumb_name, options)
end
def attachment_styles_for(attachment_name)
self.class.attachment_definitions[attachment_name.to_sym][:styles].keys
end
private
- def ratio_for_current_resolution
- Artwork.default_resolution.to_f / Artwork.current_resolution.to_f
+ def determine_alternative_size_for(alternative_sizes)
+ return unless alternative_sizes
+
+ new_size_definition = alternative_sizes \
+ .sort_by { |max_resolution, size| max_resolution } \
+ .find { |max_resolution, size| Artwork.actual_resolution <= max_resolution }
+
+ new_size_definition.last if new_size_definition
end
end
end