From ec09660ba52740f3c1d4a47d46e14b9ee2e97b67 Mon Sep 17 00:00:00 2001 From: Rob Anderton Date: Sun, 22 Feb 2009 14:31:15 -0500 Subject: [PATCH] Moved style solidification to the post_process method, this also fixes the reprocess! method --- lib/paperclip/attachment.rb | 7 +++---- test/attachment_test.rb | 23 ++++++++++++++++++++++- test/integration_test.rb | 2 ++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/lib/paperclip/attachment.rb b/lib/paperclip/attachment.rb index 4692c5d19..0913990d8 100644 --- a/lib/paperclip/attachment.rb +++ b/lib/paperclip/attachment.rb @@ -92,7 +92,6 @@ def assign uploaded_file @dirty = true - solidify_style_definitions post_process if valid? # Reset the file size if the original file was reprocessed. @@ -314,9 +313,8 @@ def normalize_style_definition #:nodoc: def solidify_style_definitions #:nodoc: @styles.each do |name, args| - if @styles[name][:geometry].respond_to?(:call) - @styles[name][:geometry] = @styles[name][:geometry].call(instance) - end + @styles[name][:geometry] = @styles[name][:geometry].call(instance) if @styles[name][:geometry].respond_to?(:call) + @styles[name][:processors] = @styles[name][:processors].call(instance) if @styles[name][:processors].respond_to?(:call) end end @@ -336,6 +334,7 @@ def extra_options_for(style) #:nodoc: def post_process #:nodoc: return if @queued_for_write[:original].nil? + solidify_style_definitions return if fire_events(:before) post_process_styles return if fire_events(:after) diff --git a/test/attachment_test.rb b/test/attachment_test.rb index ed85e028e..d0747479a 100644 --- a/test/attachment_test.rb +++ b/test/attachment_test.rb @@ -265,7 +265,28 @@ def thumb; "-thumb"; end end end end - + + context "An attachment with :processors that is a proc" do + setup do + rebuild_model :styles => { :normal => '' }, :processors => lambda { |a| [ :test ] } + @attachment = Dummy.new.avatar + end + + should "not run the proc immediately" do + assert_kind_of Proc, @attachment.styles[:normal][:processors] + end + + context "when assigned" do + setup do + @attachment.assign(StringIO.new(".")) + end + + should "have the correct processors" do + assert_equal [ :test ], @attachment.styles[:normal][:processors] + end + end + end + context "An attachment with erroring processor" do setup do rebuild_model :processor => [:thumbnail], :styles => { :small => '' }, :whiny_thumbnails => true diff --git a/test/integration_test.rb b/test/integration_test.rb index 97b6b10f0..a08f1df70 100644 --- a/test/integration_test.rb +++ b/test/integration_test.rb @@ -39,6 +39,7 @@ class IntegrationTest < Test::Unit::TestCase setup do Dummy.class_eval do has_attached_file :avatar, :styles => { :thumb => "150x25#" } + has_attached_file :avatar, :styles => { :thumb => "150x25#", :dynamic => lambda { |a| '50x50#' } } end @d2 = Dummy.find(@dummy.id) @d2.avatar.reprocess! @@ -47,6 +48,7 @@ class IntegrationTest < Test::Unit::TestCase should "create its thumbnails properly" do assert_match /\b150x25\b/, `identify "#{@dummy.avatar.path(:thumb)}"` + assert_match /\b50x50\b/, `identify "#{@dummy.avatar.path(:dynamic)}"` end end end