From 67299f03345ae50b309372081fe1056b33f43f3f Mon Sep 17 00:00:00 2001 From: Ian Lotinsky Date: Mon, 29 Sep 2008 15:16:20 -0400 Subject: [PATCH] s3 rename permissions persistance and thumbnail renaming --- .../attachment_fu/backends/s3_backend.rb | 13 +++++++++++-- test/backends/remote/s3_test.rb | 16 ++++++++++++++++ test/fixtures/attachment.rb | 5 +++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/lib/technoweenie/attachment_fu/backends/s3_backend.rb b/lib/technoweenie/attachment_fu/backends/s3_backend.rb index 7934eb7..505feeb 100644 --- a/lib/technoweenie/attachment_fu/backends/s3_backend.rb +++ b/lib/technoweenie/attachment_fu/backends/s3_backend.rb @@ -269,17 +269,26 @@ module Technoweenie # :nodoc: def rename_file return unless @old_filename && @old_filename != filename - + old_full_filename = File.join(base_path, @old_filename) S3Object.rename( old_full_filename, full_filename, bucket_name, - :access => attachment_options[:s3_access] + :copy_acl => :true ) @old_filename = nil + + if thumbnailable? + thumbnails.each do |thumb| + thumb.filename = filename + thumb.filename = thumb.thumbnail_name_for(thumb.thumbnail) + thumb.save + end + end + true end diff --git a/test/backends/remote/s3_test.rb b/test/backends/remote/s3_test.rb index c7cb4f9..4a226ed 100644 --- a/test/backends/remote/s3_test.rb +++ b/test/backends/remote/s3_test.rb @@ -94,6 +94,22 @@ class S3Test < Test::Unit::TestCase test_against_subclass :test_should_delete_attachment_from_s3_when_attachment_record_destroyed, S3Attachment + def test_should_rename_attachments_in_s3_when_record_renamed(klass = S3ImageWithThumbsFileAttachment) + attachment_model klass + attachment = upload_file :filename => '/files/rails.png' + old_thumbnail_s3_url = attachment.s3_url(:thumb) + assert_not_created do + attachment.filename = 'rails2.png' + attachment.save + assert_kind_of Net::HTTPOK, http_response_for(attachment.s3_url(:thumb)), "#{attachment.s3_url(:thumb)} does not exist" + assert_kind_of Net::HTTPForbidden, http_response_for(old_thumbnail_s3_url), "#{old_thumbnail_s3_url} still exists" + assert !attachment.reload.size.zero? + assert_equal 'rails2_thumb.png', attachment.thumbnail_name_for(:thumb) + end + end + + test_against_subclass :test_should_rename_attachments_in_s3_when_record_renamed, S3ImageWithThumbsFileAttachment + protected def http_response_for(url) url = URI.parse(url) diff --git a/test/fixtures/attachment.rb b/test/fixtures/attachment.rb index 7476d7d..2a2abac 100644 --- a/test/fixtures/attachment.rb +++ b/test/fixtures/attachment.rb @@ -143,6 +143,11 @@ begin has_attachment :storage => :s3, :path_prefix => 'some/custom/path/prefix', :processor => :rmagick validates_as_attachment end + + class S3ImageWithThumbsFileAttachment < S3Attachment + has_attachment :storage => :s3, :thumbnails => { :thumb => [50, 50], :geometry => 'x50' }, :resize_to => [55,55] + validates_as_attachment + end rescue puts "S3 error: #{$!}" end -- 1.5.4.3