paperclip 3.5.4 → 4.3.7

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.

Files changed (198) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -6
  3. data/.hound.yml +1066 -0
  4. data/.rubocop.yml +1 -0
  5. data/.travis.yml +11 -17
  6. data/Appraisals +6 -14
  7. data/CONTRIBUTING.md +13 -8
  8. data/Gemfile +16 -3
  9. data/LICENSE +1 -3
  10. data/NEWS +167 -49
  11. data/README.md +294 -75
  12. data/RELEASING.md +17 -0
  13. data/Rakefile +6 -8
  14. data/features/basic_integration.feature +24 -6
  15. data/features/step_definitions/attachment_steps.rb +30 -22
  16. data/features/step_definitions/html_steps.rb +2 -2
  17. data/features/step_definitions/rails_steps.rb +44 -14
  18. data/features/step_definitions/web_steps.rb +1 -103
  19. data/features/support/env.rb +2 -2
  20. data/features/support/file_helpers.rb +2 -2
  21. data/features/support/fixtures/gemfile.txt +1 -1
  22. data/features/support/rails.rb +2 -1
  23. data/gemfiles/3.2.gemfile +14 -6
  24. data/gemfiles/4.1.gemfile +19 -0
  25. data/gemfiles/4.2.gemfile +19 -0
  26. data/lib/generators/paperclip/paperclip_generator.rb +0 -2
  27. data/lib/generators/paperclip/templates/paperclip_migration.rb.erb +1 -1
  28. data/lib/paperclip/attachment.rb +132 -38
  29. data/lib/paperclip/attachment_registry.rb +1 -1
  30. data/lib/paperclip/callbacks.rb +11 -1
  31. data/lib/paperclip/content_type_detector.rb +25 -22
  32. data/lib/paperclip/deprecations.rb +42 -0
  33. data/lib/paperclip/errors.rb +5 -0
  34. data/lib/paperclip/file_command_content_type_detector.rb +6 -8
  35. data/lib/paperclip/geometry_detector_factory.rb +3 -1
  36. data/lib/paperclip/geometry_parser_factory.rb +1 -1
  37. data/lib/paperclip/has_attached_file.rb +10 -0
  38. data/lib/paperclip/interpolations/plural_cache.rb +6 -5
  39. data/lib/paperclip/interpolations.rb +25 -12
  40. data/lib/paperclip/io_adapters/abstract_adapter.rb +3 -1
  41. data/lib/paperclip/io_adapters/attachment_adapter.rb +4 -4
  42. data/lib/paperclip/io_adapters/data_uri_adapter.rb +5 -10
  43. data/lib/paperclip/io_adapters/stringio_adapter.rb +6 -10
  44. data/lib/paperclip/io_adapters/uri_adapter.rb +30 -11
  45. data/lib/paperclip/locales/de.yml +18 -0
  46. data/lib/paperclip/locales/en.yml +1 -0
  47. data/lib/paperclip/locales/es.yml +18 -0
  48. data/lib/paperclip/locales/ja.yml +18 -0
  49. data/lib/paperclip/locales/pt-BR.yml +18 -0
  50. data/lib/paperclip/locales/zh-CN.yml +18 -0
  51. data/lib/paperclip/locales/zh-HK.yml +18 -0
  52. data/lib/paperclip/locales/zh-TW.yml +18 -0
  53. data/lib/paperclip/matchers/have_attached_file_matcher.rb +2 -1
  54. data/lib/paperclip/matchers/validate_attachment_presence_matcher.rb +2 -1
  55. data/lib/paperclip/matchers/validate_attachment_size_matcher.rb +2 -1
  56. data/lib/paperclip/media_type_spoof_detector.rb +89 -0
  57. data/lib/paperclip/processor.rb +0 -37
  58. data/lib/paperclip/processor_helpers.rb +50 -0
  59. data/lib/paperclip/rails_environment.rb +25 -0
  60. data/lib/paperclip/schema.rb +10 -2
  61. data/lib/paperclip/storage/filesystem.rb +1 -1
  62. data/lib/paperclip/storage/fog.rb +18 -7
  63. data/lib/paperclip/storage/s3.rb +53 -22
  64. data/lib/paperclip/style.rb +8 -2
  65. data/lib/paperclip/tempfile_factory.rb +5 -1
  66. data/lib/paperclip/thumbnail.rb +12 -10
  67. data/lib/paperclip/url_generator.rb +11 -3
  68. data/lib/paperclip/validators/attachment_content_type_validator.rb +4 -0
  69. data/lib/paperclip/validators/attachment_file_name_validator.rb +80 -0
  70. data/lib/paperclip/validators/attachment_file_type_ignorance_validator.rb +29 -0
  71. data/lib/paperclip/validators/attachment_presence_validator.rb +4 -0
  72. data/lib/paperclip/validators/attachment_size_validator.rb +11 -3
  73. data/lib/paperclip/validators/media_type_spoof_detection_validator.rb +27 -0
  74. data/lib/paperclip/validators.rb +10 -3
  75. data/lib/paperclip/version.rb +1 -1
  76. data/lib/paperclip.rb +26 -8
  77. data/lib/tasks/paperclip.rake +17 -2
  78. data/paperclip.gemspec +16 -14
  79. data/shoulda_macros/paperclip.rb +0 -1
  80. data/spec/paperclip/attachment_definitions_spec.rb +13 -0
  81. data/{test/attachment_processing_test.rb → spec/paperclip/attachment_processing_spec.rb} +20 -21
  82. data/spec/paperclip/attachment_registry_spec.rb +130 -0
  83. data/{test/attachment_test.rb → spec/paperclip/attachment_spec.rb} +438 -397
  84. data/{test/content_type_detector_test.rb → spec/paperclip/content_type_detector_spec.rb} +16 -19
  85. data/spec/paperclip/deprecations_spec.rb +65 -0
  86. data/{test/file_command_content_type_detector_test.rb → spec/paperclip/file_command_content_type_detector_spec.rb} +5 -6
  87. data/spec/paperclip/filename_cleaner_spec.rb +14 -0
  88. data/spec/paperclip/geometry_detector_spec.rb +39 -0
  89. data/{test/geometry_parser_test.rb → spec/paperclip/geometry_parser_spec.rb} +27 -27
  90. data/{test/geometry_test.rb → spec/paperclip/geometry_spec.rb} +50 -52
  91. data/spec/paperclip/glue_spec.rb +44 -0
  92. data/{test/has_attached_file_test.rb → spec/paperclip/has_attached_file_spec.rb} +45 -28
  93. data/{test/integration_test.rb → spec/paperclip/integration_spec.rb} +134 -126
  94. data/{test/interpolations_test.rb → spec/paperclip/interpolations_spec.rb} +70 -46
  95. data/spec/paperclip/io_adapters/abstract_adapter_spec.rb +78 -0
  96. data/{test/io_adapters/attachment_adapter_test.rb → spec/paperclip/io_adapters/attachment_adapter_spec.rb} +27 -29
  97. data/{test/io_adapters/data_uri_adapter_test.rb → spec/paperclip/io_adapters/data_uri_adapter_spec.rb} +26 -17
  98. data/spec/paperclip/io_adapters/empty_string_adapter_spec.rb +17 -0
  99. data/{test/io_adapters/file_adapter_test.rb → spec/paperclip/io_adapters/file_adapter_spec.rb} +36 -40
  100. data/{test/io_adapters/http_url_proxy_adapter_test.rb → spec/paperclip/io_adapters/http_url_proxy_adapter_spec.rb} +31 -29
  101. data/spec/paperclip/io_adapters/identity_adapter_spec.rb +8 -0
  102. data/{test/io_adapters/nil_adapter_test.rb → spec/paperclip/io_adapters/nil_adapter_spec.rb} +7 -7
  103. data/{test/io_adapters/registry_test.rb → spec/paperclip/io_adapters/registry_spec.rb} +10 -7
  104. data/{test/io_adapters/stringio_adapter_test.rb → spec/paperclip/io_adapters/stringio_adapter_spec.rb} +20 -17
  105. data/{test/io_adapters/uploaded_file_adapter_test.rb → spec/paperclip/io_adapters/uploaded_file_adapter_spec.rb} +41 -41
  106. data/{test/io_adapters/uri_adapter_test.rb → spec/paperclip/io_adapters/uri_adapter_spec.rb} +53 -28
  107. data/spec/paperclip/matchers/have_attached_file_matcher_spec.rb +19 -0
  108. data/spec/paperclip/matchers/validate_attachment_content_type_matcher_spec.rb +99 -0
  109. data/spec/paperclip/matchers/validate_attachment_presence_matcher_spec.rb +69 -0
  110. data/spec/paperclip/matchers/validate_attachment_size_matcher_spec.rb +88 -0
  111. data/spec/paperclip/media_type_spoof_detector_spec.rb +79 -0
  112. data/spec/paperclip/meta_class_spec.rb +30 -0
  113. data/spec/paperclip/paperclip_missing_attachment_styles_spec.rb +84 -0
  114. data/{test/paperclip_test.rb → spec/paperclip/paperclip_spec.rb} +53 -48
  115. data/spec/paperclip/plural_cache_spec.rb +37 -0
  116. data/spec/paperclip/processor_helpers_spec.rb +57 -0
  117. data/{test/processor_test.rb → spec/paperclip/processor_spec.rb} +5 -5
  118. data/spec/paperclip/rails_environment_spec.rb +33 -0
  119. data/{test/rake_test.rb → spec/paperclip/rake_spec.rb} +15 -15
  120. data/spec/paperclip/schema_spec.rb +248 -0
  121. data/{test/storage/filesystem_test.rb → spec/paperclip/storage/filesystem_spec.rb} +18 -18
  122. data/spec/paperclip/storage/fog_spec.rb +535 -0
  123. data/spec/paperclip/storage/s3_live_spec.rb +182 -0
  124. data/spec/paperclip/storage/s3_spec.rb +1526 -0
  125. data/spec/paperclip/style_spec.rb +255 -0
  126. data/spec/paperclip/tempfile_factory_spec.rb +33 -0
  127. data/{test/thumbnail_test.rb → spec/paperclip/thumbnail_spec.rb} +123 -107
  128. data/spec/paperclip/url_generator_spec.rb +211 -0
  129. data/spec/paperclip/validators/attachment_content_type_validator_spec.rb +322 -0
  130. data/spec/paperclip/validators/attachment_file_name_validator_spec.rb +160 -0
  131. data/{test/validators/attachment_presence_validator_test.rb → spec/paperclip/validators/attachment_presence_validator_spec.rb} +20 -20
  132. data/{test/validators/attachment_size_validator_test.rb → spec/paperclip/validators/attachment_size_validator_spec.rb} +65 -58
  133. data/spec/paperclip/validators/media_type_spoof_detection_validator_spec.rb +52 -0
  134. data/spec/paperclip/validators_spec.rb +164 -0
  135. data/spec/spec_helper.rb +43 -0
  136. data/spec/support/assertions.rb +71 -0
  137. data/spec/support/deprecations.rb +9 -0
  138. data/spec/support/fake_model.rb +25 -0
  139. data/spec/support/fake_rails.rb +12 -0
  140. data/spec/support/fixtures/empty.html +1 -0
  141. data/spec/support/fixtures/empty.xlsx +0 -0
  142. data/spec/support/fixtures/spaced file.jpg +0 -0
  143. data/spec/support/matchers/accept.rb +5 -0
  144. data/spec/support/matchers/exist.rb +5 -0
  145. data/spec/support/matchers/have_column.rb +23 -0
  146. data/spec/support/model_reconstruction.rb +60 -0
  147. data/spec/support/rails_helpers.rb +7 -0
  148. data/spec/support/test_data.rb +13 -0
  149. data/spec/support/version_helper.rb +9 -0
  150. metadata +334 -219
  151. data/RUNNING_TESTS.md +0 -4
  152. data/gemfiles/3.0.gemfile +0 -11
  153. data/gemfiles/3.1.gemfile +0 -11
  154. data/gemfiles/4.0.gemfile +0 -11
  155. data/test/attachment_definitions_test.rb +0 -12
  156. data/test/attachment_registry_test.rb +0 -88
  157. data/test/filename_cleaner_test.rb +0 -14
  158. data/test/generator_test.rb +0 -84
  159. data/test/geometry_detector_test.rb +0 -24
  160. data/test/helper.rb +0 -232
  161. data/test/io_adapters/abstract_adapter_test.rb +0 -58
  162. data/test/io_adapters/empty_string_adapter_test.rb +0 -18
  163. data/test/io_adapters/identity_adapter_test.rb +0 -8
  164. data/test/matchers/have_attached_file_matcher_test.rb +0 -24
  165. data/test/matchers/validate_attachment_content_type_matcher_test.rb +0 -110
  166. data/test/matchers/validate_attachment_presence_matcher_test.rb +0 -69
  167. data/test/matchers/validate_attachment_size_matcher_test.rb +0 -86
  168. data/test/meta_class_test.rb +0 -32
  169. data/test/paperclip_missing_attachment_styles_test.rb +0 -90
  170. data/test/plural_cache_test.rb +0 -36
  171. data/test/schema_test.rb +0 -200
  172. data/test/storage/fog_test.rb +0 -473
  173. data/test/storage/s3_live_test.rb +0 -179
  174. data/test/storage/s3_test.rb +0 -1356
  175. data/test/style_test.rb +0 -213
  176. data/test/support/mock_model.rb +0 -2
  177. data/test/tempfile_factory_test.rb +0 -17
  178. data/test/url_generator_test.rb +0 -187
  179. data/test/validators/attachment_content_type_validator_test.rb +0 -324
  180. data/test/validators_test.rb +0 -61
  181. /data/{test → spec}/database.yml +0 -0
  182. /data/{test → spec/support}/fixtures/12k.png +0 -0
  183. /data/{test → spec/support}/fixtures/50x50.png +0 -0
  184. /data/{test → spec/support}/fixtures/5k.png +0 -0
  185. /data/{test → spec/support}/fixtures/animated +0 -0
  186. /data/{test → spec/support}/fixtures/animated.gif +0 -0
  187. /data/{test → spec/support}/fixtures/animated.unknown +0 -0
  188. /data/{test → spec/support}/fixtures/bad.png +0 -0
  189. /data/{test → spec/support}/fixtures/fog.yml +0 -0
  190. /data/{test → spec/support}/fixtures/rotated.jpg +0 -0
  191. /data/{test → spec/support}/fixtures/s3.yml +0 -0
  192. /data/{test → spec/support}/fixtures/spaced file.png +0 -0
  193. /data/{test → spec/support}/fixtures/text.txt +0 -0
  194. /data/{test → spec/support}/fixtures/twopage.pdf +0 -0
  195. /data/{test → spec/support}/fixtures/uppercase.PNG +0 -0
  196. /data/{test → spec}/support/mock_attachment.rb +0 -0
  197. /data/{test → spec}/support/mock_interpolator.rb +0 -0
  198. /data/{test → spec}/support/mock_url_generator_builder.rb +0 -0
@@ -1,53 +1,57 @@
1
- require './test/helper'
1
+ require 'spec_helper'
2
2
 
3
- class FileAdapterTest < Test::Unit::TestCase
3
+ describe Paperclip::FileAdapter do
4
4
  context "a new instance" do
5
5
  context "with normal file" do
6
- setup do
6
+ before do
7
7
  @file = File.new(fixture_file("5k.png"))
8
8
  @file.binmode
9
9
  end
10
10
 
11
- teardown do
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
- setup do
17
+ before do
18
18
  @subject = Paperclip.io_adapters.for(@file)
19
19
  end
20
20
 
21
- should "get the right filename" do
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
- should "force binmode on tempfile" do
29
+ it "forces binmode on tempfile" do
26
30
  assert @subject.instance_variable_get("@tempfile").binmode?
27
31
  end
28
32
 
29
- should "get the content type" do
33
+ it "gets the content type" do
30
34
  assert_equal "image/png", @subject.content_type
31
35
  end
32
36
 
33
- should "return content type as a string" do
34
- assert_kind_of String, @subject.content_type
37
+ it "returns content type as a string" do
38
+ expect(@subject.content_type).to be_a String
35
39
  end
36
40
 
37
- should "get the file's size" do
41
+ it "gets the file's size" do
38
42
  assert_equal 4456, @subject.size
39
43
  end
40
44
 
41
- should "return false for a call to nil?" do
45
+ it "returns false for a call to nil?" do
42
46
  assert ! @subject.nil?
43
47
  end
44
48
 
45
- should "generate a MD5 hash of the contents" do
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
- should "read the contents of the file" do
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,46 +59,38 @@ class FileAdapterTest < Test::Unit::TestCase
55
59
  end
56
60
 
57
61
  context "file with multiple possible content type" do
58
- setup do
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
- should "prefer officially registered mime type" do
67
+ it "prefers officially registered mime type" do
64
68
  assert_equal "image/png", @subject.content_type
65
69
  end
66
70
 
67
- should "return content type as a string" do
68
- assert_kind_of String, @subject.content_type
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
- context "file with multiple possible x-types but no official type" do
73
- setup do
74
- MIME::Types.stubs(:type_for).returns([MIME::Type.new('image/x-mp4'), MIME::Type.new('image/x-video')])
75
- @subject = Paperclip.io_adapters.for(@file)
76
- end
77
-
78
- should "return the first" do
79
- assert_equal "image/x-mp4", @subject.content_type
80
- end
81
- end
82
-
83
- context "file with content type derived from file command on *nix" do
84
- setup do
76
+ context "file with content type derived from file contents on *nix" do
77
+ before do
85
78
  MIME::Types.stubs(:type_for).returns([])
86
79
  Paperclip.stubs(:run).returns("application/vnd.ms-office\n")
80
+ Paperclip::ContentTypeDetector.any_instance
81
+ .stubs(:type_from_mime_magic).returns("application/vnd.ms-office")
82
+
87
83
  @subject = Paperclip.io_adapters.for(@file)
88
84
  end
89
85
 
90
- should "return content type without newline character" do
86
+ it "returns content type without newline character" do
91
87
  assert_equal "application/vnd.ms-office", @subject.content_type
92
88
  end
93
89
  end
94
90
  end
95
91
 
96
92
  context "filename with restricted characters" do
97
- setup do
93
+ before do
98
94
  @file = File.open(fixture_file("animated.gif")) do |file|
99
95
  StringIO.new(file.read)
100
96
  end
@@ -102,32 +98,32 @@ class FileAdapterTest < Test::Unit::TestCase
102
98
  @subject = Paperclip.io_adapters.for(@file)
103
99
  end
104
100
 
105
- teardown do
101
+ after do
106
102
  @file.close
107
103
  @subject.close
108
104
  end
109
105
 
110
- should "not generate filenames that include restricted characters" do
106
+ it "does not generate filenames that include restricted characters" do
111
107
  assert_equal 'image_restricted.gif', @subject.original_filename
112
108
  end
113
109
 
114
- should "not generate paths that include restricted characters" do
115
- assert_no_match /:/, @subject.path
110
+ it "does not generate paths that include restricted characters" do
111
+ expect(@subject.path).to_not match(/:/)
116
112
  end
117
113
  end
118
114
 
119
115
  context "empty file" do
120
- setup do
116
+ before do
121
117
  @file = Tempfile.new("file_adapter_test")
122
118
  @subject = Paperclip.io_adapters.for(@file)
123
119
  end
124
120
 
125
- teardown do
121
+ after do
126
122
  @file.close
127
123
  @subject.close
128
124
  end
129
125
 
130
- should "provide correct mime-type" do
126
+ it "provides correct mime-type" do
131
127
  assert_match %r{.*/x-empty}, @subject.content_type
132
128
  end
133
129
  end
@@ -1,101 +1,103 @@
1
- require './test/helper'
1
+ require 'spec_helper'
2
+
3
+ describe Paperclip::HttpUrlProxyAdapter do
4
+ before do
5
+ @open_return = StringIO.new("xxx")
6
+ @open_return.stubs(:content_type).returns("image/png")
7
+ @open_return.stubs(:meta).returns({})
8
+ Paperclip::HttpUrlProxyAdapter.any_instance.
9
+ stubs(:download_content).returns(@open_return)
10
+ end
2
11
 
3
- class HttpUrlProxyAdapterTest < Test::Unit::TestCase
4
12
  context "a new instance" do
5
- setup do
6
- @open_return = StringIO.new("xxx")
7
- @open_return.stubs(:content_type).returns("image/png")
8
- Paperclip::HttpUrlProxyAdapter.any_instance.stubs(:download_content).returns(@open_return)
13
+ before do
9
14
  @url = "http://thoughtbot.com/images/thoughtbot-logo.png"
10
15
  @subject = Paperclip.io_adapters.for(@url)
11
16
  end
12
17
 
13
- teardown do
18
+ after do
14
19
  @subject.close
15
20
  end
16
21
 
17
- should "return a file name" do
22
+ it "returns a file name" do
18
23
  assert_equal "thoughtbot-logo.png", @subject.original_filename
19
24
  end
20
25
 
21
- should 'close open handle after reading' do
26
+ it 'closes open handle after reading' do
22
27
  assert_equal true, @open_return.closed?
23
28
  end
24
29
 
25
- should "return a content type" do
30
+ it "returns a content type" do
26
31
  assert_equal "image/png", @subject.content_type
27
32
  end
28
33
 
29
- should "return the size of the data" do
34
+ it "returns the size of the data" do
30
35
  assert_equal @open_return.size, @subject.size
31
36
  end
32
37
 
33
- should "generate an MD5 hash of the contents" do
38
+ it "generates an MD5 hash of the contents" do
34
39
  assert_equal Digest::MD5.hexdigest("xxx"), @subject.fingerprint
35
40
  end
36
41
 
37
- should "generate correct fingerprint after read" do
42
+ it "generates correct fingerprint after read" do
38
43
  fingerprint = Digest::MD5.hexdigest(@subject.read)
39
44
  assert_equal fingerprint, @subject.fingerprint
40
45
  end
41
46
 
42
- should "generate same fingerprint" do
47
+ it "generates same fingerprint" do
43
48
  assert_equal @subject.fingerprint, @subject.fingerprint
44
49
  end
45
50
 
46
- should "return the data contained in the StringIO" do
51
+ it "returns the data contained in the StringIO" do
47
52
  assert_equal "xxx", @subject.read
48
53
  end
49
54
 
50
- should 'accept a content_type' do
55
+ it 'accepts a content_type' do
51
56
  @subject.content_type = 'image/png'
52
57
  assert_equal 'image/png', @subject.content_type
53
58
  end
54
59
 
55
- should 'accept an original_filename' do
60
+ it 'accepts an original_filename' do
56
61
  @subject.original_filename = 'image.png'
57
62
  assert_equal 'image.png', @subject.original_filename
58
63
  end
59
64
  end
60
65
 
61
66
  context "a url with query params" do
62
- setup do
63
- Paperclip::HttpUrlProxyAdapter.any_instance.stubs(:download_content).returns(StringIO.new("x"))
67
+ before do
64
68
  @url = "https://github.com/thoughtbot/paperclip?file=test"
65
69
  @subject = Paperclip.io_adapters.for(@url)
66
70
  end
67
71
 
68
- teardown do
72
+ after do
69
73
  @subject.close
70
74
  end
71
75
 
72
- should "return a file name" do
76
+ it "returns a file name" do
73
77
  assert_equal "paperclip", @subject.original_filename
74
78
  end
75
79
  end
76
80
 
77
81
  context "a url with restricted characters in the filename" do
78
- setup do
79
- Paperclip::HttpUrlProxyAdapter.any_instance.stubs(:download_content).returns(StringIO.new("x"))
82
+ before do
80
83
  @url = "https://github.com/thoughtbot/paper:clip.jpg"
81
84
  @subject = Paperclip.io_adapters.for(@url)
82
85
  end
83
86
 
84
- teardown do
87
+ after do
85
88
  begin
86
89
  @subject.close
87
- rescue Exception => e
88
- binding.pry
90
+ rescue Exception
89
91
  true
90
92
  end
91
93
  end
92
94
 
93
- should "not generate filenames that include restricted characters" do
95
+ it "does not generate filenames that include restricted characters" do
94
96
  assert_equal "paper_clip.jpg", @subject.original_filename
95
97
  end
96
98
 
97
- should "not generate paths that include restricted characters" do
98
- assert_no_match /:/, @subject.path
99
+ it "does not generate paths that include restricted characters" do
100
+ expect(@subject.path).to_not match(/:/)
99
101
  end
100
102
  end
101
103
 
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ describe Paperclip::IdentityAdapter do
4
+ it "responds to #new by returning the argument" do
5
+ adapter = Paperclip::IdentityAdapter.new
6
+ assert_equal :target, adapter.new(:target)
7
+ end
8
+ end
@@ -1,24 +1,24 @@
1
- require './test/helper'
1
+ require 'spec_helper'
2
2
 
3
- class NilAdapterTest < Test::Unit::TestCase
3
+ describe Paperclip::NilAdapter do
4
4
  context 'a new instance' do
5
- setup do
5
+ before do
6
6
  @subject = Paperclip.io_adapters.for(nil)
7
7
  end
8
8
 
9
- should "get the right filename" do
9
+ it "gets the right filename" do
10
10
  assert_equal "", @subject.original_filename
11
11
  end
12
12
 
13
- should "get the content type" do
13
+ it "gets the content type" do
14
14
  assert_equal "", @subject.content_type
15
15
  end
16
16
 
17
- should "get the file's size" do
17
+ it "gets the file's size" do
18
18
  assert_equal 0, @subject.size
19
19
  end
20
20
 
21
- should "return true for a call to nil?" do
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 './test/helper'
1
+ require 'spec_helper'
2
2
 
3
- class AdapterRegistryTest < Test::Unit::TestCase
3
+ describe Paperclip::AttachmentRegistry do
4
4
  context "for" do
5
- setup do
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
- should "return the class registered for the adapted type" do
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
- setup do
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
- should "return true when the class of this adapter has been registered" do
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
- should "return false when the adapter has not been registered" do
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
@@ -1,61 +1,64 @@
1
- require './test/helper'
1
+ require 'spec_helper'
2
2
 
3
- class StringioFileProxyTest < Test::Unit::TestCase
3
+ describe Paperclip::StringioAdapter do
4
4
  context "a new instance" do
5
- setup do
5
+ before do
6
6
  @contents = "abc123"
7
7
  @stringio = StringIO.new(@contents)
8
8
  @subject = Paperclip.io_adapters.for(@stringio)
9
9
  end
10
10
 
11
- should "return a file name" do
12
- assert_equal "stringio.txt", @subject.original_filename
11
+ it "returns a file name" do
12
+ assert_equal "data", @subject.original_filename
13
13
  end
14
14
 
15
- should "return a content type" do
15
+ it "returns a content type" do
16
16
  assert_equal "text/plain", @subject.content_type
17
17
  end
18
18
 
19
- should "return the size of the data" do
19
+ it "returns the size of the data" do
20
20
  assert_equal 6, @subject.size
21
21
  end
22
22
 
23
- should "generate an MD5 hash of the contents" do
23
+ it "returns the length of the data" do
24
+ assert_equal 6, @subject.length
25
+ end
26
+
27
+ it "generates an MD5 hash of the contents" do
24
28
  assert_equal Digest::MD5.hexdigest(@contents), @subject.fingerprint
25
29
  end
26
30
 
27
- should "generate correct fingerprint after read" do
31
+ it "generates correct fingerprint after read" do
28
32
  fingerprint = Digest::MD5.hexdigest(@subject.read)
29
33
  assert_equal fingerprint, @subject.fingerprint
30
34
  end
31
35
 
32
- should "generate same fingerprint" do
36
+ it "generates same fingerprint" do
33
37
  assert_equal @subject.fingerprint, @subject.fingerprint
34
38
  end
35
39
 
36
- should "return the data contained in the StringIO" do
40
+ it "returns the data contained in the StringIO" do
37
41
  assert_equal "abc123", @subject.read
38
42
  end
39
43
 
40
- should 'accept a content_type' do
44
+ it 'accepts a content_type' do
41
45
  @subject.content_type = 'image/png'
42
46
  assert_equal 'image/png', @subject.content_type
43
47
  end
44
48
 
45
- should 'accept an original_filename' do
49
+ it 'accepts an original_filename' do
46
50
  @subject.original_filename = 'image.png'
47
51
  assert_equal 'image.png', @subject.original_filename
48
52
  end
49
53
 
50
- should "not generate filenames that include restricted characters" do
54
+ it "does not generate filenames that include restricted characters" do
51
55
  @subject.original_filename = 'image:restricted.png'
52
56
  assert_equal 'image_restricted.png', @subject.original_filename
53
57
  end
54
58
 
55
- should "not generate paths that include restricted characters" do
59
+ it "does not generate paths that include restricted characters" do
56
60
  @subject.original_filename = 'image:restricted.png'
57
- assert_no_match /:/, @subject.path
61
+ expect(@subject.path).to_not match(/:/)
58
62
  end
59
-
60
63
  end
61
64
  end
@@ -1,9 +1,9 @@
1
- require './test/helper'
1
+ require 'spec_helper'
2
2
 
3
- class UploadedFileAdapterTest < Test::Unit::TestCase
3
+ describe Paperclip::UploadedFileAdapter do
4
4
  context "a new instance" do
5
5
  context "with UploadedFile responding to #tempfile" do
6
- setup do
6
+ before do
7
7
  Paperclip::UploadedFileAdapter.content_type_detector = nil
8
8
 
9
9
  class UploadedFile < OpenStruct; end
@@ -11,41 +11,41 @@ class UploadedFileAdapterTest < Test::Unit::TestCase
11
11
  tempfile.binmode
12
12
 
13
13
  @file = UploadedFile.new(
14
- :original_filename => "5k.png",
15
- :content_type => "image/x-png-by-browser\r",
16
- :head => "",
17
- :tempfile => tempfile,
18
- :path => tempfile.path
14
+ original_filename: "5k.png",
15
+ content_type: "image/x-png-by-browser\r",
16
+ head: "",
17
+ tempfile: tempfile,
18
+ path: tempfile.path
19
19
  )
20
20
  @subject = Paperclip.io_adapters.for(@file)
21
21
  end
22
22
 
23
- should "get the right filename" do
23
+ it "gets the right filename" do
24
24
  assert_equal "5k.png", @subject.original_filename
25
25
  end
26
26
 
27
- should "force binmode on tempfile" do
27
+ it "forces binmode on tempfile" do
28
28
  assert @subject.instance_variable_get("@tempfile").binmode?
29
29
  end
30
30
 
31
- should "get the content type" do
31
+ it "gets the content type" do
32
32
  assert_equal "image/x-png-by-browser", @subject.content_type
33
33
  end
34
34
 
35
- should "get the file's size" do
35
+ it "gets the file's size" do
36
36
  assert_equal 4456, @subject.size
37
37
  end
38
38
 
39
- should "return false for a call to nil?" do
39
+ it "returns false for a call to nil?" do
40
40
  assert ! @subject.nil?
41
41
  end
42
42
 
43
- should "generate a MD5 hash of the contents" do
43
+ it "generates a MD5 hash of the contents" do
44
44
  expected = Digest::MD5.file(@file.tempfile.path).to_s
45
45
  assert_equal expected, @subject.fingerprint
46
46
  end
47
47
 
48
- should "read the contents of the file" do
48
+ it "reads the contents of the file" do
49
49
  expected = @file.tempfile.read
50
50
  assert expected.length > 0
51
51
  assert_equal expected, @subject.read
@@ -53,68 +53,68 @@ class UploadedFileAdapterTest < Test::Unit::TestCase
53
53
  end
54
54
 
55
55
  context "with UploadedFile that has restricted characters" do
56
- setup do
56
+ before do
57
57
  Paperclip::UploadedFileAdapter.content_type_detector = nil
58
58
 
59
59
  class UploadedFile < OpenStruct; end
60
60
  @file = UploadedFile.new(
61
- :original_filename => "image:restricted.gif",
62
- :content_type => "image/x-png-by-browser",
63
- :head => "",
64
- :path => fixture_file("5k.png")
61
+ original_filename: "image:restricted.gif",
62
+ content_type: "image/x-png-by-browser",
63
+ head: "",
64
+ path: fixture_file("5k.png")
65
65
  )
66
66
  @subject = Paperclip.io_adapters.for(@file)
67
67
  end
68
68
 
69
- should "not generate paths that include restricted characters" do
70
- assert_no_match /:/, @subject.path
69
+ it "does not generate paths that include restricted characters" do
70
+ expect(@subject.path).to_not match(/:/)
71
71
  end
72
72
 
73
- should "not generate filenames that include restricted characters" do
73
+ it "does not generate filenames that include restricted characters" do
74
74
  assert_equal 'image_restricted.gif', @subject.original_filename
75
75
  end
76
76
  end
77
77
 
78
78
  context "with UploadFile responding to #path" do
79
- setup do
79
+ before do
80
80
  Paperclip::UploadedFileAdapter.content_type_detector = nil
81
81
 
82
82
  class UploadedFile < OpenStruct; end
83
83
  @file = UploadedFile.new(
84
- :original_filename => "5k.png",
85
- :content_type => "image/x-png-by-browser",
86
- :head => "",
87
- :path => fixture_file("5k.png")
84
+ original_filename: "5k.png",
85
+ content_type: "image/x-png-by-browser",
86
+ head: "",
87
+ path: fixture_file("5k.png")
88
88
  )
89
89
  @subject = Paperclip.io_adapters.for(@file)
90
90
  end
91
91
 
92
- should "get the right filename" do
92
+ it "gets the right filename" do
93
93
  assert_equal "5k.png", @subject.original_filename
94
94
  end
95
95
 
96
- should "force binmode on tempfile" do
96
+ it "forces binmode on tempfile" do
97
97
  assert @subject.instance_variable_get("@tempfile").binmode?
98
98
  end
99
99
 
100
- should "get the content type" do
100
+ it "gets the content type" do
101
101
  assert_equal "image/x-png-by-browser", @subject.content_type
102
102
  end
103
103
 
104
- should "get the file's size" do
104
+ it "gets the file's size" do
105
105
  assert_equal 4456, @subject.size
106
106
  end
107
107
 
108
- should "return false for a call to nil?" do
108
+ it "returns false for a call to nil?" do
109
109
  assert ! @subject.nil?
110
110
  end
111
111
 
112
- should "generate a MD5 hash of the contents" do
112
+ it "generates a MD5 hash of the contents" do
113
113
  expected = Digest::MD5.file(@file.path).to_s
114
114
  assert_equal expected, @subject.fingerprint
115
115
  end
116
116
 
117
- should "read the contents of the file" do
117
+ it "reads the contents of the file" do
118
118
  expected_file = File.new(@file.path)
119
119
  expected_file.binmode
120
120
  expected = expected_file.read
@@ -123,21 +123,21 @@ class UploadedFileAdapterTest < Test::Unit::TestCase
123
123
  end
124
124
 
125
125
  context "don't trust client-given MIME type" do
126
- setup do
126
+ before do
127
127
  Paperclip::UploadedFileAdapter.content_type_detector =
128
128
  Paperclip::FileCommandContentTypeDetector
129
129
 
130
130
  class UploadedFile < OpenStruct; end
131
131
  @file = UploadedFile.new(
132
- :original_filename => "5k.png",
133
- :content_type => "image/x-png-by-browser",
134
- :head => "",
135
- :path => fixture_file("5k.png")
132
+ original_filename: "5k.png",
133
+ content_type: "image/x-png-by-browser",
134
+ head: "",
135
+ path: fixture_file("5k.png")
136
136
  )
137
137
  @subject = Paperclip.io_adapters.for(@file)
138
138
  end
139
139
 
140
- should "get the content type" do
140
+ it "gets the content type" do
141
141
  assert_equal "image/png", @subject.content_type
142
142
  end
143
143
  end