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.

Files changed (152) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -6
  3. data/.travis.yml +4 -13
  4. data/Appraisals +0 -10
  5. data/CONTRIBUTING.md +10 -5
  6. data/Gemfile +8 -4
  7. data/NEWS +1 -1
  8. data/README.md +51 -10
  9. data/Rakefile +6 -8
  10. data/features/basic_integration.feature +5 -5
  11. data/features/step_definitions/attachment_steps.rb +4 -4
  12. data/features/step_definitions/rails_steps.rb +4 -4
  13. data/features/step_definitions/web_steps.rb +2 -2
  14. data/features/support/env.rb +2 -2
  15. data/features/support/fixtures/gemfile.txt +1 -1
  16. data/features/support/rails.rb +2 -1
  17. data/gemfiles/3.2.gemfile +5 -3
  18. data/gemfiles/4.0.gemfile +5 -3
  19. data/gemfiles/4.1.gemfile +5 -3
  20. data/lib/generators/paperclip/paperclip_generator.rb +0 -2
  21. data/lib/generators/paperclip/templates/paperclip_migration.rb.erb +1 -1
  22. data/lib/paperclip.rb +4 -1
  23. data/lib/paperclip/attachment.rb +90 -29
  24. data/lib/paperclip/content_type_detector.rb +1 -1
  25. data/lib/paperclip/geometry_detector_factory.rb +3 -1
  26. data/lib/paperclip/has_attached_file.rb +2 -1
  27. data/lib/paperclip/interpolations.rb +8 -0
  28. data/lib/paperclip/io_adapters/abstract_adapter.rb +1 -1
  29. data/lib/paperclip/io_adapters/data_uri_adapter.rb +1 -1
  30. data/lib/paperclip/io_adapters/stringio_adapter.rb +5 -11
  31. data/lib/paperclip/locales/de.yml +18 -0
  32. data/lib/paperclip/locales/es.yml +18 -0
  33. data/lib/paperclip/matchers/have_attached_file_matcher.rb +2 -1
  34. data/lib/paperclip/matchers/validate_attachment_presence_matcher.rb +2 -1
  35. data/lib/paperclip/matchers/validate_attachment_size_matcher.rb +2 -1
  36. data/lib/paperclip/media_type_spoof_detector.rb +10 -2
  37. data/lib/paperclip/storage/filesystem.rb +1 -1
  38. data/lib/paperclip/storage/s3.rb +26 -4
  39. data/lib/paperclip/style.rb +1 -1
  40. data/lib/paperclip/thumbnail.rb +6 -6
  41. data/lib/paperclip/validators.rb +5 -3
  42. data/lib/paperclip/validators/attachment_size_validator.rb +7 -3
  43. data/lib/paperclip/version.rb +1 -1
  44. data/lib/tasks/paperclip.rake +1 -2
  45. data/paperclip.gemspec +5 -3
  46. data/shoulda_macros/paperclip.rb +0 -1
  47. data/{test → spec}/database.yml +0 -0
  48. data/spec/paperclip/attachment_definitions_spec.rb +13 -0
  49. data/{test/attachment_processing_test.rb → spec/paperclip/attachment_processing_spec.rb} +20 -21
  50. data/{test/attachment_registry_test.rb → spec/paperclip/attachment_registry_spec.rb} +10 -11
  51. data/{test/attachment_test.rb → spec/paperclip/attachment_spec.rb} +367 -360
  52. data/{test/content_type_detector_test.rb → spec/paperclip/content_type_detector_spec.rb} +8 -8
  53. data/{test/file_command_content_type_detector_test.rb → spec/paperclip/file_command_content_type_detector_spec.rb} +5 -5
  54. data/spec/paperclip/filename_cleaner_spec.rb +14 -0
  55. data/spec/paperclip/geometry_detector_spec.rb +39 -0
  56. data/{test/geometry_parser_test.rb → spec/paperclip/geometry_parser_spec.rb} +27 -27
  57. data/{test/geometry_test.rb → spec/paperclip/geometry_spec.rb} +49 -51
  58. data/{test/has_attached_file_test.rb → spec/paperclip/has_attached_file_spec.rb} +18 -27
  59. data/{test/integration_test.rb → spec/paperclip/integration_spec.rb} +134 -126
  60. data/{test/interpolations_test.rb → spec/paperclip/interpolations_spec.rb} +54 -40
  61. data/{test/io_adapters/abstract_adapter_test.rb → spec/paperclip/io_adapters/abstract_adapter_spec.rb} +21 -10
  62. data/{test/io_adapters/attachment_adapter_test.rb → spec/paperclip/io_adapters/attachment_adapter_spec.rb} +27 -29
  63. data/{test/io_adapters/data_uri_adapter_test.rb → spec/paperclip/io_adapters/data_uri_adapter_spec.rb} +22 -18
  64. data/spec/paperclip/io_adapters/empty_string_adapter_spec.rb +17 -0
  65. data/{test/io_adapters/file_adapter_test.rb → spec/paperclip/io_adapters/file_adapter_spec.rb} +32 -28
  66. data/{test/io_adapters/http_url_proxy_adapter_test.rb → spec/paperclip/io_adapters/http_url_proxy_adapter_spec.rb} +22 -22
  67. data/spec/paperclip/io_adapters/identity_adapter_spec.rb +8 -0
  68. data/{test/io_adapters/nil_adapter_test.rb → spec/paperclip/io_adapters/nil_adapter_spec.rb} +7 -7
  69. data/{test/io_adapters/registry_test.rb → spec/paperclip/io_adapters/registry_spec.rb} +10 -7
  70. data/{test/io_adapters/stringio_adapter_test.rb → spec/paperclip/io_adapters/stringio_adapter_spec.rb} +16 -17
  71. data/{test/io_adapters/uploaded_file_adapter_test.rb → spec/paperclip/io_adapters/uploaded_file_adapter_spec.rb} +41 -41
  72. data/{test/io_adapters/uri_adapter_test.rb → spec/paperclip/io_adapters/uri_adapter_spec.rb} +22 -22
  73. data/spec/paperclip/matchers/have_attached_file_matcher_spec.rb +19 -0
  74. data/spec/paperclip/matchers/validate_attachment_content_type_matcher_spec.rb +99 -0
  75. data/spec/paperclip/matchers/validate_attachment_presence_matcher_spec.rb +69 -0
  76. data/spec/paperclip/matchers/validate_attachment_size_matcher_spec.rb +88 -0
  77. data/{test/media_type_spoof_detector_test.rb → spec/paperclip/media_type_spoof_detector_spec.rb} +13 -8
  78. data/spec/paperclip/meta_class_spec.rb +30 -0
  79. data/spec/paperclip/paperclip_missing_attachment_styles_spec.rb +84 -0
  80. data/{test/paperclip_test.rb → spec/paperclip/paperclip_spec.rb} +47 -47
  81. data/{test/plural_cache_test.rb → spec/paperclip/plural_cache_spec.rb} +6 -6
  82. data/{test/processor_test.rb → spec/paperclip/processor_spec.rb} +5 -5
  83. data/{test/rake_test.rb → spec/paperclip/rake_spec.rb} +15 -15
  84. data/spec/paperclip/schema_spec.rb +206 -0
  85. data/{test/storage/filesystem_test.rb → spec/paperclip/storage/filesystem_spec.rb} +18 -18
  86. data/{test/storage/fog_test.rb → spec/paperclip/storage/fog_spec.rb} +145 -140
  87. data/spec/paperclip/storage/s3_live_spec.rb +182 -0
  88. data/spec/paperclip/storage/s3_spec.rb +1475 -0
  89. data/spec/paperclip/style_spec.rb +255 -0
  90. data/spec/paperclip/tempfile_factory_spec.rb +29 -0
  91. data/{test/thumbnail_test.rb → spec/paperclip/thumbnail_spec.rb} +107 -107
  92. data/{test/url_generator_test.rb → spec/paperclip/url_generator_spec.rb} +55 -56
  93. data/spec/paperclip/validators/attachment_content_type_validator_spec.rb +322 -0
  94. data/spec/paperclip/validators/attachment_file_name_validator_spec.rb +160 -0
  95. data/{test/validators/attachment_presence_validator_test.rb → spec/paperclip/validators/attachment_presence_validator_spec.rb} +19 -19
  96. data/{test/validators/attachment_size_validator_test.rb → spec/paperclip/validators/attachment_size_validator_spec.rb} +65 -58
  97. data/{test/validators/media_type_spoof_detection_validator_test.rb → spec/paperclip/validators/media_type_spoof_detection_validator_spec.rb} +8 -8
  98. data/spec/paperclip/validators_spec.rb +164 -0
  99. data/spec/spec_helper.rb +40 -0
  100. data/spec/support/assertions.rb +71 -0
  101. data/spec/support/fake_model.rb +21 -0
  102. data/spec/support/fake_rails.rb +12 -0
  103. data/{test → spec/support}/fixtures/12k.png +0 -0
  104. data/{test → spec/support}/fixtures/50x50.png +0 -0
  105. data/{test → spec/support}/fixtures/5k.png +0 -0
  106. data/{test → spec/support}/fixtures/animated +0 -0
  107. data/{test → spec/support}/fixtures/animated.gif +0 -0
  108. data/{test → spec/support}/fixtures/animated.unknown +0 -0
  109. data/{test → spec/support}/fixtures/bad.png +0 -0
  110. data/{test → spec/support}/fixtures/empty.html +0 -0
  111. data/{test → spec/support}/fixtures/fog.yml +0 -0
  112. data/{test → spec/support}/fixtures/rotated.jpg +0 -0
  113. data/{test → spec/support}/fixtures/s3.yml +0 -0
  114. data/spec/support/fixtures/spaced file.jpg +0 -0
  115. data/test/fixtures/spaced file.png b/data/spec/support/fixtures/spaced → file.png +0 -0
  116. data/{test → spec/support}/fixtures/text.txt +0 -0
  117. data/{test → spec/support}/fixtures/twopage.pdf +0 -0
  118. data/{test → spec/support}/fixtures/uppercase.PNG +0 -0
  119. data/spec/support/matchers/accept.rb +5 -0
  120. data/spec/support/matchers/exist.rb +5 -0
  121. data/{test → spec}/support/mock_attachment.rb +0 -0
  122. data/{test → spec}/support/mock_interpolator.rb +0 -0
  123. data/{test → spec}/support/mock_model.rb +0 -0
  124. data/{test → spec}/support/mock_url_generator_builder.rb +0 -0
  125. data/spec/support/model_reconstruction.rb +60 -0
  126. data/spec/support/rails_helpers.rb +7 -0
  127. data/spec/support/test_data.rb +13 -0
  128. data/spec/support/version_helper.rb +9 -0
  129. metadata +256 -210
  130. data/gemfiles/3.0.gemfile +0 -11
  131. data/gemfiles/3.1.gemfile +0 -11
  132. data/test/attachment_definitions_test.rb +0 -13
  133. data/test/filename_cleaner_test.rb +0 -14
  134. data/test/generator_test.rb +0 -84
  135. data/test/geometry_detector_test.rb +0 -24
  136. data/test/helper.rb +0 -239
  137. data/test/io_adapters/empty_string_adapter_test.rb +0 -18
  138. data/test/io_adapters/identity_adapter_test.rb +0 -8
  139. data/test/matchers/have_attached_file_matcher_test.rb +0 -25
  140. data/test/matchers/validate_attachment_content_type_matcher_test.rb +0 -111
  141. data/test/matchers/validate_attachment_presence_matcher_test.rb +0 -70
  142. data/test/matchers/validate_attachment_size_matcher_test.rb +0 -87
  143. data/test/meta_class_test.rb +0 -32
  144. data/test/paperclip_missing_attachment_styles_test.rb +0 -90
  145. data/test/schema_test.rb +0 -206
  146. data/test/storage/s3_live_test.rb +0 -179
  147. data/test/storage/s3_test.rb +0 -1357
  148. data/test/style_test.rb +0 -251
  149. data/test/tempfile_factory_test.rb +0 -29
  150. data/test/validators/attachment_content_type_validator_test.rb +0 -324
  151. data/test/validators/attachment_file_name_validator_test.rb +0 -162
  152. data/test/validators_test.rb +0 -101
@@ -0,0 +1,255 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe Paperclip::Style do
5
+ context "A style rule" do
6
+ before do
7
+ @attachment = attachment path: ":basename.:extension",
8
+ styles: { foo: {geometry: "100x100#", format: :png} },
9
+ whiny: true
10
+ @style = @attachment.styles[:foo]
11
+ end
12
+
13
+ it "is held as a Style object" do
14
+ expect(@style).to be_a Paperclip::Style
15
+ end
16
+
17
+ it "gets processors from the attachment definition" do
18
+ assert_equal [:thumbnail], @style.processors
19
+ end
20
+
21
+ it "has the right geometry" do
22
+ assert_equal "100x100#", @style.geometry
23
+ end
24
+
25
+ it "is whiny if the attachment is" do
26
+ assert @style.whiny?
27
+ end
28
+
29
+ it "responds to hash notation" do
30
+ assert_equal [:thumbnail], @style[:processors]
31
+ assert_equal "100x100#", @style[:geometry]
32
+ end
33
+
34
+ it "returns the name of the style in processor options" do
35
+ assert_equal :foo, @style.processor_options[:style]
36
+ end
37
+ end
38
+
39
+ context "A style rule with properties supplied as procs" do
40
+ before do
41
+ @attachment = attachment path: ":basename.:extension",
42
+ whiny_thumbnails: true,
43
+ processors: lambda {|a| [:test]},
44
+ styles: {
45
+ foo: lambda{|a| "300x300#"},
46
+ bar: {
47
+ geometry: lambda{|a| "300x300#"},
48
+ convert_options: lambda{|a| "-do_stuff"},
49
+ source_file_options: lambda{|a| "-do_extra_stuff"}
50
+ }
51
+ }
52
+ end
53
+
54
+ it "calls procs when they are needed" do
55
+ assert_equal "300x300#", @attachment.styles[:foo].geometry
56
+ assert_equal "300x300#", @attachment.styles[:bar].geometry
57
+ assert_equal [:test], @attachment.styles[:foo].processors
58
+ assert_equal [:test], @attachment.styles[:bar].processors
59
+ assert_equal "-do_stuff", @attachment.styles[:bar].convert_options
60
+ assert_equal "-do_extra_stuff", @attachment.styles[:bar].source_file_options
61
+ end
62
+ end
63
+
64
+ context "An attachment with style rules in various forms" do
65
+ before do
66
+ styles = {}
67
+ styles[:aslist] = ["100x100", :png]
68
+ styles[:ashash] = {geometry: "100x100", format: :png}
69
+ styles[:asstring] = "100x100"
70
+ @attachment = attachment path: ":basename.:extension",
71
+ styles: styles
72
+ end
73
+
74
+ it "has the right number of styles" do
75
+ expect(@attachment.styles).to be_a Hash
76
+ assert_equal 3, @attachment.styles.size
77
+ end
78
+
79
+ it "has styles as Style objects" do
80
+ [:aslist, :ashash, :aslist].each do |s|
81
+ expect(@attachment.styles[s]).to be_a Paperclip::Style
82
+ end
83
+ end
84
+
85
+ it "has the right geometries" do
86
+ [:aslist, :ashash, :aslist].each do |s|
87
+ assert_equal @attachment.styles[s].geometry, "100x100"
88
+ end
89
+ end
90
+
91
+ it "has the right formats" do
92
+ assert_equal @attachment.styles[:aslist].format, :png
93
+ assert_equal @attachment.styles[:ashash].format, :png
94
+ assert_nil @attachment.styles[:asstring].format
95
+ end
96
+
97
+ it "retains order" do
98
+ assert_equal [:aslist, :ashash, :asstring], @attachment.styles.keys
99
+ end
100
+ end
101
+
102
+ context "An attachment with :convert_options" do
103
+ it "does not have called extra_options_for(:thumb/:large) on initialization" do
104
+ @attachment = attachment path: ":basename.:extension",
105
+ styles: {thumb: "100x100", large: "400x400"},
106
+ convert_options: {all: "-do_stuff", thumb: "-thumbnailize"}
107
+ @attachment.expects(:extra_options_for).never
108
+ @style = @attachment.styles[:thumb]
109
+ end
110
+
111
+ it "calls extra_options_for(:thumb/:large) when convert options are requested" do
112
+ @attachment = attachment path: ":basename.:extension",
113
+ styles: {thumb: "100x100", large: "400x400"},
114
+ convert_options: {all: "-do_stuff", thumb: "-thumbnailize"}
115
+ @style = @attachment.styles[:thumb]
116
+ @file = StringIO.new("...")
117
+ @file.stubs(:original_filename).returns("file.jpg")
118
+
119
+ @attachment.expects(:extra_options_for).with(:thumb)
120
+ @attachment.styles[:thumb].convert_options
121
+ end
122
+ end
123
+
124
+ context "An attachment with :source_file_options" do
125
+ it "does not have called extra_source_file_options_for(:thumb/:large) on initialization" do
126
+ @attachment = attachment path: ":basename.:extension",
127
+ styles: {thumb: "100x100", large: "400x400"},
128
+ source_file_options: {all: "-density 400", thumb: "-depth 8"}
129
+ @attachment.expects(:extra_source_file_options_for).never
130
+ @style = @attachment.styles[:thumb]
131
+ end
132
+
133
+ it "calls extra_options_for(:thumb/:large) when convert options are requested" do
134
+ @attachment = attachment path: ":basename.:extension",
135
+ styles: {thumb: "100x100", large: "400x400"},
136
+ source_file_options: {all: "-density 400", thumb: "-depth 8"}
137
+ @style = @attachment.styles[:thumb]
138
+ @file = StringIO.new("...")
139
+ @file.stubs(:original_filename).returns("file.jpg")
140
+
141
+ @attachment.expects(:extra_source_file_options_for).with(:thumb)
142
+ @attachment.styles[:thumb].source_file_options
143
+ end
144
+ end
145
+
146
+ context "A style rule with its own :processors" do
147
+ before do
148
+ @attachment = attachment path: ":basename.:extension",
149
+ styles: {
150
+ foo: {
151
+ geometry: "100x100#",
152
+ format: :png,
153
+ processors: [:test]
154
+ }
155
+ },
156
+ processors: [:thumbnail]
157
+ @style = @attachment.styles[:foo]
158
+ end
159
+
160
+ it "does not get processors from the attachment" do
161
+ @attachment.expects(:processors).never
162
+ assert_not_equal [:thumbnail], @style.processors
163
+ end
164
+
165
+ it "reports its own processors" do
166
+ assert_equal [:test], @style.processors
167
+ end
168
+
169
+ end
170
+
171
+ context "A style rule with :processors supplied as procs" do
172
+ before do
173
+ @attachment = attachment path: ":basename.:extension",
174
+ styles: {
175
+ foo: {
176
+ geometry: "100x100#",
177
+ format: :png,
178
+ processors: lambda{|a| [:test]}
179
+ }
180
+ },
181
+ processors: [:thumbnail]
182
+ end
183
+
184
+ it "defers processing of procs until they are needed" do
185
+ expect(@attachment.styles[:foo].instance_variable_get("@processors")).to be_a Proc
186
+ end
187
+
188
+ it "calls procs when they are needed" do
189
+ assert_equal [:test], @attachment.styles[:foo].processors
190
+ end
191
+ end
192
+
193
+ context "An attachment with :convert_options and :source_file_options in :styles" do
194
+ before do
195
+ @attachment = attachment path: ":basename.:extension",
196
+ styles: {
197
+ thumb: "100x100",
198
+ large: {geometry: "400x400",
199
+ convert_options: "-do_stuff",
200
+ source_file_options: "-do_extra_stuff"
201
+ }
202
+ }
203
+ @file = StringIO.new("...")
204
+ @file.stubs(:original_filename).returns("file.jpg")
205
+ end
206
+
207
+ it "has empty options for :thumb style" do
208
+ assert_equal "", @attachment.styles[:thumb].processor_options[:convert_options]
209
+ assert_equal "", @attachment.styles[:thumb].processor_options[:source_file_options]
210
+ end
211
+
212
+ it "has the right options for :large style" do
213
+ assert_equal "-do_stuff", @attachment.styles[:large].processor_options[:convert_options]
214
+ assert_equal "-do_extra_stuff", @attachment.styles[:large].processor_options[:source_file_options]
215
+ end
216
+ end
217
+
218
+ context "A style rule supplied with default format" do
219
+ before do
220
+ @attachment = attachment default_format: :png,
221
+ styles: {
222
+ asstring: "300x300#",
223
+ aslist: ["300x300#", :jpg],
224
+ ashash: {
225
+ geometry: "300x300#",
226
+ convert_options: "-do_stuff"
227
+ }
228
+ }
229
+ end
230
+
231
+ it "has the right number of styles" do
232
+ expect(@attachment.styles).to be_a Hash
233
+ assert_equal 3, @attachment.styles.size
234
+ end
235
+
236
+ it "has styles as Style objects" do
237
+ [:aslist, :ashash, :aslist].each do |s|
238
+ expect(@attachment.styles[s]).to be_a Paperclip::Style
239
+ end
240
+ end
241
+
242
+ it "has the right geometries" do
243
+ [:aslist, :ashash, :aslist].each do |s|
244
+ assert_equal @attachment.styles[s].geometry, "300x300#"
245
+ end
246
+ end
247
+
248
+ it "has the right formats" do
249
+ assert_equal @attachment.styles[:aslist].format, :jpg
250
+ assert_equal @attachment.styles[:ashash].format, :png
251
+ assert_equal @attachment.styles[:asstring].format, :png
252
+ end
253
+
254
+ end
255
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe Paperclip::TempfileFactory do
4
+ it "is able to generate a tempfile with the right name" do
5
+ file = subject.generate("omg.png")
6
+ assert File.extname(file.path), "png"
7
+ end
8
+
9
+ it "is able to generate a tempfile with the right name with a tilde at the beginning" do
10
+ file = subject.generate("~omg.png")
11
+ assert File.extname(file.path), "png"
12
+ end
13
+
14
+ it "is able to generate a tempfile with the right name with a tilde at the end" do
15
+ file = subject.generate("omg.png~")
16
+ assert File.extname(file.path), "png"
17
+ end
18
+
19
+ it "is able to generate a tempfile from a file with a really long name" do
20
+ filename = "#{"longfilename" * 100}.png"
21
+ file = subject.generate(filename)
22
+ assert File.extname(file.path), "png"
23
+ end
24
+
25
+ it 'is able to take nothing as a parameter and not error' do
26
+ file = subject.generate
27
+ assert File.exist?(file.path)
28
+ end
29
+ end
@@ -1,70 +1,70 @@
1
- require './test/helper'
2
-
3
- class ThumbnailTest < Test::Unit::TestCase
1
+ require 'spec_helper'
4
2
 
3
+ describe Paperclip::Thumbnail do
5
4
  context "A Paperclip Tempfile" do
6
- setup do
5
+ before do
7
6
  @tempfile = Paperclip::Tempfile.new(["file", ".jpg"])
8
7
  end
9
8
 
10
- teardown { @tempfile.close }
9
+ after { @tempfile.close }
11
10
 
12
- should "have its path contain a real extension" do
11
+ it "has its path contain a real extension" do
13
12
  assert_equal ".jpg", File.extname(@tempfile.path)
14
13
  end
15
14
 
16
- should "be a real Tempfile" do
15
+ it "is a real Tempfile" do
17
16
  assert @tempfile.is_a?(::Tempfile)
18
17
  end
19
18
  end
20
19
 
21
20
  context "Another Paperclip Tempfile" do
22
- setup do
21
+ before do
23
22
  @tempfile = Paperclip::Tempfile.new("file")
24
23
  end
25
24
 
26
- teardown { @tempfile.close }
25
+ after { @tempfile.close }
27
26
 
28
- should "not have an extension if not given one" do
27
+ it "does not have an extension if not given one" do
29
28
  assert_equal "", File.extname(@tempfile.path)
30
29
  end
31
30
 
32
- should "still be a real Tempfile" do
31
+ it "is a real Tempfile" do
33
32
  assert @tempfile.is_a?(::Tempfile)
34
33
  end
35
34
  end
36
35
 
37
36
  context "An image" do
38
- setup do
37
+ before do
39
38
  @file = File.new(fixture_file("5k.png"), 'rb')
40
39
  end
41
40
 
42
- teardown { @file.close }
41
+ after { @file.close }
43
42
 
44
43
  [["600x600>", "434x66"],
45
44
  ["400x400>", "400x61"],
46
- ["32x32<", "434x66"]
45
+ ["32x32<", "434x66"],
46
+ [nil, "434x66"]
47
47
  ].each do |args|
48
48
  context "being thumbnailed with a geometry of #{args[0]}" do
49
- setup do
50
- @thumb = Paperclip::Thumbnail.new(@file, :geometry => args[0])
49
+ before do
50
+ @thumb = Paperclip::Thumbnail.new(@file, geometry: args[0])
51
51
  end
52
52
 
53
- should "start with dimensions of 434x66" do
53
+ it "starts with dimensions of 434x66" do
54
54
  cmd = %Q[identify -format "%wx%h" "#{@file.path}"]
55
55
  assert_equal "434x66", `#{cmd}`.chomp
56
56
  end
57
57
 
58
- should "report the correct target geometry" do
59
- assert_equal args[0], @thumb.target_geometry.to_s
58
+ it "reports the correct target geometry" do
59
+ assert_equal args[0].to_s, @thumb.target_geometry.to_s
60
60
  end
61
61
 
62
62
  context "when made" do
63
- setup do
63
+ before do
64
64
  @thumb_result = @thumb.make
65
65
  end
66
66
 
67
- should "be the size we expect it to be" do
67
+ it "is the size we expect it to be" do
68
68
  cmd = %Q[identify -format "%wx%h" "#{@thumb_result.path}"]
69
69
  assert_equal args[1], `#{cmd}`.chomp
70
70
  end
@@ -73,11 +73,11 @@ class ThumbnailTest < Test::Unit::TestCase
73
73
  end
74
74
 
75
75
  context "being thumbnailed at 100x50 with cropping" do
76
- setup do
77
- @thumb = Paperclip::Thumbnail.new(@file, :geometry => "100x50#")
76
+ before do
77
+ @thumb = Paperclip::Thumbnail.new(@file, geometry: "100x50#")
78
78
  end
79
79
 
80
- should "let us know when a command isn't found versus a processing error" do
80
+ it "lets us know when a command isn't found versus a processing error" do
81
81
  old_path = ENV['PATH']
82
82
  begin
83
83
  Cocaine::CommandLine.path = ''
@@ -93,28 +93,28 @@ class ThumbnailTest < Test::Unit::TestCase
93
93
  end
94
94
  end
95
95
 
96
- should "report its correct current and target geometries" do
96
+ it "reports its correct current and target geometries" do
97
97
  assert_equal "100x50#", @thumb.target_geometry.to_s
98
98
  assert_equal "434x66", @thumb.current_geometry.to_s
99
99
  end
100
100
 
101
- should "report its correct format" do
101
+ it "reports its correct format" do
102
102
  assert_nil @thumb.format
103
103
  end
104
104
 
105
- should "have whiny turned on by default" do
105
+ it "has whiny turned on by default" do
106
106
  assert @thumb.whiny
107
107
  end
108
108
 
109
- should "have convert_options set to nil by default" do
109
+ it "has convert_options set to nil by default" do
110
110
  assert_equal nil, @thumb.convert_options
111
111
  end
112
112
 
113
- should "have source_file_options set to nil by default" do
113
+ it "has source_file_options set to nil by default" do
114
114
  assert_equal nil, @thumb.source_file_options
115
115
  end
116
116
 
117
- should "send the right command to convert when sent #make" do
117
+ it "sends the right command to convert when sent #make" do
118
118
  @thumb.expects(:convert).with do |*arg|
119
119
  arg[0] == ':source -auto-orient -resize "x50" -crop "100x50+114+0" +repage :dest' &&
120
120
  arg[1][:source] == "#{File.expand_path(@thumb.file.path)}[0]"
@@ -122,34 +122,34 @@ class ThumbnailTest < Test::Unit::TestCase
122
122
  @thumb.make
123
123
  end
124
124
 
125
- should "create the thumbnail when sent #make" do
125
+ it "creates the thumbnail when sent #make" do
126
126
  dst = @thumb.make
127
127
  assert_match /100x50/, `identify "#{dst.path}"`
128
128
  end
129
129
  end
130
130
 
131
- should 'properly crop a EXIF-rotated image' do
131
+ it 'crops a EXIF-rotated image properly' do
132
132
  file = File.new(fixture_file('rotated.jpg'))
133
- thumb = Paperclip::Thumbnail.new(file, :geometry => "50x50#")
133
+ thumb = Paperclip::Thumbnail.new(file, geometry: "50x50#")
134
134
 
135
135
  output_file = thumb.make
136
136
 
137
137
  command = Cocaine::CommandLine.new("identify", "-format %wx%h :file")
138
- assert_equal "50x50", command.run(:file => output_file.path).strip
138
+ assert_equal "50x50", command.run(file: output_file.path).strip
139
139
  end
140
140
 
141
141
  context "being thumbnailed with source file options set" do
142
- setup do
142
+ before do
143
143
  @thumb = Paperclip::Thumbnail.new(@file,
144
- :geometry => "100x50#",
145
- :source_file_options => "-strip")
144
+ geometry: "100x50#",
145
+ source_file_options: "-strip")
146
146
  end
147
147
 
148
- should "have source_file_options value set" do
148
+ it "has source_file_options value set" do
149
149
  assert_equal ["-strip"], @thumb.source_file_options
150
150
  end
151
151
 
152
- should "send the right command to convert when sent #make" do
152
+ it "sends the right command to convert when sent #make" do
153
153
  @thumb.expects(:convert).with do |*arg|
154
154
  arg[0] == '-strip :source -auto-orient -resize "x50" -crop "100x50+114+0" +repage :dest' &&
155
155
  arg[1][:source] == "#{File.expand_path(@thumb.file.path)}[0]"
@@ -157,19 +157,19 @@ class ThumbnailTest < Test::Unit::TestCase
157
157
  @thumb.make
158
158
  end
159
159
 
160
- should "create the thumbnail when sent #make" do
160
+ it "creates the thumbnail when sent #make" do
161
161
  dst = @thumb.make
162
162
  assert_match /100x50/, `identify "#{dst.path}"`
163
163
  end
164
164
 
165
165
  context "redefined to have bad source_file_options setting" do
166
- setup do
166
+ before do
167
167
  @thumb = Paperclip::Thumbnail.new(@file,
168
- :geometry => "100x50#",
169
- :source_file_options => "-this-aint-no-option")
168
+ geometry: "100x50#",
169
+ source_file_options: "-this-aint-no-option")
170
170
  end
171
171
 
172
- should "error when trying to create the thumbnail" do
172
+ it "errors when trying to create the thumbnail" do
173
173
  assert_raises(Paperclip::Error) do
174
174
  silence_stream(STDERR) do
175
175
  @thumb.make
@@ -180,17 +180,17 @@ class ThumbnailTest < Test::Unit::TestCase
180
180
  end
181
181
 
182
182
  context "being thumbnailed with convert options set" do
183
- setup do
183
+ before do
184
184
  @thumb = Paperclip::Thumbnail.new(@file,
185
- :geometry => "100x50#",
186
- :convert_options => "-strip -depth 8")
185
+ geometry: "100x50#",
186
+ convert_options: "-strip -depth 8")
187
187
  end
188
188
 
189
- should "have convert_options value set" do
189
+ it "has convert_options value set" do
190
190
  assert_equal %w"-strip -depth 8", @thumb.convert_options
191
191
  end
192
192
 
193
- should "send the right command to convert when sent #make" do
193
+ it "sends the right command to convert when sent #make" do
194
194
  @thumb.expects(:convert).with do |*arg|
195
195
  arg[0] == ':source -auto-orient -resize "x50" -crop "100x50+114+0" +repage -strip -depth 8 :dest' &&
196
196
  arg[1][:source] == "#{File.expand_path(@thumb.file.path)}[0]"
@@ -198,19 +198,19 @@ class ThumbnailTest < Test::Unit::TestCase
198
198
  @thumb.make
199
199
  end
200
200
 
201
- should "create the thumbnail when sent #make" do
201
+ it "creates the thumbnail when sent #make" do
202
202
  dst = @thumb.make
203
203
  assert_match /100x50/, `identify "#{dst.path}"`
204
204
  end
205
205
 
206
206
  context "redefined to have bad convert_options setting" do
207
- setup do
207
+ before do
208
208
  @thumb = Paperclip::Thumbnail.new(@file,
209
- :geometry => "100x50#",
210
- :convert_options => "-this-aint-no-option")
209
+ geometry: "100x50#",
210
+ convert_options: "-this-aint-no-option")
211
211
  end
212
212
 
213
- should "error when trying to create the thumbnail" do
213
+ it "errors when trying to create the thumbnail" do
214
214
  assert_raises(Paperclip::Error) do
215
215
  silence_stream(STDERR) do
216
216
  @thumb.make
@@ -218,7 +218,7 @@ class ThumbnailTest < Test::Unit::TestCase
218
218
  end
219
219
  end
220
220
 
221
- should "let us know when a command isn't found versus a processing error" do
221
+ it "lets us know when a command isn't found versus a processing error" do
222
222
  old_path = ENV['PATH']
223
223
  begin
224
224
  Cocaine::CommandLine.path = ''
@@ -237,20 +237,20 @@ class ThumbnailTest < Test::Unit::TestCase
237
237
  end
238
238
 
239
239
  context "being thumbnailed with a blank geometry string" do
240
- setup do
240
+ before do
241
241
  @thumb = Paperclip::Thumbnail.new(@file,
242
- :geometry => "",
243
- :convert_options => "-gravity center -crop \"300x300+0-0\"")
242
+ geometry: "",
243
+ convert_options: "-gravity center -crop \"300x300+0-0\"")
244
244
  end
245
245
 
246
- should "not get resized by default" do
246
+ it "does not get resized by default" do
247
247
  assert !@thumb.transformation_command.include?("-resize")
248
248
  end
249
249
  end
250
250
 
251
251
  context "being thumbnailed with default animated option (true)" do
252
- should "call identify to check for animated images when sent #make" do
253
- thumb = Paperclip::Thumbnail.new(@file, :geometry => "100x50#")
252
+ it "calls identify to check for animated images when sent #make" do
253
+ thumb = Paperclip::Thumbnail.new(@file, geometry: "100x50#")
254
254
  thumb.expects(:identify).at_least_once.with do |*arg|
255
255
  arg[0] == '-format %m :file' &&
256
256
  arg[1][:file] == "#{File.expand_path(thumb.file.path)}[0]"
@@ -260,11 +260,11 @@ class ThumbnailTest < Test::Unit::TestCase
260
260
  end
261
261
 
262
262
  context "passing a custom file geometry parser" do
263
- teardown do
264
- self.class.send(:remove_const, :GeoParser)
263
+ after do
264
+ Object.send(:remove_const, :GeoParser) if Object.const_defined?(:GeoParser)
265
265
  end
266
266
 
267
- should "produce the appropriate transformation_command" do
267
+ it "produces the appropriate transformation_command" do
268
268
  GeoParser = Class.new do
269
269
  def self.from_file(file)
270
270
  new
@@ -275,7 +275,7 @@ class ThumbnailTest < Test::Unit::TestCase
275
275
  end
276
276
  end
277
277
 
278
- thumb = Paperclip::Thumbnail.new(@file, :geometry => '50x50', :file_geometry_parser => GeoParser)
278
+ thumb = Paperclip::Thumbnail.new(@file, geometry: '50x50', file_geometry_parser: ::GeoParser)
279
279
 
280
280
  transformation_command = thumb.transformation_command
281
281
 
@@ -291,11 +291,11 @@ class ThumbnailTest < Test::Unit::TestCase
291
291
  end
292
292
 
293
293
  context "passing a custom geometry string parser" do
294
- teardown do
295
- self.class.send(:remove_const, :GeoParser)
294
+ after do
295
+ Object.send(:remove_const, :GeoParser) if Object.const_defined?(:GeoParser)
296
296
  end
297
297
 
298
- should "produce the appropriate transformation_command" do
298
+ it "produces the appropriate transformation_command" do
299
299
  GeoParser = Class.new do
300
300
  def self.parse(s)
301
301
  new
@@ -306,7 +306,7 @@ class ThumbnailTest < Test::Unit::TestCase
306
306
  end
307
307
  end
308
308
 
309
- thumb = Paperclip::Thumbnail.new(@file, :geometry => '50x50', :string_geometry_parser => GeoParser)
309
+ thumb = Paperclip::Thumbnail.new(@file, geometry: '50x50', string_geometry_parser: ::GeoParser)
310
310
 
311
311
  transformation_command = thumb.transformation_command
312
312
 
@@ -317,32 +317,32 @@ class ThumbnailTest < Test::Unit::TestCase
317
317
  end
318
318
 
319
319
  context "A multipage PDF" do
320
- setup do
320
+ before do
321
321
  @file = File.new(fixture_file("twopage.pdf"), 'rb')
322
322
  end
323
323
 
324
- teardown { @file.close }
324
+ after { @file.close }
325
325
 
326
- should "start with two pages with dimensions 612x792" do
326
+ it "starts with two pages with dimensions 612x792" do
327
327
  cmd = %Q[identify -format "%wx%h" "#{@file.path}"]
328
328
  assert_equal "612x792"*2, `#{cmd}`.chomp
329
329
  end
330
330
 
331
331
  context "being thumbnailed at 100x100 with cropping" do
332
- setup do
333
- @thumb = Paperclip::Thumbnail.new(@file, :geometry => "100x100#", :format => :png)
332
+ before do
333
+ @thumb = Paperclip::Thumbnail.new(@file, geometry: "100x100#", format: :png)
334
334
  end
335
335
 
336
- should "report its correct current and target geometries" do
336
+ it "reports its correct current and target geometries" do
337
337
  assert_equal "100x100#", @thumb.target_geometry.to_s
338
338
  assert_equal "612x792", @thumb.current_geometry.to_s
339
339
  end
340
340
 
341
- should "report its correct format" do
341
+ it "reports its correct format" do
342
342
  assert_equal :png, @thumb.format
343
343
  end
344
344
 
345
- should "create the thumbnail when sent #make" do
345
+ it "creates the thumbnail when sent #make" do
346
346
  dst = @thumb.make
347
347
  assert_match /100x100/, `identify "#{dst.path}"`
348
348
  end
@@ -350,23 +350,23 @@ class ThumbnailTest < Test::Unit::TestCase
350
350
  end
351
351
 
352
352
  context "An animated gif" do
353
- setup do
353
+ before do
354
354
  @file = File.new(fixture_file("animated.gif"), 'rb')
355
355
  end
356
356
 
357
- teardown { @file.close }
357
+ after { @file.close }
358
358
 
359
- should "start with 12 frames with size 100x100" do
359
+ it "starts with 12 frames with size 100x100" do
360
360
  cmd = %Q[identify -format "%wx%h" "#{@file.path}"]
361
361
  assert_equal "100x100"*12, `#{cmd}`.chomp
362
362
  end
363
363
 
364
364
  context "with static output" do
365
- setup do
366
- @thumb = Paperclip::Thumbnail.new(@file, :geometry => "50x50", :format => :jpg)
365
+ before do
366
+ @thumb = Paperclip::Thumbnail.new(@file, geometry: "50x50", format: :jpg)
367
367
  end
368
368
 
369
- should "create the single frame thumbnail when sent #make" do
369
+ it "creates the single frame thumbnail when sent #make" do
370
370
  dst = @thumb.make
371
371
  cmd = %Q[identify -format "%wx%h" "#{dst.path}"]
372
372
  assert_equal "50x50", `#{cmd}`.chomp
@@ -374,11 +374,11 @@ class ThumbnailTest < Test::Unit::TestCase
374
374
  end
375
375
 
376
376
  context "with animated output format" do
377
- setup do
378
- @thumb = Paperclip::Thumbnail.new(@file, :geometry => "50x50", :format => :gif)
377
+ before do
378
+ @thumb = Paperclip::Thumbnail.new(@file, geometry: "50x50", format: :gif)
379
379
  end
380
380
 
381
- should "create the 12 frames thumbnail when sent #make" do
381
+ it "creates the 12 frames thumbnail when sent #make" do
382
382
  dst = @thumb.make
383
383
  cmd = %Q[identify -format "%wx%h," "#{dst.path}"]
384
384
  frames = `#{cmd}`.chomp.split(',')
@@ -386,21 +386,21 @@ class ThumbnailTest < Test::Unit::TestCase
386
386
  assert_frame_dimensions (45..50), frames
387
387
  end
388
388
 
389
- should "use the -coalesce option" do
389
+ it "uses the -coalesce option" do
390
390
  assert_equal @thumb.transformation_command.first, "-coalesce"
391
391
  end
392
392
 
393
- should "use the -layers 'optimize' option" do
393
+ it "uses the -layers 'optimize' option" do
394
394
  assert_equal @thumb.transformation_command.last, '-layers "optimize"'
395
395
  end
396
396
  end
397
397
 
398
398
  context "with omitted output format" do
399
- setup do
400
- @thumb = Paperclip::Thumbnail.new(@file, :geometry => "50x50")
399
+ before do
400
+ @thumb = Paperclip::Thumbnail.new(@file, geometry: "50x50")
401
401
  end
402
402
 
403
- should "create the 12 frames thumbnail when sent #make" do
403
+ it "creates the 12 frames thumbnail when sent #make" do
404
404
  dst = @thumb.make
405
405
  cmd = %Q[identify -format "%wx%h," "#{dst.path}"]
406
406
  frames = `#{cmd}`.chomp.split(',')
@@ -408,22 +408,22 @@ class ThumbnailTest < Test::Unit::TestCase
408
408
  assert_frame_dimensions (45..50), frames
409
409
  end
410
410
 
411
- should "use the -coalesce option" do
411
+ it "uses the -coalesce option" do
412
412
  assert_equal @thumb.transformation_command.first, "-coalesce"
413
413
  end
414
414
 
415
- should "use the -layers 'optimize' option" do
415
+ it "uses the -layers 'optimize' option" do
416
416
  assert_equal @thumb.transformation_command.last, '-layers "optimize"'
417
417
  end
418
418
  end
419
419
 
420
420
  context "with unidentified source format" do
421
- setup do
421
+ before do
422
422
  @unidentified_file = File.new(fixture_file("animated.unknown"), 'rb')
423
- @thumb = Paperclip::Thumbnail.new(@file, :geometry => "60x60")
423
+ @thumb = Paperclip::Thumbnail.new(@file, geometry: "60x60")
424
424
  end
425
425
 
426
- should "create the 12 frames thumbnail when sent #make" do
426
+ it "creates the 12 frames thumbnail when sent #make" do
427
427
  dst = @thumb.make
428
428
  cmd = %Q[identify -format "%wx%h," "#{dst.path}"]
429
429
  frames = `#{cmd}`.chomp.split(',')
@@ -431,22 +431,22 @@ class ThumbnailTest < Test::Unit::TestCase
431
431
  assert_frame_dimensions (55..60), frames
432
432
  end
433
433
 
434
- should "use the -coalesce option" do
434
+ it "uses the -coalesce option" do
435
435
  assert_equal @thumb.transformation_command.first, "-coalesce"
436
436
  end
437
437
 
438
- should "use the -layers 'optimize' option" do
438
+ it "uses the -layers 'optimize' option" do
439
439
  assert_equal @thumb.transformation_command.last, '-layers "optimize"'
440
440
  end
441
441
  end
442
442
 
443
443
  context "with no source format" do
444
- setup do
444
+ before do
445
445
  @unidentified_file = File.new(fixture_file("animated"), 'rb')
446
- @thumb = Paperclip::Thumbnail.new(@file, :geometry => "70x70")
446
+ @thumb = Paperclip::Thumbnail.new(@file, geometry: "70x70")
447
447
  end
448
448
 
449
- should "create the 12 frames thumbnail when sent #make" do
449
+ it "creates the 12 frames thumbnail when sent #make" do
450
450
  dst = @thumb.make
451
451
  cmd = %Q[identify -format "%wx%h," "#{dst.path}"]
452
452
  frames = `#{cmd}`.chomp.split(',')
@@ -454,27 +454,27 @@ class ThumbnailTest < Test::Unit::TestCase
454
454
  assert_frame_dimensions (60..70), frames
455
455
  end
456
456
 
457
- should "use the -coalesce option" do
457
+ it "uses the -coalesce option" do
458
458
  assert_equal @thumb.transformation_command.first, "-coalesce"
459
459
  end
460
460
 
461
- should "use the -layers 'optimize' option" do
461
+ it "uses the -layers 'optimize' option" do
462
462
  assert_equal @thumb.transformation_command.last, '-layers "optimize"'
463
463
  end
464
464
  end
465
465
 
466
466
  context "with animated option set to false" do
467
- setup do
468
- @thumb = Paperclip::Thumbnail.new(@file, :geometry => "50x50", :animated => false)
467
+ before do
468
+ @thumb = Paperclip::Thumbnail.new(@file, geometry: "50x50", animated: false)
469
469
  end
470
470
 
471
- should "output the gif format" do
471
+ it "outputs the gif format" do
472
472
  dst = @thumb.make
473
473
  cmd = %Q[identify "#{dst.path}"]
474
474
  assert_match /GIF/, `#{cmd}`.chomp
475
475
  end
476
476
 
477
- should "create the single frame thumbnail when sent #make" do
477
+ it "creates the single frame thumbnail when sent #make" do
478
478
  dst = @thumb.make
479
479
  cmd = %Q[identify -format "%wx%h" "#{dst.path}"]
480
480
  assert_equal "50x50", `#{cmd}`.chomp