diff --git a/app/models/uploaded_file.rb b/app/models/uploaded_file.rb index 64f69a6..cfdfa67 100644 --- a/app/models/uploaded_file.rb +++ b/app/models/uploaded_file.rb @@ -6,6 +6,8 @@ require 'short_filename' # of the file itself is kept. (FIXME?) class UploadedFile < Article + attr_accessible :uploaded_data + def self.type_name _('File') end @@ -31,7 +33,7 @@ class UploadedFile < Article end def thumbnail_path - self.image? ? self.full_filename(:display).gsub(Rails.root.join('public'), '') : nil + self.image? ? self.full_filename(:display).to_s.gsub(Rails.root.join('public'), '') : nil end def display_title diff --git a/test/unit/uploaded_file_test.rb b/test/unit/uploaded_file_test.rb index 5bf70a3..b41c7ad 100644 --- a/test/unit/uploaded_file_test.rb +++ b/test/unit/uploaded_file_test.rb @@ -50,35 +50,35 @@ class UploadedFileTest < ActiveSupport::TestCase end should 'properly save images' do - file = UploadedFile.new(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) + file = build(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) file.profile = profile assert file.save assert file.is_image end should 'has attachment_fu validation options' do - file = UploadedFile.new(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) + file = build(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) assert_respond_to file, :attachment_validation_options end should 'has attachment_fu validation option for size' do - file = UploadedFile.new(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) + file = build(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) assert_includes file.attachment_validation_options, :size end should 'can display hits' do - file = UploadedFile.new(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) + file = build(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) assert_equal false, file.can_display_hits? end should 'not upload files bigger than max_size' do - f = UploadedFile.new(:profile => @profile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) + f = build(UploadedFile, :profile => @profile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) f.expects(:size).returns(UploadedFile.attachment_options[:max_size] + 1024) assert !f.valid? end should 'upload files smaller than max_size' do - f = UploadedFile.new(:profile => @profile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) + f = build(UploadedFile, :profile => @profile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) f.expects(:size).returns(UploadedFile.attachment_options[:max_size] - 1024) assert f.valid? end @@ -86,16 +86,18 @@ class UploadedFileTest < ActiveSupport::TestCase should 'create icon when created in folder' do p = create_user('test_user').person f = fast_create(Folder, :name => 'test_folder', :profile_id => p.id) - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent_id => f.id, :profile => p) + file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent_id => f.id, :profile => p) process_delayed_job_queue - assert File.exists?(UploadedFile.find(file.id).public_filename(:icon)) + + file.reload + assert File.exists?(file.public_filename(:icon)) file.destroy end should 'create icon when not created in folder' do p = create_user('test_user').person - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => p) + file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => p) process_delayed_job_queue assert File.exists?(UploadedFile.find(file.id).public_filename(:icon)) @@ -103,7 +105,7 @@ class UploadedFileTest < ActiveSupport::TestCase end should 'match max_size in validates message of size field' do - up = UploadedFile.new(:filename => 'fake_filename.png') + up = build(UploadedFile, :filename => 'fake_filename.png') up.valid? assert_match /#{UploadedFile.max_size.to_humanreadable}/, up.errors[:size] @@ -111,7 +113,7 @@ class UploadedFileTest < ActiveSupport::TestCase should 'display link to download of non-image files' do p = create_user('test_user').person - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain'), :profile => p) + file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain'), :profile => p) stubs(:content_tag).returns('link') expects(:link_to).with(file.name, file.url, :class => file.css_class_name) @@ -120,7 +122,7 @@ class UploadedFileTest < ActiveSupport::TestCase end should 'have title' do - assert_equal 'my title', UploadedFile.new(:title => 'my title').title + assert_equal 'my title', build(UploadedFile, :title => 'my title').title end should 'limit title to 140 characters' do @@ -135,7 +137,7 @@ class UploadedFileTest < ActiveSupport::TestCase end should 'always provide a display title' do - upload = UploadedFile.new(:uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain')) + upload = build(UploadedFile, :uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain')) assert_equal 'test.txt', upload.display_title upload.title = 'My text file' assert_equal 'My text file', upload.display_title @@ -151,13 +153,13 @@ class UploadedFileTest < ActiveSupport::TestCase end should 'use name as title by default but cut down the title' do - upload = UploadedFile.new(:uploaded_data => fixture_file_upload('/files/AGENDA_CULTURA_-_FESTA_DE_VAQUEIROS_PONTO_DE_SERRA_PRETA_BAIXA.txt')) + upload = build(UploadedFile, :uploaded_data => fixture_file_upload('/files/AGENDA_CULTURA_-_FESTA_DE_VAQUEIROS_PONTO_DE_SERRA_PRETA_BAIXA.txt')) upload.valid? assert_nil upload.errors[:title] end should 'create thumbnails after processing jobs' do - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => profile) + file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => profile) process_delayed_job_queue @@ -168,7 +170,7 @@ class UploadedFileTest < ActiveSupport::TestCase end should 'set thumbnails_processed to true after creating thumbnails' do - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => profile) + file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => profile) process_delayed_job_queue @@ -198,7 +200,7 @@ class UploadedFileTest < ActiveSupport::TestCase end should 'return image thumbnail if thumbnails were processed' do - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => profile) + file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => profile) process_delayed_job_queue assert_match(/rails_thumb.png/, UploadedFile.find(file.id).public_filename(:thumb)) @@ -214,7 +216,7 @@ class UploadedFileTest < ActiveSupport::TestCase end should 'store width and height after processing' do - file = UploadedFile.create!(:profile => @profile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) + file = create(UploadedFile, :profile => @profile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) file.create_thumbnails file = UploadedFile.find(file.id) @@ -241,7 +243,7 @@ class UploadedFileTest < ActiveSupport::TestCase should 'track action when a published image is uploaded in a gallery' do p = fast_create(Gallery, :profile_id => @profile.id) - f = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => p, :profile => @profile) + f = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => p, :profile => @profile) ta = ActionTracker::Record.last(:conditions => { :verb => "upload_image" }) assert_kind_of String, ta.get_thumbnail_path[0] assert_equal [f.reload.view_url], ta.get_view_url @@ -252,26 +254,26 @@ class UploadedFileTest < ActiveSupport::TestCase should 'not track action when is not image' do ActionTracker::Record.delete_all p = fast_create(Gallery, :profile_id => @profile.id) - f = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain'), :parent => p, :profile => @profile) + f = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain'), :parent => p, :profile => @profile) assert_nil ActionTracker::Record.last(:conditions => { :verb => "upload_image" }) end should 'not track action when has no parent' do - f = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => nil, :profile => @profile) + f = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => nil, :profile => @profile) assert_nil ActionTracker::Record.last(:conditions => { :verb => "upload_image" }) end should 'not track action when is not published' do ActionTracker::Record.delete_all p = fast_create(Gallery, :profile_id => @profile.id) - f = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => p, :profile => @profile, :published => false) + f = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => p, :profile => @profile, :published => false) assert_nil ActionTracker::Record.last(:conditions => { :verb => "upload_image" }) end should 'not track action when parent is not gallery' do ActionTracker::Record.delete_all p = fast_create(Folder, :profile_id => @profile.id) - f = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => p, :profile => @profile) + f = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => p, :profile => @profile) assert_nil ActionTracker::Record.last(:conditions => { :verb => "upload_image" }) end @@ -295,11 +297,11 @@ class UploadedFileTest < ActiveSupport::TestCase should 'upload to a folder with same name as the schema if database is postgresql' do uses_postgresql 'image_schema_one' - file1 = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => @profile) + file1 = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => @profile) process_delayed_job_queue assert_match(/image_schema_one\/\d{4}\/\d{4}\/rails.png/, UploadedFile.find(file1.id).public_filename) uses_postgresql 'image_schema_two' - file2 = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain'), :profile => @profile) + file2 = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain'), :profile => @profile) assert_match(/image_schema_two\/\d{4}\/\d{4}\/test.txt/, UploadedFile.find(file2.id).public_filename) file1.destroy file2.destroy @@ -307,13 +309,13 @@ class UploadedFileTest < ActiveSupport::TestCase end should 'return extension' do - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => @profile) + file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => @profile) assert_equal 'png', file.extension end should 'upload to path prefix folder if database is not postgresql' do uses_sqlite - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain'), :profile => @profile) + file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/test.txt', 'text/plain'), :profile => @profile) assert_match(/\/\d{4}\/\d{4}\/test.txt/, UploadedFile.find(file.id).public_filename) assert_no_match(/test_schema\/\d{4}\/\d{4}\/test.txt/, UploadedFile.find(file.id).public_filename) file.destroy @@ -321,7 +323,7 @@ class UploadedFileTest < ActiveSupport::TestCase should 'upload thumbnails to a folder with same name as the schema if database is postgresql' do uses_postgresql - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => @profile) + file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => @profile) process_delayed_job_queue UploadedFile.attachment_options[:thumbnails].each do |suffix, size| assert_match(/test_schema\/\d{4}\/\d{4}\/rails_#{suffix}.png/, UploadedFile.find(file.id).public_filename(suffix)) @@ -331,13 +333,13 @@ class UploadedFileTest < ActiveSupport::TestCase end should 'not allow script files to be uploaded without append .txt in the end' do - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('files/hello_world.php', 'application/x-php'), :profile => @profile) + file = create(UploadedFile, :uploaded_data => fixture_file_upload('files/hello_world.php', 'application/x-php'), :profile => @profile) assert_equal 'hello_world.php.txt', file.filename end should 'use gallery as target for action tracker' do gallery = fast_create(Gallery, :profile_id => profile.id) - image = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => gallery, :profile => profile) + image = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => gallery, :profile => profile) activity = ActionTracker::Record.find_last_by_verb 'upload_image' assert_equal gallery, activity.target end @@ -345,10 +347,10 @@ class UploadedFileTest < ActiveSupport::TestCase should 'group trackers activity of image\'s upload' do gallery = fast_create(Gallery, :profile_id => profile.id) - image1 = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => gallery, :profile => profile) + image1 = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => gallery, :profile => profile) assert_equal 1, ActionTracker::Record.find_all_by_verb('upload_image').count - image2 = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/other-pic.jpg', 'image/jpg'), :parent => gallery, :profile => profile) + image2 = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/other-pic.jpg', 'image/jpg'), :parent => gallery, :profile => profile) assert_equal 1, ActionTracker::Record.find_all_by_verb('upload_image').count end diff --git a/vendor/plugins/monkey_patches/attachment_fu/init.rb b/vendor/plugins/monkey_patches/attachment_fu/init.rb new file mode 100644 index 0000000..5c131d4 --- /dev/null +++ b/vendor/plugins/monkey_patches/attachment_fu/init.rb @@ -0,0 +1,26 @@ +# Monkey patch to rewrite attachment_fu's logic where no image with parent can +# be thumbnailable. + +Technoweenie::AttachmentFu.module_eval do + def thumbnailable? + image? && !is_thumbnail? + end + + def is_thumbnail? + (thumbnail_class == self.class) && !(respond_to?(:parent_id) && parent_id.nil?) + end +end + +# Monkey patch to rewrite attachment_fu's logic where no image with parent can +# be thumbnailable and supposition that full_filename will return a String +# while it might return Pathname. +Technoweenie::AttachmentFu::Backends::FileSystemBackend.module_eval do + def attachment_path_id + (is_thumbnail? && respond_to?(:parent_id)) ? parent_id : id + end + + def public_filename(thumbnail = nil) + full_filename(thumbnail).to_s.gsub %r(^#{Regexp.escape(base_path)}), '' + end +end + -- libgit2 0.21.2