paperclip 2.8.0 → 3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of paperclip might be problematic. Click here for more details.
- data/.gitignore +1 -0
- data/.travis.yml +9 -7
- data/Appraisals +6 -12
- data/Gemfile +2 -0
- data/NEWS +24 -0
- data/README.md +53 -21
- data/Rakefile +7 -2
- data/UPGRADING +14 -0
- data/features/basic_integration.feature +8 -8
- data/features/rake_tasks.feature +1 -1
- data/features/step_definitions/attachment_steps.rb +11 -2
- data/features/step_definitions/rails_steps.rb +17 -79
- data/features/support/env.rb +3 -0
- data/features/support/file_helpers.rb +24 -0
- data/features/support/rails.rb +3 -3
- data/gemfiles/{rails3_1.gemfile → 3.0.gemfile} +3 -1
- data/gemfiles/{rails2.gemfile → 3.1.gemfile} +3 -1
- data/gemfiles/{rails3.gemfile → 3.2.gemfile} +3 -1
- data/images.rake +21 -0
- data/lib/generators/paperclip/paperclip_generator.rb +1 -2
- data/lib/paperclip.rb +48 -319
- data/lib/paperclip/attachment.rb +33 -81
- data/lib/paperclip/attachment_options.rb +0 -1
- data/lib/paperclip/callbacks.rb +30 -0
- data/lib/paperclip/errors.rb +27 -0
- data/lib/paperclip/geometry.rb +6 -4
- data/lib/paperclip/glue.rb +15 -0
- data/lib/paperclip/helpers.rb +71 -0
- data/lib/paperclip/instance_methods.rb +35 -0
- data/lib/paperclip/interpolations.rb +2 -2
- data/lib/paperclip/io_adapters/attachment_adapter.rb +62 -0
- data/lib/paperclip/io_adapters/file_adapter.rb +81 -0
- data/lib/paperclip/io_adapters/identity_adapter.rb +12 -0
- data/lib/paperclip/io_adapters/nil_adapter.rb +34 -0
- data/lib/paperclip/io_adapters/registry.rb +32 -0
- data/lib/paperclip/io_adapters/stringio_adapter.rb +64 -0
- data/lib/paperclip/io_adapters/uploaded_file_adapter.rb +63 -0
- data/lib/paperclip/locales/en.yml +17 -0
- data/lib/paperclip/logger.rb +21 -0
- data/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb +1 -1
- data/lib/paperclip/matchers/validate_attachment_presence_matcher.rb +2 -2
- data/lib/paperclip/matchers/validate_attachment_size_matcher.rb +7 -7
- data/lib/paperclip/processor.rb +32 -17
- data/lib/paperclip/railtie.rb +10 -15
- data/lib/paperclip/storage/filesystem.rb +5 -14
- data/lib/paperclip/storage/fog.rb +2 -21
- data/lib/paperclip/storage/s3.rb +12 -29
- data/lib/paperclip/tempfile.rb +41 -0
- data/lib/paperclip/thumbnail.rb +2 -3
- data/lib/paperclip/validators.rb +45 -0
- data/lib/paperclip/validators/attachment_content_type_validator.rb +47 -0
- data/lib/paperclip/validators/attachment_presence_validator.rb +26 -0
- data/lib/paperclip/validators/attachment_size_validator.rb +102 -0
- data/lib/paperclip/version.rb +1 -1
- data/lib/tasks/paperclip.rake +3 -11
- data/paperclip.gemspec +15 -5
- data/test/adapter_registry_test.rb +32 -0
- data/test/attachment_adapter_test.rb +48 -0
- data/test/attachment_options_test.rb +0 -13
- data/test/attachment_test.rb +27 -55
- data/test/file_adapter_test.rb +43 -0
- data/test/generator_test.rb +78 -0
- data/test/geometry_test.rb +5 -5
- data/test/helper.rb +9 -11
- data/test/identity_adapter_test.rb +8 -0
- data/test/integration_test.rb +39 -94
- data/test/interpolations_test.rb +8 -1
- data/test/matchers/validate_attachment_size_matcher_test.rb +16 -2
- data/test/nil_adapter_test.rb +25 -0
- data/test/paperclip_test.rb +30 -189
- data/test/storage/filesystem_test.rb +0 -14
- data/test/storage/fog_test.rb +0 -14
- data/test/storage/s3_live_test.rb +22 -9
- data/test/storage/s3_test.rb +70 -34
- data/test/stringio_adapter_test.rb +42 -0
- data/test/style_test.rb +10 -16
- data/test/thumbnail_test.rb +16 -10
- data/test/uploaded_file_adapter_test.rb +98 -0
- data/test/validators/attachment_content_type_validator_test.rb +140 -0
- data/test/validators/attachment_presence_validator_test.rb +85 -0
- data/test/validators/attachment_size_validator_test.rb +207 -0
- data/test/validators_test.rb +25 -0
- metadata +152 -30
- data/gemfiles/rails3_2.gemfile +0 -9
- data/generators/paperclip/USAGE +0 -5
- data/generators/paperclip/paperclip_generator.rb +0 -27
- data/generators/paperclip/templates/paperclip_migration.rb.erb +0 -19
- data/init.rb +0 -4
- data/lib/paperclip/callback_compatibility.rb +0 -61
- data/lib/paperclip/iostream.rb +0 -45
- data/lib/paperclip/upfile.rb +0 -64
- data/rails/init.rb +0 -2
- data/test/iostream_test.rb +0 -71
- data/test/upfile_test.rb +0 -53
| @@ -23,20 +23,6 @@ class FileSystemTest < Test::Unit::TestCase | |
| 23 23 | 
             
                  assert File.exists?(@dummy.avatar.path(:thumbnail))
         | 
| 24 24 | 
             
                end
         | 
| 25 25 |  | 
| 26 | 
            -
                should "clean up file objects" do
         | 
| 27 | 
            -
                  File.stubs(:exist?).returns(true)
         | 
| 28 | 
            -
                  Paperclip::Tempfile.any_instance.expects(:close).at_least_once()
         | 
| 29 | 
            -
                  Paperclip::Tempfile.any_instance.expects(:unlink).at_least_once()
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                  @dummy.save!
         | 
| 32 | 
            -
                end
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                should "always be rewound when returning from #to_file" do
         | 
| 35 | 
            -
                  assert_equal 0, @dummy.avatar.to_file.pos
         | 
| 36 | 
            -
                  @dummy.avatar.to_file.seek(10)
         | 
| 37 | 
            -
                  assert_equal 0, @dummy.avatar.to_file.pos
         | 
| 38 | 
            -
                end
         | 
| 39 | 
            -
                    
         | 
| 40 26 | 
             
                context "with file that has space in file name" do
         | 
| 41 27 | 
             
                  setup do
         | 
| 42 28 | 
             
                    rebuild_model :styles => { :thumbnail => "25x25#" }
         | 
    
        data/test/storage/fog_test.rb
    CHANGED
    
    | @@ -56,14 +56,6 @@ class FogTest < Test::Unit::TestCase | |
| 56 56 | 
             
                    assert_equal File.expand_path(File.join(File.dirname(__FILE__), "../../public/avatars/5k.png")),
         | 
| 57 57 | 
             
                                 @dummy.avatar.path
         | 
| 58 58 | 
             
                  end
         | 
| 59 | 
            -
             | 
| 60 | 
            -
                  should "clean up file objects" do
         | 
| 61 | 
            -
                    File.stubs(:exist?).returns(true)
         | 
| 62 | 
            -
                    Paperclip::Tempfile.any_instance.expects(:close).at_least_once()
         | 
| 63 | 
            -
                    Paperclip::Tempfile.any_instance.expects(:unlink).at_least_once()
         | 
| 64 | 
            -
             | 
| 65 | 
            -
                    @dummy.save!
         | 
| 66 | 
            -
                  end
         | 
| 67 59 | 
             
                end
         | 
| 68 60 |  | 
| 69 61 | 
             
                setup do
         | 
| @@ -110,12 +102,6 @@ class FogTest < Test::Unit::TestCase | |
| 110 102 | 
             
                    directory.destroy
         | 
| 111 103 | 
             
                  end
         | 
| 112 104 |  | 
| 113 | 
            -
                  should "always be rewound when returning from #to_file" do
         | 
| 114 | 
            -
                    assert_equal 0, @dummy.avatar.to_file.pos
         | 
| 115 | 
            -
                    @dummy.avatar.to_file.seek(10)
         | 
| 116 | 
            -
                    assert_equal 0, @dummy.avatar.to_file.pos
         | 
| 117 | 
            -
                  end
         | 
| 118 | 
            -
                        
         | 
| 119 105 | 
             
                  should "pass the content type to the Fog::Storage::AWS::Files instance" do
         | 
| 120 106 | 
             
                    Fog::Storage::AWS::Files.any_instance.expects(:create).with do |hash|
         | 
| 121 107 | 
             
                      hash[:content_type]
         | 
| @@ -1,9 +1,31 @@ | |
| 1 1 | 
             
            require './test/helper'
         | 
| 2 2 | 
             
            require 'aws'
         | 
| 3 3 |  | 
| 4 | 
            +
             | 
| 4 5 | 
             
            unless ENV["S3_BUCKET"].blank?
         | 
| 5 6 | 
             
              class S3LiveTest < Test::Unit::TestCase
         | 
| 6 7 |  | 
| 8 | 
            +
                context "when assigning an S3 attachment directly to another model" do
         | 
| 9 | 
            +
                  setup do
         | 
| 10 | 
            +
                    rebuild_model :styles => { :thumb => "100x100", :square => "32x32#" },
         | 
| 11 | 
            +
                                  :storage => :s3,
         | 
| 12 | 
            +
                                  :bucket => ENV["S3_BUCKET"],
         | 
| 13 | 
            +
                                  :path => ":class/:attachment/:id/:style.:extension",
         | 
| 14 | 
            +
                                  :s3_credentials => File.new(File.join(File.dirname(__FILE__), "..", "fixtures", "s3.yml"))
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                    @dummy = Dummy.new
         | 
| 17 | 
            +
                    @attachment = Dummy.new.avatar
         | 
| 18 | 
            +
                    @file = File.new(fixture_file("5k.png"))
         | 
| 19 | 
            +
                    @attachment.assign(@file)
         | 
| 20 | 
            +
                    @attachment.save
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                    @attachment2 = Dummy.new.avatar
         | 
| 23 | 
            +
                    @attachment2.assign(@file)
         | 
| 24 | 
            +
                    @attachment2.save
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
             | 
| 7 29 | 
             
                context "Generating an expiring url on a nonexistant attachment" do
         | 
| 8 30 | 
             
                  setup do
         | 
| 9 31 | 
             
                    rebuild_model :styles => { :thumb => "100x100", :square => "32x32#" },
         | 
| @@ -46,10 +68,6 @@ unless ENV["S3_BUCKET"].blank? | |
| 46 68 | 
             
                      @dummy.destroy
         | 
| 47 69 | 
             
                    end
         | 
| 48 70 |  | 
| 49 | 
            -
                    should "still return a Tempfile when sent #to_file" do
         | 
| 50 | 
            -
                      assert_equal Paperclip::Tempfile, @dummy.avatar.to_file.class
         | 
| 51 | 
            -
                    end
         | 
| 52 | 
            -
             | 
| 53 71 | 
             
                    context "and saved" do
         | 
| 54 72 | 
             
                      setup do
         | 
| 55 73 | 
             
                        @dummy.save
         | 
| @@ -58,11 +76,6 @@ unless ENV["S3_BUCKET"].blank? | |
| 58 76 | 
             
                      should "be on S3" do
         | 
| 59 77 | 
             
                        assert true
         | 
| 60 78 | 
             
                      end
         | 
| 61 | 
            -
             | 
| 62 | 
            -
                      should "generate a tempfile with the right name" do
         | 
| 63 | 
            -
                        file = @dummy.avatar.to_file
         | 
| 64 | 
            -
                        assert_match /^original.*\.png$/, File.basename(file.path)
         | 
| 65 | 
            -
                      end
         | 
| 66 79 | 
             
                    end
         | 
| 67 80 | 
             
                  end
         | 
| 68 81 | 
             
                end
         | 
    
        data/test/storage/s3_test.rb
    CHANGED
    
    | @@ -88,7 +88,6 @@ class S3Test < Test::Unit::TestCase | |
| 88 88 |  | 
| 89 89 | 
             
                setup do
         | 
| 90 90 | 
             
                  rebuild_model :storage => :s3,
         | 
| 91 | 
            -
                                #:bucket => "testing", # intentionally left out
         | 
| 92 91 | 
             
                                :http_proxy => @proxy_settings,
         | 
| 93 92 | 
             
                                :s3_credentials => {:not => :important}
         | 
| 94 93 |  | 
| @@ -241,7 +240,7 @@ class S3Test < Test::Unit::TestCase | |
| 241 240 | 
             
                                  'secret_access_key' => "54321"
         | 
| 242 241 | 
             
                                }
         | 
| 243 242 |  | 
| 244 | 
            -
                  file = StringIO.new(".")
         | 
| 243 | 
            +
                  file = Paperclip.io_adapters.for(StringIO.new("."))
         | 
| 245 244 | 
             
                  file.original_filename = "question?mark.png"
         | 
| 246 245 | 
             
                  @dummy = Dummy.new
         | 
| 247 246 | 
             
                  @dummy.avatar = file
         | 
| @@ -336,24 +335,29 @@ class S3Test < Test::Unit::TestCase | |
| 336 335 | 
             
                  assert_match %r{^avatars/stringio\.txt}, @dummy.avatar.url
         | 
| 337 336 | 
             
                end
         | 
| 338 337 |  | 
| 339 | 
            -
             | 
| 340 | 
            -
                    assert_equal 0, @dummy.avatar.to_file.pos
         | 
| 341 | 
            -
                    @dummy.avatar.to_file.seek(10)
         | 
| 342 | 
            -
                    assert_equal 0, @dummy.avatar.to_file.pos
         | 
| 343 | 
            -
                  end
         | 
| 344 | 
            -
                end
         | 
| 338 | 
            +
              end
         | 
| 345 339 |  | 
| 346 340 | 
             
              context "Generating a secure url with an expiration" do
         | 
| 347 341 | 
             
                setup do
         | 
| 348 | 
            -
                   | 
| 349 | 
            -
             | 
| 350 | 
            -
             | 
| 351 | 
            -
             | 
| 352 | 
            -
             | 
| 353 | 
            -
             | 
| 354 | 
            -
             | 
| 355 | 
            -
             | 
| 356 | 
            -
             | 
| 342 | 
            +
                  @build_model_with_options = lambda {|options|
         | 
| 343 | 
            +
                    base_options = {
         | 
| 344 | 
            +
                      :storage => :s3,
         | 
| 345 | 
            +
                      :s3_credentials => {
         | 
| 346 | 
            +
                        :production   => { :bucket => "prod_bucket" },
         | 
| 347 | 
            +
                        :development  => { :bucket => "dev_bucket" }
         | 
| 348 | 
            +
                      },
         | 
| 349 | 
            +
                      :s3_host_alias => "something.something.com",
         | 
| 350 | 
            +
                      :s3_permissions => "private",
         | 
| 351 | 
            +
                      :path => ":attachment/:basename.:extension",
         | 
| 352 | 
            +
                      :url => ":s3_alias_url"
         | 
| 353 | 
            +
                    }
         | 
| 354 | 
            +
             | 
| 355 | 
            +
                    rebuild_model base_options.merge(options)
         | 
| 356 | 
            +
                  }
         | 
| 357 | 
            +
                end
         | 
| 358 | 
            +
             | 
| 359 | 
            +
                should "use default options" do
         | 
| 360 | 
            +
                  @build_model_with_options[{}]
         | 
| 357 361 |  | 
| 358 362 | 
             
                  rails_env("production")
         | 
| 359 363 |  | 
| @@ -367,8 +371,40 @@ class S3Test < Test::Unit::TestCase | |
| 367 371 | 
             
                  @dummy.avatar.expiring_url
         | 
| 368 372 | 
             
                end
         | 
| 369 373 |  | 
| 370 | 
            -
                should " | 
| 371 | 
            -
                   | 
| 374 | 
            +
                should "allow overriding s3_url_options" do
         | 
| 375 | 
            +
                  @build_model_with_options[:s3_url_options => { :response_content_disposition => "inline" }]
         | 
| 376 | 
            +
             | 
| 377 | 
            +
                  rails_env("production")
         | 
| 378 | 
            +
             | 
| 379 | 
            +
                  @dummy = Dummy.new
         | 
| 380 | 
            +
                  @dummy.avatar = StringIO.new(".")
         | 
| 381 | 
            +
             | 
| 382 | 
            +
                  object = stub
         | 
| 383 | 
            +
                  @dummy.avatar.stubs(:s3_object).returns(object)
         | 
| 384 | 
            +
                  object.expects(:url_for).with(:read, :expires => 3600, :secure => true, :response_content_disposition => "inline")
         | 
| 385 | 
            +
             | 
| 386 | 
            +
                  @dummy.avatar.expiring_url
         | 
| 387 | 
            +
                end
         | 
| 388 | 
            +
             | 
| 389 | 
            +
                should "allow overriding s3_object options with a proc" do
         | 
| 390 | 
            +
                  @build_model_with_options[:s3_url_options => lambda {|attachment| { :response_content_type => attachment.avatar_content_type } }]
         | 
| 391 | 
            +
             | 
| 392 | 
            +
                  rails_env("production")
         | 
| 393 | 
            +
             | 
| 394 | 
            +
                  @dummy = Dummy.new
         | 
| 395 | 
            +
             | 
| 396 | 
            +
                  @file = StringIO.new(".")
         | 
| 397 | 
            +
                  @file.stubs(:original_filename).returns("5k.png\n\n")
         | 
| 398 | 
            +
                  @file.stubs(:content_type).returns("image/png\n\n")
         | 
| 399 | 
            +
                  @file.stubs(:to_tempfile).returns(@file)
         | 
| 400 | 
            +
             | 
| 401 | 
            +
                  @dummy.avatar = @file
         | 
| 402 | 
            +
             | 
| 403 | 
            +
                  object = stub
         | 
| 404 | 
            +
                  @dummy.avatar.stubs(:s3_object).returns(object)
         | 
| 405 | 
            +
                  object.expects(:url_for).with(:read, :expires => 3600, :secure => true, :response_content_type => "image/png")
         | 
| 406 | 
            +
             | 
| 407 | 
            +
                  @dummy.avatar.expiring_url
         | 
| 372 408 | 
             
                end
         | 
| 373 409 | 
             
              end
         | 
| 374 410 |  | 
| @@ -507,14 +543,6 @@ class S3Test < Test::Unit::TestCase | |
| 507 543 | 
             
                    end
         | 
| 508 544 | 
             
                  end
         | 
| 509 545 |  | 
| 510 | 
            -
                  should "delete tempfiles" do
         | 
| 511 | 
            -
                    File.stubs(:exist?).returns(true)
         | 
| 512 | 
            -
                    Paperclip::Tempfile.any_instance.expects(:close).at_least_once()
         | 
| 513 | 
            -
                    Paperclip::Tempfile.any_instance.expects(:unlink).at_least_once()
         | 
| 514 | 
            -
             | 
| 515 | 
            -
                    @dummy.save!
         | 
| 516 | 
            -
                  end
         | 
| 517 | 
            -
             | 
| 518 546 | 
             
                  context "and saved without a bucket" do
         | 
| 519 547 | 
             
                    setup do
         | 
| 520 548 | 
             
                      AWS::S3::BucketCollection.any_instance.expects(:create).with("testing")
         | 
| @@ -570,6 +598,21 @@ class S3Test < Test::Unit::TestCase | |
| 570 598 | 
             
                end
         | 
| 571 599 | 
             
              end
         | 
| 572 600 |  | 
| 601 | 
            +
              context "An attachment with S3 storage and S3 credentials defined as a Proc" do
         | 
| 602 | 
            +
                setup do
         | 
| 603 | 
            +
                  rebuild_model :storage => :s3,
         | 
| 604 | 
            +
                                :bucket => {:not => :important},
         | 
| 605 | 
            +
                                :s3_credentials => lambda { |attachment|
         | 
| 606 | 
            +
                                  Hash['access_key_id' => "access#{attachment.instance.other}", 'secret_access_key' => "secret#{attachment.instance.other}"]
         | 
| 607 | 
            +
                                }
         | 
| 608 | 
            +
                end
         | 
| 609 | 
            +
             | 
| 610 | 
            +
                should "get the right credentials" do
         | 
| 611 | 
            +
                  assert "access1234", Dummy.new(:other => '1234').avatar.s3_credentials[:access_key_id]
         | 
| 612 | 
            +
                  assert "secret1234", Dummy.new(:other => '1234').avatar.s3_credentials[:secret_access_key]
         | 
| 613 | 
            +
                end
         | 
| 614 | 
            +
              end
         | 
| 615 | 
            +
             | 
| 573 616 | 
             
              context "An attachment with S3 storage and specific s3 headers set" do
         | 
| 574 617 | 
             
                setup do
         | 
| 575 618 | 
             
                  rebuild_model :storage => :s3,
         | 
| @@ -1002,13 +1045,6 @@ class S3Test < Test::Unit::TestCase | |
| 1002 1045 |  | 
| 1003 1046 | 
             
                    context "and saved" do
         | 
| 1004 1047 | 
             
                      setup do
         | 
| 1005 | 
            -
                        [:thumb, :original].each do |style|
         | 
| 1006 | 
            -
                          object = stub
         | 
| 1007 | 
            -
                          @dummy.avatar.stubs(:s3_object).with(style).returns(object)
         | 
| 1008 | 
            -
                          object.expects(:write).with(anything,
         | 
| 1009 | 
            -
                                                      :content_type => "image/png",
         | 
| 1010 | 
            -
                                                      :acl => style == :thumb ? :public_read : :private)
         | 
| 1011 | 
            -
                        end
         | 
| 1012 1048 | 
             
                        @dummy.save
         | 
| 1013 1049 | 
             
                      end
         | 
| 1014 1050 |  | 
| @@ -0,0 +1,42 @@ | |
| 1 | 
            +
            require './test/helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class StringioFileProxyTest < Test::Unit::TestCase
         | 
| 4 | 
            +
              context "a new instance" do
         | 
| 5 | 
            +
                setup do
         | 
| 6 | 
            +
                  @contents = "abc123"
         | 
| 7 | 
            +
                  @stringio = StringIO.new(@contents)
         | 
| 8 | 
            +
                  @subject = Paperclip.io_adapters.for(@stringio)
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                should "return a file name" do
         | 
| 12 | 
            +
                  assert_equal "stringio.txt", @subject.original_filename
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                should "allow us to set a name" do
         | 
| 16 | 
            +
                  @subject.original_filename = "data.txt"
         | 
| 17 | 
            +
                  assert_equal "data.txt", @subject.original_filename
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                should "return a content type" do
         | 
| 21 | 
            +
                  assert_equal "text/plain", @subject.content_type
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                should "allow us to set a content type" do
         | 
| 25 | 
            +
                  @subject.content_type = "image/jpg"
         | 
| 26 | 
            +
                  assert_equal "image/jpg", @subject.content_type
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                should "return the size of the data" do
         | 
| 30 | 
            +
                  assert_equal 6, @subject.size
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                should "generate an MD5 hash of the contents" do
         | 
| 34 | 
            +
                  assert_equal Digest::MD5.hexdigest(@contents), @subject.fingerprint
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                should "return the data contained in the StringIO" do
         | 
| 38 | 
            +
                  assert_equal "abc123", @subject.read
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
            end
         | 
    
        data/test/style_test.rb
    CHANGED
    
    | @@ -96,46 +96,40 @@ class StyleTest < Test::Unit::TestCase | |
| 96 96 | 
             
              end
         | 
| 97 97 |  | 
| 98 98 | 
             
              context "An attachment with :convert_options" do
         | 
| 99 | 
            -
                 | 
| 99 | 
            +
                setup do
         | 
| 100 100 | 
             
                  @attachment = attachment :path => ":basename.:extension",
         | 
| 101 101 | 
             
                                           :styles => {:thumb => "100x100", :large => "400x400"},
         | 
| 102 102 | 
             
                                           :convert_options => {:all => "-do_stuff", :thumb => "-thumbnailize"}
         | 
| 103 | 
            -
                  @attachment.expects(:extra_options_for).never
         | 
| 104 103 | 
             
                  @style = @attachment.styles[:thumb]
         | 
| 105 104 | 
             
                  @file = StringIO.new("...")
         | 
| 106 105 | 
             
                  @file.stubs(:original_filename).returns("file.jpg")
         | 
| 107 106 | 
             
                end
         | 
| 108 107 |  | 
| 108 | 
            +
                before_should "not have called extra_options_for(:thumb/:large) on initialization" do
         | 
| 109 | 
            +
                  @attachment.expects(:extra_options_for).never
         | 
| 110 | 
            +
                end
         | 
| 111 | 
            +
             | 
| 109 112 | 
             
                should "call extra_options_for(:thumb/:large) when convert options are requested" do
         | 
| 110 | 
            -
                  @attachment = attachment :path => ":basename.:extension",
         | 
| 111 | 
            -
                                           :styles => {:thumb => "100x100", :large => "400x400"},
         | 
| 112 | 
            -
                                           :convert_options => {:all => "-do_stuff", :thumb => "-thumbnailize"}
         | 
| 113 | 
            -
                  @style = @attachment.styles[:thumb]
         | 
| 114 | 
            -
                  @file = StringIO.new("...")
         | 
| 115 | 
            -
                  @file.stubs(:original_filename).returns("file.jpg")
         | 
| 116 113 | 
             
                  @attachment.expects(:extra_options_for).with(:thumb)
         | 
| 117 114 | 
             
                  @attachment.styles[:thumb].convert_options
         | 
| 118 115 | 
             
                end
         | 
| 119 116 | 
             
              end
         | 
| 120 117 |  | 
| 121 118 | 
             
              context "An attachment with :source_file_options" do
         | 
| 122 | 
            -
                 | 
| 119 | 
            +
                setup do
         | 
| 123 120 | 
             
                  @attachment = attachment :path => ":basename.:extension",
         | 
| 124 121 | 
             
                                           :styles => {:thumb => "100x100", :large => "400x400"},
         | 
| 125 122 | 
             
                                           :source_file_options => {:all => "-density 400", :thumb => "-depth 8"}
         | 
| 126 | 
            -
                  @attachment.expects(:extra_source_file_options_for).never
         | 
| 127 123 | 
             
                  @style = @attachment.styles[:thumb]
         | 
| 128 124 | 
             
                  @file = StringIO.new("...")
         | 
| 129 125 | 
             
                  @file.stubs(:original_filename).returns("file.jpg")
         | 
| 130 126 | 
             
                end
         | 
| 131 127 |  | 
| 128 | 
            +
                before_should "not have called extra_source_file_options_for(:thumb/:large) on initialization" do
         | 
| 129 | 
            +
                  @attachment.expects(:extra_source_file_options_for).never
         | 
| 130 | 
            +
                end
         | 
| 131 | 
            +
             | 
| 132 132 | 
             
                should "call extra_options_for(:thumb/:large) when convert options are requested" do
         | 
| 133 | 
            -
                  @attachment = attachment :path => ":basename.:extension",
         | 
| 134 | 
            -
                                           :styles => {:thumb => "100x100", :large => "400x400"},
         | 
| 135 | 
            -
                                           :source_file_options => {:all => "-density 400", :thumb => "-depth 8"}
         | 
| 136 | 
            -
                  @style = @attachment.styles[:thumb]
         | 
| 137 | 
            -
                  @file = StringIO.new("...")
         | 
| 138 | 
            -
                  @file.stubs(:original_filename).returns("file.jpg")
         | 
| 139 133 | 
             
                  @attachment.expects(:extra_source_file_options_for).with(:thumb)
         | 
| 140 134 | 
             
                  @attachment.styles[:thumb].source_file_options
         | 
| 141 135 | 
             
                end
         | 
    
        data/test/thumbnail_test.rb
    CHANGED
    
    | @@ -77,10 +77,10 @@ class ThumbnailTest < Test::Unit::TestCase | |
| 77 77 | 
             
                    old_path = ENV['PATH']
         | 
| 78 78 | 
             
                    begin
         | 
| 79 79 | 
             
                      ENV['PATH'] = ''
         | 
| 80 | 
            -
                       | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
                         | 
| 80 | 
            +
                      assert_raises(Paperclip::Errors::CommandNotFoundError) do
         | 
| 81 | 
            +
                        silence_stream(STDERR) do
         | 
| 82 | 
            +
                          @thumb.make
         | 
| 83 | 
            +
                        end
         | 
| 84 84 | 
             
                      end
         | 
| 85 85 | 
             
                    ensure
         | 
| 86 86 | 
             
                      ENV['PATH'] = old_path
         | 
| @@ -156,8 +156,10 @@ class ThumbnailTest < Test::Unit::TestCase | |
| 156 156 | 
             
                    end
         | 
| 157 157 |  | 
| 158 158 | 
             
                    should "error when trying to create the thumbnail" do
         | 
| 159 | 
            -
                      assert_raises(Paperclip:: | 
| 160 | 
            -
                         | 
| 159 | 
            +
                      assert_raises(Paperclip::Error) do
         | 
| 160 | 
            +
                        silence_stream(STDERR) do
         | 
| 161 | 
            +
                          @thumb.make
         | 
| 162 | 
            +
                        end
         | 
| 161 163 | 
             
                      end
         | 
| 162 164 | 
             
                    end
         | 
| 163 165 | 
             
                  end
         | 
| @@ -196,8 +198,10 @@ class ThumbnailTest < Test::Unit::TestCase | |
| 196 198 | 
             
                    end
         | 
| 197 199 |  | 
| 198 200 | 
             
                    should "error when trying to create the thumbnail" do
         | 
| 199 | 
            -
                      assert_raises(Paperclip:: | 
| 200 | 
            -
                         | 
| 201 | 
            +
                      assert_raises(Paperclip::Error) do
         | 
| 202 | 
            +
                        silence_stream(STDERR) do
         | 
| 203 | 
            +
                          @thumb.make
         | 
| 204 | 
            +
                        end
         | 
| 201 205 | 
             
                      end
         | 
| 202 206 | 
             
                    end
         | 
| 203 207 |  | 
| @@ -205,8 +209,10 @@ class ThumbnailTest < Test::Unit::TestCase | |
| 205 209 | 
             
                      old_path = ENV['PATH']
         | 
| 206 210 | 
             
                      begin
         | 
| 207 211 | 
             
                        ENV['PATH'] = ''
         | 
| 208 | 
            -
                        assert_raises(Paperclip::CommandNotFoundError) do
         | 
| 209 | 
            -
                           | 
| 212 | 
            +
                        assert_raises(Paperclip::Errors::CommandNotFoundError) do
         | 
| 213 | 
            +
                          silence_stream(STDERR) do
         | 
| 214 | 
            +
                            @thumb.make
         | 
| 215 | 
            +
                          end
         | 
| 210 216 | 
             
                        end
         | 
| 211 217 | 
             
                      ensure
         | 
| 212 218 | 
             
                        ENV['PATH'] = old_path
         | 
| @@ -0,0 +1,98 @@ | |
| 1 | 
            +
            require './test/helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class UploadedFileAdapterTest < Test::Unit::TestCase
         | 
| 4 | 
            +
              context "a new instance" do
         | 
| 5 | 
            +
                context "with UploadedFile responding to #tempfile" do
         | 
| 6 | 
            +
                  setup do
         | 
| 7 | 
            +
                    class UploadedFile < OpenStruct; end
         | 
| 8 | 
            +
                    tempfile = File.new(fixture_file("5k.png"))
         | 
| 9 | 
            +
                    tempfile.binmode
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    @file = UploadedFile.new(
         | 
| 12 | 
            +
                      :original_filename => "5k.png",
         | 
| 13 | 
            +
                      :content_type => "image/png",
         | 
| 14 | 
            +
                      :head => "",
         | 
| 15 | 
            +
                      :tempfile => tempfile
         | 
| 16 | 
            +
                    )
         | 
| 17 | 
            +
                    @subject = Paperclip.io_adapters.for(@file)
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  should "get the right filename" do
         | 
| 21 | 
            +
                    assert_equal "5k.png", @subject.original_filename
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  should "force binmode on tempfile" do
         | 
| 25 | 
            +
                    assert @subject.instance_variable_get("@tempfile").binmode?
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  should "get the content type" do
         | 
| 29 | 
            +
                    assert_equal "image/png", @subject.content_type
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  should "get the file's size" do
         | 
| 33 | 
            +
                    assert_equal 4456, @subject.size
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  should "return false for a call to nil?" do
         | 
| 37 | 
            +
                    assert ! @subject.nil?
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  should "generate a MD5 hash of the contents" do
         | 
| 41 | 
            +
                    expected = Digest::MD5.file(@file.tempfile.path).to_s
         | 
| 42 | 
            +
                    assert_equal expected, @subject.fingerprint
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  should "read the contents of the file" do
         | 
| 46 | 
            +
                    expected = @file.tempfile.read
         | 
| 47 | 
            +
                    assert expected.length > 0
         | 
| 48 | 
            +
                    assert_equal expected, @subject.read
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                context "with UploadFile responding to #path" do
         | 
| 53 | 
            +
                  setup do
         | 
| 54 | 
            +
                    class UploadedFile < OpenStruct; end
         | 
| 55 | 
            +
                    @file = UploadedFile.new(
         | 
| 56 | 
            +
                      :original_filename => "5k.png",
         | 
| 57 | 
            +
                      :content_type => "image/png",
         | 
| 58 | 
            +
                      :head => "",
         | 
| 59 | 
            +
                      :path => fixture_file("5k.png")
         | 
| 60 | 
            +
                    )
         | 
| 61 | 
            +
                    @subject = Paperclip.io_adapters.for(@file)
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                  should "get the right filename" do
         | 
| 65 | 
            +
                    assert_equal "5k.png", @subject.original_filename
         | 
| 66 | 
            +
                  end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                  should "force binmode on tempfile" do
         | 
| 69 | 
            +
                    assert @subject.instance_variable_get("@tempfile").binmode?
         | 
| 70 | 
            +
                  end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                  should "get the content type" do
         | 
| 73 | 
            +
                    assert_equal "image/png", @subject.content_type
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                  should "get the file's size" do
         | 
| 77 | 
            +
                    assert_equal 4456, @subject.size
         | 
| 78 | 
            +
                  end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                  should "return false for a call to nil?" do
         | 
| 81 | 
            +
                    assert ! @subject.nil?
         | 
| 82 | 
            +
                  end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                  should "generate a MD5 hash of the contents" do
         | 
| 85 | 
            +
                    expected = Digest::MD5.file(@file.path).to_s
         | 
| 86 | 
            +
                    assert_equal expected, @subject.fingerprint
         | 
| 87 | 
            +
                  end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                  should "read the contents of the file" do
         | 
| 90 | 
            +
                    expected_file = File.new(@file.path)
         | 
| 91 | 
            +
                    expected_file.binmode
         | 
| 92 | 
            +
                    expected = expected_file.read
         | 
| 93 | 
            +
                    assert expected.length > 0
         | 
| 94 | 
            +
                    assert_equal expected, @subject.read
         | 
| 95 | 
            +
                  end
         | 
| 96 | 
            +
                end
         | 
| 97 | 
            +
              end
         | 
| 98 | 
            +
            end
         |