paperclip 4.1.1 → 4.2.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of paperclip might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.gitignore +0 -6
- data/.travis.yml +4 -13
- data/Appraisals +0 -10
- data/CONTRIBUTING.md +10 -5
- data/Gemfile +8 -4
- data/NEWS +1 -1
- data/README.md +51 -10
- data/Rakefile +6 -8
- data/features/basic_integration.feature +5 -5
- data/features/step_definitions/attachment_steps.rb +4 -4
- data/features/step_definitions/rails_steps.rb +4 -4
- data/features/step_definitions/web_steps.rb +2 -2
- data/features/support/env.rb +2 -2
- data/features/support/fixtures/gemfile.txt +1 -1
- data/features/support/rails.rb +2 -1
- data/gemfiles/3.2.gemfile +5 -3
- data/gemfiles/4.0.gemfile +5 -3
- data/gemfiles/4.1.gemfile +5 -3
- data/lib/generators/paperclip/paperclip_generator.rb +0 -2
- data/lib/generators/paperclip/templates/paperclip_migration.rb.erb +1 -1
- data/lib/paperclip.rb +4 -1
- data/lib/paperclip/attachment.rb +90 -29
- data/lib/paperclip/content_type_detector.rb +1 -1
- data/lib/paperclip/geometry_detector_factory.rb +3 -1
- data/lib/paperclip/has_attached_file.rb +2 -1
- data/lib/paperclip/interpolations.rb +8 -0
- data/lib/paperclip/io_adapters/abstract_adapter.rb +1 -1
- data/lib/paperclip/io_adapters/data_uri_adapter.rb +1 -1
- data/lib/paperclip/io_adapters/stringio_adapter.rb +5 -11
- data/lib/paperclip/locales/de.yml +18 -0
- data/lib/paperclip/locales/es.yml +18 -0
- data/lib/paperclip/matchers/have_attached_file_matcher.rb +2 -1
- data/lib/paperclip/matchers/validate_attachment_presence_matcher.rb +2 -1
- data/lib/paperclip/matchers/validate_attachment_size_matcher.rb +2 -1
- data/lib/paperclip/media_type_spoof_detector.rb +10 -2
- data/lib/paperclip/storage/filesystem.rb +1 -1
- data/lib/paperclip/storage/s3.rb +26 -4
- data/lib/paperclip/style.rb +1 -1
- data/lib/paperclip/thumbnail.rb +6 -6
- data/lib/paperclip/validators.rb +5 -3
- data/lib/paperclip/validators/attachment_size_validator.rb +7 -3
- data/lib/paperclip/version.rb +1 -1
- data/lib/tasks/paperclip.rake +1 -2
- data/paperclip.gemspec +5 -3
- data/shoulda_macros/paperclip.rb +0 -1
- data/{test → spec}/database.yml +0 -0
- data/spec/paperclip/attachment_definitions_spec.rb +13 -0
- data/{test/attachment_processing_test.rb → spec/paperclip/attachment_processing_spec.rb} +20 -21
- data/{test/attachment_registry_test.rb → spec/paperclip/attachment_registry_spec.rb} +10 -11
- data/{test/attachment_test.rb → spec/paperclip/attachment_spec.rb} +367 -360
- data/{test/content_type_detector_test.rb → spec/paperclip/content_type_detector_spec.rb} +8 -8
- data/{test/file_command_content_type_detector_test.rb → spec/paperclip/file_command_content_type_detector_spec.rb} +5 -5
- data/spec/paperclip/filename_cleaner_spec.rb +14 -0
- data/spec/paperclip/geometry_detector_spec.rb +39 -0
- data/{test/geometry_parser_test.rb → spec/paperclip/geometry_parser_spec.rb} +27 -27
- data/{test/geometry_test.rb → spec/paperclip/geometry_spec.rb} +49 -51
- data/{test/has_attached_file_test.rb → spec/paperclip/has_attached_file_spec.rb} +18 -27
- data/{test/integration_test.rb → spec/paperclip/integration_spec.rb} +134 -126
- data/{test/interpolations_test.rb → spec/paperclip/interpolations_spec.rb} +54 -40
- data/{test/io_adapters/abstract_adapter_test.rb → spec/paperclip/io_adapters/abstract_adapter_spec.rb} +21 -10
- data/{test/io_adapters/attachment_adapter_test.rb → spec/paperclip/io_adapters/attachment_adapter_spec.rb} +27 -29
- data/{test/io_adapters/data_uri_adapter_test.rb → spec/paperclip/io_adapters/data_uri_adapter_spec.rb} +22 -18
- data/spec/paperclip/io_adapters/empty_string_adapter_spec.rb +17 -0
- data/{test/io_adapters/file_adapter_test.rb → spec/paperclip/io_adapters/file_adapter_spec.rb} +32 -28
- data/{test/io_adapters/http_url_proxy_adapter_test.rb → spec/paperclip/io_adapters/http_url_proxy_adapter_spec.rb} +22 -22
- data/spec/paperclip/io_adapters/identity_adapter_spec.rb +8 -0
- data/{test/io_adapters/nil_adapter_test.rb → spec/paperclip/io_adapters/nil_adapter_spec.rb} +7 -7
- data/{test/io_adapters/registry_test.rb → spec/paperclip/io_adapters/registry_spec.rb} +10 -7
- data/{test/io_adapters/stringio_adapter_test.rb → spec/paperclip/io_adapters/stringio_adapter_spec.rb} +16 -17
- data/{test/io_adapters/uploaded_file_adapter_test.rb → spec/paperclip/io_adapters/uploaded_file_adapter_spec.rb} +41 -41
- data/{test/io_adapters/uri_adapter_test.rb → spec/paperclip/io_adapters/uri_adapter_spec.rb} +22 -22
- data/spec/paperclip/matchers/have_attached_file_matcher_spec.rb +19 -0
- data/spec/paperclip/matchers/validate_attachment_content_type_matcher_spec.rb +99 -0
- data/spec/paperclip/matchers/validate_attachment_presence_matcher_spec.rb +69 -0
- data/spec/paperclip/matchers/validate_attachment_size_matcher_spec.rb +88 -0
- data/{test/media_type_spoof_detector_test.rb → spec/paperclip/media_type_spoof_detector_spec.rb} +13 -8
- data/spec/paperclip/meta_class_spec.rb +30 -0
- data/spec/paperclip/paperclip_missing_attachment_styles_spec.rb +84 -0
- data/{test/paperclip_test.rb → spec/paperclip/paperclip_spec.rb} +47 -47
- data/{test/plural_cache_test.rb → spec/paperclip/plural_cache_spec.rb} +6 -6
- data/{test/processor_test.rb → spec/paperclip/processor_spec.rb} +5 -5
- data/{test/rake_test.rb → spec/paperclip/rake_spec.rb} +15 -15
- data/spec/paperclip/schema_spec.rb +206 -0
- data/{test/storage/filesystem_test.rb → spec/paperclip/storage/filesystem_spec.rb} +18 -18
- data/{test/storage/fog_test.rb → spec/paperclip/storage/fog_spec.rb} +145 -140
- data/spec/paperclip/storage/s3_live_spec.rb +182 -0
- data/spec/paperclip/storage/s3_spec.rb +1475 -0
- data/spec/paperclip/style_spec.rb +255 -0
- data/spec/paperclip/tempfile_factory_spec.rb +29 -0
- data/{test/thumbnail_test.rb → spec/paperclip/thumbnail_spec.rb} +107 -107
- data/{test/url_generator_test.rb → spec/paperclip/url_generator_spec.rb} +55 -56
- data/spec/paperclip/validators/attachment_content_type_validator_spec.rb +322 -0
- data/spec/paperclip/validators/attachment_file_name_validator_spec.rb +160 -0
- data/{test/validators/attachment_presence_validator_test.rb → spec/paperclip/validators/attachment_presence_validator_spec.rb} +19 -19
- data/{test/validators/attachment_size_validator_test.rb → spec/paperclip/validators/attachment_size_validator_spec.rb} +65 -58
- data/{test/validators/media_type_spoof_detection_validator_test.rb → spec/paperclip/validators/media_type_spoof_detection_validator_spec.rb} +8 -8
- data/spec/paperclip/validators_spec.rb +164 -0
- data/spec/spec_helper.rb +40 -0
- data/spec/support/assertions.rb +71 -0
- data/spec/support/fake_model.rb +21 -0
- data/spec/support/fake_rails.rb +12 -0
- data/{test → spec/support}/fixtures/12k.png +0 -0
- data/{test → spec/support}/fixtures/50x50.png +0 -0
- data/{test → spec/support}/fixtures/5k.png +0 -0
- data/{test → spec/support}/fixtures/animated +0 -0
- data/{test → spec/support}/fixtures/animated.gif +0 -0
- data/{test → spec/support}/fixtures/animated.unknown +0 -0
- data/{test → spec/support}/fixtures/bad.png +0 -0
- data/{test → spec/support}/fixtures/empty.html +0 -0
- data/{test → spec/support}/fixtures/fog.yml +0 -0
- data/{test → spec/support}/fixtures/rotated.jpg +0 -0
- data/{test → spec/support}/fixtures/s3.yml +0 -0
- data/spec/support/fixtures/spaced file.jpg +0 -0
- data/test/fixtures/spaced file.png b/data/spec/support/fixtures/spaced → file.png +0 -0
- data/{test → spec/support}/fixtures/text.txt +0 -0
- data/{test → spec/support}/fixtures/twopage.pdf +0 -0
- data/{test → spec/support}/fixtures/uppercase.PNG +0 -0
- data/spec/support/matchers/accept.rb +5 -0
- data/spec/support/matchers/exist.rb +5 -0
- data/{test → spec}/support/mock_attachment.rb +0 -0
- data/{test → spec}/support/mock_interpolator.rb +0 -0
- data/{test → spec}/support/mock_model.rb +0 -0
- data/{test → spec}/support/mock_url_generator_builder.rb +0 -0
- data/spec/support/model_reconstruction.rb +60 -0
- data/spec/support/rails_helpers.rb +7 -0
- data/spec/support/test_data.rb +13 -0
- data/spec/support/version_helper.rb +9 -0
- metadata +256 -210
- data/gemfiles/3.0.gemfile +0 -11
- data/gemfiles/3.1.gemfile +0 -11
- data/test/attachment_definitions_test.rb +0 -13
- data/test/filename_cleaner_test.rb +0 -14
- data/test/generator_test.rb +0 -84
- data/test/geometry_detector_test.rb +0 -24
- data/test/helper.rb +0 -239
- data/test/io_adapters/empty_string_adapter_test.rb +0 -18
- data/test/io_adapters/identity_adapter_test.rb +0 -8
- data/test/matchers/have_attached_file_matcher_test.rb +0 -25
- data/test/matchers/validate_attachment_content_type_matcher_test.rb +0 -111
- data/test/matchers/validate_attachment_presence_matcher_test.rb +0 -70
- data/test/matchers/validate_attachment_size_matcher_test.rb +0 -87
- data/test/meta_class_test.rb +0 -32
- data/test/paperclip_missing_attachment_styles_test.rb +0 -90
- data/test/schema_test.rb +0 -206
- data/test/storage/s3_live_test.rb +0 -179
- data/test/storage/s3_test.rb +0 -1357
- data/test/style_test.rb +0 -251
- data/test/tempfile_factory_test.rb +0 -29
- data/test/validators/attachment_content_type_validator_test.rb +0 -324
- data/test/validators/attachment_file_name_validator_test.rb +0 -162
- data/test/validators_test.rb +0 -101
@@ -1,24 +1,24 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
describe Paperclip::ContentTypeDetector do
|
4
|
+
it 'gives a sensible default when the name is empty' do
|
5
5
|
assert_equal "application/octet-stream", Paperclip::ContentTypeDetector.new("").detect
|
6
6
|
end
|
7
7
|
|
8
|
-
|
8
|
+
it 'returns the empty content type when the file is empty' do
|
9
9
|
tempfile = Tempfile.new("empty")
|
10
10
|
assert_equal "inode/x-empty", Paperclip::ContentTypeDetector.new(tempfile.path).detect
|
11
11
|
tempfile.close
|
12
12
|
end
|
13
13
|
|
14
|
-
|
14
|
+
it 'returns content type of file if it is an acceptable type' do
|
15
15
|
MIME::Types.stubs(:type_for).returns([MIME::Type.new('application/mp4'), MIME::Type.new('video/mp4'), MIME::Type.new('audio/mp4')])
|
16
16
|
Paperclip.stubs(:run).returns("video/mp4")
|
17
17
|
@filename = "my_file.mp4"
|
18
18
|
assert_equal "video/mp4", Paperclip::ContentTypeDetector.new(@filename).detect
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
it 'finds the right type in the list via the file command' do
|
22
22
|
@filename = "#{Dir.tmpdir}/something.hahalolnotreal"
|
23
23
|
File.open(@filename, "w+") do |file|
|
24
24
|
file.puts "This is a text file."
|
@@ -28,12 +28,12 @@ class ContentTypeDetectorTest < Test::Unit::TestCase
|
|
28
28
|
FileUtils.rm @filename
|
29
29
|
end
|
30
30
|
|
31
|
-
|
31
|
+
it 'returns a sensible default if something is wrong, like the file is gone' do
|
32
32
|
@filename = "/path/to/nothing"
|
33
33
|
assert_equal "application/octet-stream", Paperclip::ContentTypeDetector.new(@filename).detect
|
34
34
|
end
|
35
35
|
|
36
|
-
|
36
|
+
it 'returns a sensible default when the file command is missing' do
|
37
37
|
Paperclip.stubs(:run).raises(Cocaine::CommandLineError.new)
|
38
38
|
@filename = "/path/to/something"
|
39
39
|
assert_equal "application/octet-stream", Paperclip::ContentTypeDetector.new(@filename).detect
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
describe Paperclip::FileCommandContentTypeDetector do
|
4
|
+
it 'returns a content type based on the content of the file' do
|
5
5
|
tempfile = Tempfile.new("something")
|
6
6
|
tempfile.write("This is a file.")
|
7
7
|
tempfile.rewind
|
@@ -11,14 +11,14 @@ class FileCommandContentTypeDetectorTest < Test::Unit::TestCase
|
|
11
11
|
tempfile.close
|
12
12
|
end
|
13
13
|
|
14
|
-
|
14
|
+
it 'returns a sensible default when the file command is missing' do
|
15
15
|
Paperclip.stubs(:run).raises(Cocaine::CommandLineError.new)
|
16
16
|
@filename = "/path/to/something"
|
17
17
|
assert_equal "application/octet-stream",
|
18
18
|
Paperclip::FileCommandContentTypeDetector.new(@filename).detect
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
it 'returns a sensible default on the odd chance that run returns nil' do
|
22
22
|
Paperclip.stubs(:run).returns(nil)
|
23
23
|
assert_equal "application/octet-stream",
|
24
24
|
Paperclip::FileCommandContentTypeDetector.new("windows").detect
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Paperclip::FilenameCleaner do
|
5
|
+
it 'converts invalid characters to underscores' do
|
6
|
+
cleaner = Paperclip::FilenameCleaner.new(/[aeiou]/)
|
7
|
+
expect(cleaner.call("baseball")).to eq "b_s_b_ll"
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'does not convert anything if the character regex is nil' do
|
11
|
+
cleaner = Paperclip::FilenameCleaner.new(nil)
|
12
|
+
expect(cleaner.call("baseball")).to eq "baseball"
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Paperclip::GeometryDetector do
|
4
|
+
it 'identifies an image and extract its dimensions' do
|
5
|
+
Paperclip::GeometryParser.stubs(:new).with("434x66,").returns(stub(make: :correct))
|
6
|
+
file = fixture_file("5k.png")
|
7
|
+
factory = Paperclip::GeometryDetector.new(file)
|
8
|
+
|
9
|
+
output = factory.make
|
10
|
+
|
11
|
+
expect(output).to eq :correct
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'identifies an image and extract its dimensions and orientation' do
|
15
|
+
Paperclip::GeometryParser.stubs(:new).with("300x200,6").returns(stub(make: :correct))
|
16
|
+
file = fixture_file("rotated.jpg")
|
17
|
+
factory = Paperclip::GeometryDetector.new(file)
|
18
|
+
|
19
|
+
output = factory.make
|
20
|
+
|
21
|
+
expect(output).to eq :correct
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'avoids reading EXIF orientation if so configured' do
|
25
|
+
begin
|
26
|
+
Paperclip.options[:use_exif_orientation] = false
|
27
|
+
Paperclip::GeometryParser.stubs(:new).with("300x200,1").returns(stub(make: :correct))
|
28
|
+
file = fixture_file("rotated.jpg")
|
29
|
+
factory = Paperclip::GeometryDetector.new(file)
|
30
|
+
|
31
|
+
output = factory.make
|
32
|
+
|
33
|
+
expect(output).to eq :correct
|
34
|
+
ensure
|
35
|
+
Paperclip.options[:use_exif_orientation] = true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
@@ -1,12 +1,12 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
describe Paperclip::GeometryParser do
|
4
|
+
it 'identifies an image and extract its dimensions with no orientation' do
|
5
5
|
Paperclip::Geometry.stubs(:new).with(
|
6
|
-
:
|
7
|
-
:
|
8
|
-
:
|
9
|
-
:
|
6
|
+
height: '73',
|
7
|
+
width: '434',
|
8
|
+
modifier: nil,
|
9
|
+
orientation: nil
|
10
10
|
).returns(:correct)
|
11
11
|
factory = Paperclip::GeometryParser.new("434x73")
|
12
12
|
|
@@ -15,12 +15,12 @@ class GeometryParserTest < Test::Unit::TestCase
|
|
15
15
|
assert_equal :correct, output
|
16
16
|
end
|
17
17
|
|
18
|
-
|
18
|
+
it 'identifies an image and extract its dimensions with an empty orientation' do
|
19
19
|
Paperclip::Geometry.stubs(:new).with(
|
20
|
-
:
|
21
|
-
:
|
22
|
-
:
|
23
|
-
:
|
20
|
+
height: '73',
|
21
|
+
width: '434',
|
22
|
+
modifier: nil,
|
23
|
+
orientation: ''
|
24
24
|
).returns(:correct)
|
25
25
|
factory = Paperclip::GeometryParser.new("434x73,")
|
26
26
|
|
@@ -29,12 +29,12 @@ class GeometryParserTest < Test::Unit::TestCase
|
|
29
29
|
assert_equal :correct, output
|
30
30
|
end
|
31
31
|
|
32
|
-
|
32
|
+
it 'identifies an image and extract its dimensions and orientation' do
|
33
33
|
Paperclip::Geometry.stubs(:new).with(
|
34
|
-
:
|
35
|
-
:
|
36
|
-
:
|
37
|
-
:
|
34
|
+
height: '200',
|
35
|
+
width: '300',
|
36
|
+
modifier: nil,
|
37
|
+
orientation: '6'
|
38
38
|
).returns(:correct)
|
39
39
|
factory = Paperclip::GeometryParser.new("300x200,6")
|
40
40
|
|
@@ -43,12 +43,12 @@ class GeometryParserTest < Test::Unit::TestCase
|
|
43
43
|
assert_equal :correct, output
|
44
44
|
end
|
45
45
|
|
46
|
-
|
46
|
+
it 'identifies an image and extract its dimensions and modifier' do
|
47
47
|
Paperclip::Geometry.stubs(:new).with(
|
48
|
-
:
|
49
|
-
:
|
50
|
-
:
|
51
|
-
:
|
48
|
+
height: '64',
|
49
|
+
width: '64',
|
50
|
+
modifier: '#',
|
51
|
+
orientation: nil
|
52
52
|
).returns(:correct)
|
53
53
|
factory = Paperclip::GeometryParser.new("64x64#")
|
54
54
|
|
@@ -57,12 +57,12 @@ class GeometryParserTest < Test::Unit::TestCase
|
|
57
57
|
assert_equal :correct, output
|
58
58
|
end
|
59
59
|
|
60
|
-
|
60
|
+
it 'identifies an image and extract its dimensions, orientation, and modifier' do
|
61
61
|
Paperclip::Geometry.stubs(:new).with(
|
62
|
-
:
|
63
|
-
:
|
64
|
-
:
|
65
|
-
:
|
62
|
+
height: '50',
|
63
|
+
width: '100',
|
64
|
+
modifier: '>',
|
65
|
+
orientation: '7'
|
66
66
|
).returns(:correct)
|
67
67
|
factory = Paperclip::GeometryParser.new("100x50,7>")
|
68
68
|
|
@@ -1,56 +1,56 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
|
3
|
+
describe Paperclip::Geometry do
|
4
4
|
context "Paperclip::Geometry" do
|
5
|
-
|
5
|
+
it "correctly reports its given dimensions" do
|
6
6
|
assert @geo = Paperclip::Geometry.new(1024, 768)
|
7
7
|
assert_equal 1024, @geo.width
|
8
8
|
assert_equal 768, @geo.height
|
9
9
|
end
|
10
10
|
|
11
|
-
|
11
|
+
it "sets height to 0 if height dimension is missing" do
|
12
12
|
assert @geo = Paperclip::Geometry.new(1024)
|
13
13
|
assert_equal 1024, @geo.width
|
14
14
|
assert_equal 0, @geo.height
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
it "sets width to 0 if width dimension is missing" do
|
18
18
|
assert @geo = Paperclip::Geometry.new(nil, 768)
|
19
19
|
assert_equal 0, @geo.width
|
20
20
|
assert_equal 768, @geo.height
|
21
21
|
end
|
22
22
|
|
23
|
-
|
23
|
+
it "is generated from a WxH-formatted string" do
|
24
24
|
assert @geo = Paperclip::Geometry.parse("800x600")
|
25
25
|
assert_equal 800, @geo.width
|
26
26
|
assert_equal 600, @geo.height
|
27
27
|
end
|
28
28
|
|
29
|
-
|
29
|
+
it "is generated from a xH-formatted string" do
|
30
30
|
assert @geo = Paperclip::Geometry.parse("x600")
|
31
31
|
assert_equal 0, @geo.width
|
32
32
|
assert_equal 600, @geo.height
|
33
33
|
end
|
34
34
|
|
35
|
-
|
35
|
+
it "is generated from a Wx-formatted string" do
|
36
36
|
assert @geo = Paperclip::Geometry.parse("800x")
|
37
37
|
assert_equal 800, @geo.width
|
38
38
|
assert_equal 0, @geo.height
|
39
39
|
end
|
40
40
|
|
41
|
-
|
41
|
+
it "is generated from a W-formatted string" do
|
42
42
|
assert @geo = Paperclip::Geometry.parse("800")
|
43
43
|
assert_equal 800, @geo.width
|
44
44
|
assert_equal 0, @geo.height
|
45
45
|
end
|
46
46
|
|
47
|
-
|
47
|
+
it "ensures the modifier is nil if not present" do
|
48
48
|
assert @geo = Paperclip::Geometry.parse("123x456")
|
49
49
|
assert_nil @geo.modifier
|
50
50
|
end
|
51
51
|
|
52
|
-
|
53
|
-
geo = Paperclip::Geometry.new(:
|
52
|
+
it "recognizes an EXIF orientation and not rotate with auto_orient if not necessary" do
|
53
|
+
geo = Paperclip::Geometry.new(width: 1024, height: 768, orientation: 1)
|
54
54
|
assert geo
|
55
55
|
assert_equal 1024, geo.width
|
56
56
|
assert_equal 768, geo.height
|
@@ -61,8 +61,8 @@ class GeometryTest < Test::Unit::TestCase
|
|
61
61
|
assert_equal 768, geo.height
|
62
62
|
end
|
63
63
|
|
64
|
-
|
65
|
-
geo = Paperclip::Geometry.new(:
|
64
|
+
it "recognizes an EXIF orientation and rotate with auto_orient if necessary" do
|
65
|
+
geo = Paperclip::Geometry.new(width: 1024, height: 768, orientation: 6)
|
66
66
|
assert geo
|
67
67
|
assert_equal 1024, geo.width
|
68
68
|
assert_equal 768, geo.height
|
@@ -73,7 +73,7 @@ class GeometryTest < Test::Unit::TestCase
|
|
73
73
|
assert_equal 1024, geo.height
|
74
74
|
end
|
75
75
|
|
76
|
-
|
76
|
+
it "treats x and X the same in geometries" do
|
77
77
|
@lower = Paperclip::Geometry.parse("123x456")
|
78
78
|
@upper = Paperclip::Geometry.parse("123X456")
|
79
79
|
assert_equal 123, @lower.width
|
@@ -83,48 +83,46 @@ class GeometryTest < Test::Unit::TestCase
|
|
83
83
|
end
|
84
84
|
|
85
85
|
['>', '<', '#', '@', '%', '^', '!', nil].each do |mod|
|
86
|
-
|
86
|
+
it "ensures the modifier #{description} is preserved" do
|
87
87
|
assert @geo = Paperclip::Geometry.parse("123x456#{mod}")
|
88
88
|
assert_equal mod, @geo.modifier
|
89
89
|
assert_equal "123x456#{mod}", @geo.to_s
|
90
90
|
end
|
91
|
-
end
|
92
91
|
|
93
|
-
|
94
|
-
should "ensure the modifier #{mod.inspect} is preserved with no height" do
|
92
|
+
it "ensures the modifier #{description} is preserved with no height" do
|
95
93
|
assert @geo = Paperclip::Geometry.parse("123x#{mod}")
|
96
94
|
assert_equal mod, @geo.modifier
|
97
95
|
assert_equal "123#{mod}", @geo.to_s
|
98
96
|
end
|
99
97
|
end
|
100
98
|
|
101
|
-
|
99
|
+
it "makes sure the modifier gets passed during transformation_to" do
|
102
100
|
assert @src = Paperclip::Geometry.parse("123x456")
|
103
101
|
assert @dst = Paperclip::Geometry.parse("123x456>")
|
104
102
|
assert_equal ["123x456>", nil], @src.transformation_to(@dst)
|
105
103
|
end
|
106
104
|
|
107
|
-
|
105
|
+
it "generates correct ImageMagick formatting string for W-formatted string" do
|
108
106
|
assert @geo = Paperclip::Geometry.parse("800")
|
109
107
|
assert_equal "800", @geo.to_s
|
110
108
|
end
|
111
109
|
|
112
|
-
|
110
|
+
it "generates correct ImageMagick formatting string for Wx-formatted string" do
|
113
111
|
assert @geo = Paperclip::Geometry.parse("800x")
|
114
112
|
assert_equal "800", @geo.to_s
|
115
113
|
end
|
116
114
|
|
117
|
-
|
115
|
+
it "generates correct ImageMagick formatting string for xH-formatted string" do
|
118
116
|
assert @geo = Paperclip::Geometry.parse("x600")
|
119
117
|
assert_equal "x600", @geo.to_s
|
120
118
|
end
|
121
119
|
|
122
|
-
|
120
|
+
it "generates correct ImageMagick formatting string for WxH-formatted string" do
|
123
121
|
assert @geo = Paperclip::Geometry.parse("800x600")
|
124
122
|
assert_equal "800x600", @geo.to_s
|
125
123
|
end
|
126
124
|
|
127
|
-
|
125
|
+
it "is generated from a file" do
|
128
126
|
file = fixture_file("5k.png")
|
129
127
|
file = File.new(file, 'rb')
|
130
128
|
assert_nothing_raised{ @geo = Paperclip::Geometry.from_file(file) }
|
@@ -132,14 +130,14 @@ class GeometryTest < Test::Unit::TestCase
|
|
132
130
|
assert_equal 434, @geo.width
|
133
131
|
end
|
134
132
|
|
135
|
-
|
133
|
+
it "is generated from a file path" do
|
136
134
|
file = fixture_file("5k.png")
|
137
135
|
assert_nothing_raised{ @geo = Paperclip::Geometry.from_file(file) }
|
138
136
|
assert_equal 66, @geo.height
|
139
137
|
assert_equal 434, @geo.width
|
140
138
|
end
|
141
139
|
|
142
|
-
|
140
|
+
it 'calculates an EXIF-rotated image dimensions from a path' do
|
143
141
|
file = fixture_file("rotated.jpg")
|
144
142
|
assert_nothing_raised{ @geo = Paperclip::Geometry.from_file(file) }
|
145
143
|
@geo.auto_orient
|
@@ -147,28 +145,28 @@ class GeometryTest < Test::Unit::TestCase
|
|
147
145
|
assert_equal 200, @geo.width
|
148
146
|
end
|
149
147
|
|
150
|
-
|
148
|
+
it "does not generate from a bad file" do
|
151
149
|
file = "/home/This File Does Not Exist.omg"
|
152
|
-
|
150
|
+
expect { @geo = Paperclip::Geometry.from_file(file) }.to raise_error(Paperclip::Errors::NotIdentifiedByImageMagickError)
|
153
151
|
end
|
154
152
|
|
155
|
-
|
153
|
+
it "does not generate from a blank filename" do
|
156
154
|
file = ""
|
157
|
-
|
155
|
+
expect { @geo = Paperclip::Geometry.from_file(file) }.to raise_error(Paperclip::Errors::NotIdentifiedByImageMagickError)
|
158
156
|
end
|
159
157
|
|
160
|
-
|
158
|
+
it "does not generate from a nil file" do
|
161
159
|
file = nil
|
162
|
-
|
160
|
+
expect { @geo = Paperclip::Geometry.from_file(file) }.to raise_error(Paperclip::Errors::NotIdentifiedByImageMagickError)
|
163
161
|
end
|
164
162
|
|
165
|
-
|
166
|
-
file = mock("file", :
|
163
|
+
it "does not generate from a file with no path" do
|
164
|
+
file = mock("file", path: "")
|
167
165
|
file.stubs(:respond_to?).with(:path).returns(true)
|
168
|
-
|
166
|
+
expect { @geo = Paperclip::Geometry.from_file(file) }.to raise_error(Paperclip::Errors::NotIdentifiedByImageMagickError)
|
169
167
|
end
|
170
168
|
|
171
|
-
|
169
|
+
it "lets us know when a command isn't found versus a processing error" do
|
172
170
|
old_path = ENV['PATH']
|
173
171
|
begin
|
174
172
|
ENV['PATH'] = ''
|
@@ -185,32 +183,32 @@ class GeometryTest < Test::Unit::TestCase
|
|
185
183
|
['horizontal', 1024, 768, false, true, false, 1024, 768, 1.3333],
|
186
184
|
['square', 100, 100, false, false, true, 100, 100, 1]].each do |args|
|
187
185
|
context "performing calculations on a #{args[0]} viewport" do
|
188
|
-
|
186
|
+
before do
|
189
187
|
@geo = Paperclip::Geometry.new(args[1], args[2])
|
190
188
|
end
|
191
189
|
|
192
|
-
|
190
|
+
it "is #{args[3] ? "" : "not"} vertical" do
|
193
191
|
assert_equal args[3], @geo.vertical?
|
194
192
|
end
|
195
193
|
|
196
|
-
|
194
|
+
it "is #{args[4] ? "" : "not"} horizontal" do
|
197
195
|
assert_equal args[4], @geo.horizontal?
|
198
196
|
end
|
199
197
|
|
200
|
-
|
198
|
+
it "is #{args[5] ? "" : "not"} square" do
|
201
199
|
assert_equal args[5], @geo.square?
|
202
200
|
end
|
203
201
|
|
204
|
-
|
202
|
+
it "reports that #{args[6]} is the larger dimension" do
|
205
203
|
assert_equal args[6], @geo.larger
|
206
204
|
end
|
207
205
|
|
208
|
-
|
206
|
+
it "reports that #{args[7]} is the smaller dimension" do
|
209
207
|
assert_equal args[7], @geo.smaller
|
210
208
|
end
|
211
209
|
|
212
|
-
|
213
|
-
|
210
|
+
it "has an aspect ratio of #{args[8]}" do
|
211
|
+
expect(@geo.aspect).to be_within(0.0001).of(args[8])
|
214
212
|
end
|
215
213
|
end
|
216
214
|
end
|
@@ -219,17 +217,17 @@ class GeometryTest < Test::Unit::TestCase
|
|
219
217
|
[ [100, 1000], [50, 950], "x950", "50x950+22+0" ],
|
220
218
|
[ [100, 1000], [50, 25], "50x", "50x25+0+237" ]]. each do |args|
|
221
219
|
context "of #{args[0].inspect} and given a Geometry #{args[1].inspect} and sent transform_to" do
|
222
|
-
|
220
|
+
before do
|
223
221
|
@geo = Paperclip::Geometry.new(*args[0])
|
224
222
|
@dst = Paperclip::Geometry.new(*args[1])
|
225
223
|
@scale, @crop = @geo.transformation_to @dst, true
|
226
224
|
end
|
227
225
|
|
228
|
-
|
226
|
+
it "is able to return the correct scaling transformation geometry #{args[2]}" do
|
229
227
|
assert_equal args[2], @scale
|
230
228
|
end
|
231
229
|
|
232
|
-
|
230
|
+
it "is able to return the correct crop transformation geometry #{args[3]}" do
|
233
231
|
assert_equal args[3], @crop
|
234
232
|
end
|
235
233
|
end
|
@@ -240,14 +238,14 @@ class GeometryTest < Test::Unit::TestCase
|
|
240
238
|
['600x400', {'512x512!' => [512, 512], '512x512#' => [512, 512], '512x512>' => [512, 341], '512x512<' => [600, 400], '512x512' => [512, 341]}]].each do |original_size, options|
|
241
239
|
options.each_pair do |size, dimensions|
|
242
240
|
context "#{original_size} resize_to #{size}" do
|
243
|
-
|
241
|
+
before do
|
244
242
|
@source = Paperclip::Geometry.parse original_size
|
245
243
|
@new_geometry = @source.resize_to size
|
246
244
|
end
|
247
|
-
|
245
|
+
it "has #{dimensions.first} width" do
|
248
246
|
assert_equal dimensions.first, @new_geometry.width
|
249
247
|
end
|
250
|
-
|
248
|
+
it "has #{dimensions.last} height" do
|
251
249
|
assert_equal dimensions.last, @new_geometry.height
|
252
250
|
end
|
253
251
|
end
|