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,70 +1,74 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
def teardown
|
3
|
+
describe Paperclip::DataUriAdapter do
|
4
|
+
after do
|
6
5
|
if @subject
|
7
6
|
@subject.close
|
8
7
|
end
|
9
8
|
end
|
10
9
|
|
11
|
-
|
10
|
+
it 'allows a missing mime-type' do
|
12
11
|
adapter = Paperclip.io_adapters.for("data:;base64,#{original_base64_content}")
|
13
12
|
assert_equal Paperclip::DataUriAdapter, adapter.class
|
14
13
|
end
|
15
14
|
|
15
|
+
it 'alows mime type that has dot in it' do
|
16
|
+
adapter = Paperclip.io_adapters.for("data:image/vnd.microsoft.icon;base64,#{original_base64_content}")
|
17
|
+
assert_equal Paperclip::DataUriAdapter, adapter.class
|
18
|
+
end
|
19
|
+
|
16
20
|
context "a new instance" do
|
17
|
-
|
21
|
+
before do
|
18
22
|
@contents = "data:image/png;base64,#{original_base64_content}"
|
19
23
|
@subject = Paperclip.io_adapters.for(@contents)
|
20
24
|
end
|
21
25
|
|
22
|
-
|
23
|
-
assert_equal "data
|
26
|
+
it "returns a nondescript file name" do
|
27
|
+
assert_equal "data", @subject.original_filename
|
24
28
|
end
|
25
29
|
|
26
|
-
|
30
|
+
it "returns a content type" do
|
27
31
|
assert_equal "image/png", @subject.content_type
|
28
32
|
end
|
29
33
|
|
30
|
-
|
34
|
+
it "returns the size of the data" do
|
31
35
|
assert_equal 4456, @subject.size
|
32
36
|
end
|
33
37
|
|
34
|
-
|
38
|
+
it "generates a correct MD5 hash of the contents" do
|
35
39
|
assert_equal(
|
36
40
|
Digest::MD5.hexdigest(Base64.decode64(original_base64_content)),
|
37
41
|
@subject.fingerprint
|
38
42
|
)
|
39
43
|
end
|
40
44
|
|
41
|
-
|
45
|
+
it "generates correct fingerprint after read" do
|
42
46
|
fingerprint = Digest::MD5.hexdigest(@subject.read)
|
43
47
|
assert_equal fingerprint, @subject.fingerprint
|
44
48
|
end
|
45
49
|
|
46
|
-
|
50
|
+
it "generates same fingerprint" do
|
47
51
|
assert_equal @subject.fingerprint, @subject.fingerprint
|
48
52
|
end
|
49
53
|
|
50
|
-
|
54
|
+
it 'accepts a content_type' do
|
51
55
|
@subject.content_type = 'image/png'
|
52
56
|
assert_equal 'image/png', @subject.content_type
|
53
57
|
end
|
54
58
|
|
55
|
-
|
59
|
+
it 'accepts an original_filename' do
|
56
60
|
@subject.original_filename = 'image.png'
|
57
61
|
assert_equal 'image.png', @subject.original_filename
|
58
62
|
end
|
59
63
|
|
60
|
-
|
64
|
+
it "does not generate filenames that include restricted characters" do
|
61
65
|
@subject.original_filename = 'image:restricted.png'
|
62
66
|
assert_equal 'image_restricted.png', @subject.original_filename
|
63
67
|
end
|
64
68
|
|
65
|
-
|
69
|
+
it "does not generate paths that include restricted characters" do
|
66
70
|
@subject.original_filename = 'image:restricted.png'
|
67
|
-
|
71
|
+
expect(@subject.path).to_not match(/:/)
|
68
72
|
end
|
69
73
|
|
70
74
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Paperclip::EmptyStringAdapter do
|
4
|
+
context 'a new instance' do
|
5
|
+
before do
|
6
|
+
@subject = Paperclip.io_adapters.for('')
|
7
|
+
end
|
8
|
+
|
9
|
+
it "returns false for a call to nil?" do
|
10
|
+
assert !@subject.nil?
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'returns false for a call to assignment?' do
|
14
|
+
assert !@subject.assignment?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/{test/io_adapters/file_adapter_test.rb → spec/paperclip/io_adapters/file_adapter_spec.rb}
RENAMED
@@ -1,53 +1,57 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
|
3
|
+
describe Paperclip::FileAdapter do
|
4
4
|
context "a new instance" do
|
5
5
|
context "with normal file" do
|
6
|
-
|
6
|
+
before do
|
7
7
|
@file = File.new(fixture_file("5k.png"))
|
8
8
|
@file.binmode
|
9
9
|
end
|
10
10
|
|
11
|
-
|
11
|
+
after do
|
12
12
|
@file.close
|
13
13
|
@subject.close if @subject
|
14
14
|
end
|
15
15
|
|
16
16
|
context 'doing normal things' do
|
17
|
-
|
17
|
+
before do
|
18
18
|
@subject = Paperclip.io_adapters.for(@file)
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
it 'uses the original filename to generate the tempfile' do
|
22
|
+
assert @subject.path.ends_with?(".png")
|
23
|
+
end
|
24
|
+
|
25
|
+
it "gets the right filename" do
|
22
26
|
assert_equal "5k.png", @subject.original_filename
|
23
27
|
end
|
24
28
|
|
25
|
-
|
29
|
+
it "forces binmode on tempfile" do
|
26
30
|
assert @subject.instance_variable_get("@tempfile").binmode?
|
27
31
|
end
|
28
32
|
|
29
|
-
|
33
|
+
it "gets the content type" do
|
30
34
|
assert_equal "image/png", @subject.content_type
|
31
35
|
end
|
32
36
|
|
33
|
-
|
34
|
-
|
37
|
+
it "returns content type as a string" do
|
38
|
+
expect(@subject.content_type).to be_a String
|
35
39
|
end
|
36
40
|
|
37
|
-
|
41
|
+
it "gets the file's size" do
|
38
42
|
assert_equal 4456, @subject.size
|
39
43
|
end
|
40
44
|
|
41
|
-
|
45
|
+
it "returns false for a call to nil?" do
|
42
46
|
assert ! @subject.nil?
|
43
47
|
end
|
44
48
|
|
45
|
-
|
49
|
+
it "generates a MD5 hash of the contents" do
|
46
50
|
expected = Digest::MD5.file(@file.path).to_s
|
47
51
|
assert_equal expected, @subject.fingerprint
|
48
52
|
end
|
49
53
|
|
50
|
-
|
54
|
+
it "reads the contents of the file" do
|
51
55
|
expected = @file.read
|
52
56
|
assert expected.length > 0
|
53
57
|
assert_equal expected, @subject.read
|
@@ -55,35 +59,35 @@ class FileAdapterTest < Test::Unit::TestCase
|
|
55
59
|
end
|
56
60
|
|
57
61
|
context "file with multiple possible content type" do
|
58
|
-
|
62
|
+
before do
|
59
63
|
MIME::Types.stubs(:type_for).returns([MIME::Type.new('image/x-png'), MIME::Type.new('image/png')])
|
60
64
|
@subject = Paperclip.io_adapters.for(@file)
|
61
65
|
end
|
62
66
|
|
63
|
-
|
67
|
+
it "prefers officially registered mime type" do
|
64
68
|
assert_equal "image/png", @subject.content_type
|
65
69
|
end
|
66
70
|
|
67
|
-
|
68
|
-
|
71
|
+
it "returns content type as a string" do
|
72
|
+
expect(@subject.content_type).to be_a String
|
69
73
|
end
|
70
74
|
end
|
71
75
|
|
72
76
|
context "file with content type derived from file command on *nix" do
|
73
|
-
|
77
|
+
before do
|
74
78
|
MIME::Types.stubs(:type_for).returns([])
|
75
79
|
Paperclip.stubs(:run).returns("application/vnd.ms-office\n")
|
76
80
|
@subject = Paperclip.io_adapters.for(@file)
|
77
81
|
end
|
78
82
|
|
79
|
-
|
83
|
+
it "returns content type without newline character" do
|
80
84
|
assert_equal "application/vnd.ms-office", @subject.content_type
|
81
85
|
end
|
82
86
|
end
|
83
87
|
end
|
84
88
|
|
85
89
|
context "filename with restricted characters" do
|
86
|
-
|
90
|
+
before do
|
87
91
|
@file = File.open(fixture_file("animated.gif")) do |file|
|
88
92
|
StringIO.new(file.read)
|
89
93
|
end
|
@@ -91,32 +95,32 @@ class FileAdapterTest < Test::Unit::TestCase
|
|
91
95
|
@subject = Paperclip.io_adapters.for(@file)
|
92
96
|
end
|
93
97
|
|
94
|
-
|
98
|
+
after do
|
95
99
|
@file.close
|
96
100
|
@subject.close
|
97
101
|
end
|
98
102
|
|
99
|
-
|
103
|
+
it "does not generate filenames that include restricted characters" do
|
100
104
|
assert_equal 'image_restricted.gif', @subject.original_filename
|
101
105
|
end
|
102
106
|
|
103
|
-
|
104
|
-
|
107
|
+
it "does not generate paths that include restricted characters" do
|
108
|
+
expect(@subject.path).to_not match(/:/)
|
105
109
|
end
|
106
110
|
end
|
107
111
|
|
108
112
|
context "empty file" do
|
109
|
-
|
113
|
+
before do
|
110
114
|
@file = Tempfile.new("file_adapter_test")
|
111
115
|
@subject = Paperclip.io_adapters.for(@file)
|
112
116
|
end
|
113
117
|
|
114
|
-
|
118
|
+
after do
|
115
119
|
@file.close
|
116
120
|
@subject.close
|
117
121
|
end
|
118
122
|
|
119
|
-
|
123
|
+
it "provides correct mime-type" do
|
120
124
|
assert_match %r{.*/x-empty}, @subject.content_type
|
121
125
|
end
|
122
126
|
end
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
|
3
|
+
describe Paperclip::HttpUrlProxyAdapter do
|
4
4
|
context "a new instance" do
|
5
|
-
|
5
|
+
before do
|
6
6
|
@open_return = StringIO.new("xxx")
|
7
7
|
@open_return.stubs(:content_type).returns("image/png")
|
8
8
|
Paperclip::HttpUrlProxyAdapter.any_instance.stubs(:download_content).returns(@open_return)
|
@@ -10,78 +10,78 @@ class HttpUrlProxyAdapterTest < Test::Unit::TestCase
|
|
10
10
|
@subject = Paperclip.io_adapters.for(@url)
|
11
11
|
end
|
12
12
|
|
13
|
-
|
13
|
+
after do
|
14
14
|
@subject.close
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
it "returns a file name" do
|
18
18
|
assert_equal "thoughtbot-logo.png", @subject.original_filename
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
it 'closes open handle after reading' do
|
22
22
|
assert_equal true, @open_return.closed?
|
23
23
|
end
|
24
24
|
|
25
|
-
|
25
|
+
it "returns a content type" do
|
26
26
|
assert_equal "image/png", @subject.content_type
|
27
27
|
end
|
28
28
|
|
29
|
-
|
29
|
+
it "returns the size of the data" do
|
30
30
|
assert_equal @open_return.size, @subject.size
|
31
31
|
end
|
32
32
|
|
33
|
-
|
33
|
+
it "generates an MD5 hash of the contents" do
|
34
34
|
assert_equal Digest::MD5.hexdigest("xxx"), @subject.fingerprint
|
35
35
|
end
|
36
36
|
|
37
|
-
|
37
|
+
it "generates correct fingerprint after read" do
|
38
38
|
fingerprint = Digest::MD5.hexdigest(@subject.read)
|
39
39
|
assert_equal fingerprint, @subject.fingerprint
|
40
40
|
end
|
41
41
|
|
42
|
-
|
42
|
+
it "generates same fingerprint" do
|
43
43
|
assert_equal @subject.fingerprint, @subject.fingerprint
|
44
44
|
end
|
45
45
|
|
46
|
-
|
46
|
+
it "returns the data contained in the StringIO" do
|
47
47
|
assert_equal "xxx", @subject.read
|
48
48
|
end
|
49
49
|
|
50
|
-
|
50
|
+
it 'accepts a content_type' do
|
51
51
|
@subject.content_type = 'image/png'
|
52
52
|
assert_equal 'image/png', @subject.content_type
|
53
53
|
end
|
54
54
|
|
55
|
-
|
55
|
+
it 'accepts an original_filename' do
|
56
56
|
@subject.original_filename = 'image.png'
|
57
57
|
assert_equal 'image.png', @subject.original_filename
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
61
|
context "a url with query params" do
|
62
|
-
|
62
|
+
before do
|
63
63
|
Paperclip::HttpUrlProxyAdapter.any_instance.stubs(:download_content).returns(StringIO.new("x"))
|
64
64
|
@url = "https://github.com/thoughtbot/paperclip?file=test"
|
65
65
|
@subject = Paperclip.io_adapters.for(@url)
|
66
66
|
end
|
67
67
|
|
68
|
-
|
68
|
+
after do
|
69
69
|
@subject.close
|
70
70
|
end
|
71
71
|
|
72
|
-
|
72
|
+
it "returns a file name" do
|
73
73
|
assert_equal "paperclip", @subject.original_filename
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
77
|
context "a url with restricted characters in the filename" do
|
78
|
-
|
78
|
+
before do
|
79
79
|
Paperclip::HttpUrlProxyAdapter.any_instance.stubs(:download_content).returns(StringIO.new("x"))
|
80
80
|
@url = "https://github.com/thoughtbot/paper:clip.jpg"
|
81
81
|
@subject = Paperclip.io_adapters.for(@url)
|
82
82
|
end
|
83
83
|
|
84
|
-
|
84
|
+
after do
|
85
85
|
begin
|
86
86
|
@subject.close
|
87
87
|
rescue Exception
|
@@ -89,12 +89,12 @@ class HttpUrlProxyAdapterTest < Test::Unit::TestCase
|
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
-
|
92
|
+
it "does not generate filenames that include restricted characters" do
|
93
93
|
assert_equal "paper_clip.jpg", @subject.original_filename
|
94
94
|
end
|
95
95
|
|
96
|
-
|
97
|
-
|
96
|
+
it "does not generate paths that include restricted characters" do
|
97
|
+
expect(@subject.path).to_not match(/:/)
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
data/{test/io_adapters/nil_adapter_test.rb → spec/paperclip/io_adapters/nil_adapter_spec.rb}
RENAMED
@@ -1,24 +1,24 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
|
3
|
+
describe Paperclip::NilAdapter do
|
4
4
|
context 'a new instance' do
|
5
|
-
|
5
|
+
before do
|
6
6
|
@subject = Paperclip.io_adapters.for(nil)
|
7
7
|
end
|
8
8
|
|
9
|
-
|
9
|
+
it "gets the right filename" do
|
10
10
|
assert_equal "", @subject.original_filename
|
11
11
|
end
|
12
12
|
|
13
|
-
|
13
|
+
it "gets the content type" do
|
14
14
|
assert_equal "", @subject.content_type
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
it "gets the file's size" do
|
18
18
|
assert_equal 0, @subject.size
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
it "returns true for a call to nil?" do
|
22
22
|
assert @subject.nil?
|
23
23
|
end
|
24
24
|
end
|
@@ -1,31 +1,34 @@
|
|
1
|
-
require '
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
|
3
|
+
describe Paperclip::AttachmentRegistry do
|
4
4
|
context "for" do
|
5
|
-
|
5
|
+
before do
|
6
6
|
class AdapterTest
|
7
7
|
def initialize(target); end
|
8
8
|
end
|
9
9
|
@subject = Paperclip::AdapterRegistry.new
|
10
10
|
@subject.register(AdapterTest){|t| Symbol === t }
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
|
+
it "returns the class registered for the adapted type" do
|
13
14
|
assert_equal AdapterTest, @subject.for(:target).class
|
14
15
|
end
|
15
16
|
end
|
16
17
|
|
17
18
|
context "registered?" do
|
18
|
-
|
19
|
+
before do
|
19
20
|
class AdapterTest
|
20
21
|
def initialize(target); end
|
21
22
|
end
|
22
23
|
@subject = Paperclip::AdapterRegistry.new
|
23
24
|
@subject.register(AdapterTest){|t| Symbol === t }
|
24
25
|
end
|
25
|
-
|
26
|
+
|
27
|
+
it "returns true when the class of this adapter has been registered" do
|
26
28
|
assert @subject.registered?(AdapterTest.new(:target))
|
27
29
|
end
|
28
|
-
|
30
|
+
|
31
|
+
it "returns false when the adapter has not been registered" do
|
29
32
|
assert ! @subject.registered?(Object)
|
30
33
|
end
|
31
34
|
end
|