Commit f5851f1d by Prem Sichanugrist

Add an option to ThumbnailProcessor to override animated thumbnail generation.

Closes #515
parent 489df170
...@@ -72,7 +72,7 @@ module Paperclip ...@@ -72,7 +72,7 @@ module Paperclip
# Supports getting and setting style properties with hash notation to ensure backwards-compatibility # Supports getting and setting style properties with hash notation to ensure backwards-compatibility
# eg. @attachment.styles[:large][:geometry]@ will still work # eg. @attachment.styles[:large][:geometry]@ will still work
def [](key) def [](key)
if [:name, :convert_options, :whiny, :processors, :geometry, :format].include?(key) if [:name, :convert_options, :whiny, :processors, :geometry, :format, :animated].include?(key)
send(key) send(key)
elsif defined? @other_args[key] elsif defined? @other_args[key]
@other_args[key] @other_args[key]
...@@ -80,7 +80,7 @@ module Paperclip ...@@ -80,7 +80,7 @@ module Paperclip
end end
def []=(key, value) def []=(key, value)
if [:name, :convert_options, :whiny, :processors, :geometry, :format].include?(key) if [:name, :convert_options, :whiny, :processors, :geometry, :format, :animated].include?(key)
send("#{key}=".intern, value) send("#{key}=".intern, value)
else else
@other_args[key] = value @other_args[key] = value
......
...@@ -2,7 +2,8 @@ module Paperclip ...@@ -2,7 +2,8 @@ module Paperclip
# Handles thumbnailing images that are uploaded. # Handles thumbnailing images that are uploaded.
class Thumbnail < Processor class Thumbnail < Processor
attr_accessor :current_geometry, :target_geometry, :format, :whiny, :convert_options, :source_file_options attr_accessor :current_geometry, :target_geometry, :format, :whiny, :convert_options,
:source_file_options, :animated
# List of formats that we need to preserve animation # List of formats that we need to preserve animation
ANIMATED_FORMATS = %w(gif) ANIMATED_FORMATS = %w(gif)
...@@ -25,6 +26,7 @@ module Paperclip ...@@ -25,6 +26,7 @@ module Paperclip
@convert_options = options[:convert_options] @convert_options = options[:convert_options]
@whiny = options[:whiny].nil? ? true : options[:whiny] @whiny = options[:whiny].nil? ? true : options[:whiny]
@format = options[:format] @format = options[:format]
@animated = options[:animated].nil? ? true : options[:animated]
@source_file_options = @source_file_options.split(/\s+/) if @source_file_options.respond_to?(:split) @source_file_options = @source_file_options.split(/\s+/) if @source_file_options.respond_to?(:split)
@convert_options = @convert_options.split(/\s+/) if @convert_options.respond_to?(:split) @convert_options = @convert_options.split(/\s+/) if @convert_options.respond_to?(:split)
...@@ -86,7 +88,7 @@ module Paperclip ...@@ -86,7 +88,7 @@ module Paperclip
# Return true if the format is animated # Return true if the format is animated
def animated? def animated?
ANIMATED_FORMATS.include?(@current_format[1..-1]) && (ANIMATED_FORMATS.include?(@format.to_s) || @format.blank?) @animated && ANIMATED_FORMATS.include?(@current_format[1..-1]) && (ANIMATED_FORMATS.include?(@format.to_s) || @format.blank?)
end end
end end
end end
...@@ -310,5 +310,23 @@ class ThumbnailTest < Test::Unit::TestCase ...@@ -310,5 +310,23 @@ class ThumbnailTest < Test::Unit::TestCase
assert_equal @thumb.transformation_command.first, "-coalesce" assert_equal @thumb.transformation_command.first, "-coalesce"
end end
end end
context "with animated option set to false" do
setup do
@thumb = Paperclip::Thumbnail.new(@file, :geometry => "50x50", :animated => false)
end
should "output the gif format" do
dst = @thumb.make
cmd = %Q[identify "#{dst.path}"]
assert_match /GIF/, `#{cmd}`.chomp
end
should "create the single frame thumbnail when sent #make" do
dst = @thumb.make
cmd = %Q[identify -format "%wx%h" "#{dst.path}"]
assert_equal "50x50", `#{cmd}`.chomp
end
end
end end
end end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment