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
@@ -1,70 +1,74 @@
1
- require './test/helper'
1
+ require 'spec_helper'
2
2
 
3
- class DataUriAdapterTest < Test::Unit::TestCase
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
- should 'allow a missing mime-type' do
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
- setup do
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
- should "returns a file name based on the content type" do
23
- assert_equal "data.png", @subject.original_filename
26
+ it "returns a nondescript file name" do
27
+ assert_equal "data", @subject.original_filename
24
28
  end
25
29
 
26
- should "return a content type" do
30
+ it "returns a content type" do
27
31
  assert_equal "image/png", @subject.content_type
28
32
  end
29
33
 
30
- should "return the size of the data" do
34
+ it "returns the size of the data" do
31
35
  assert_equal 4456, @subject.size
32
36
  end
33
37
 
34
- should "generate a correct MD5 hash of the contents" do
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
- should "generate correct fingerprint after read" do
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
- should "generate same fingerprint" do
50
+ it "generates same fingerprint" do
47
51
  assert_equal @subject.fingerprint, @subject.fingerprint
48
52
  end
49
53
 
50
- should 'accept a content_type' do
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
- should 'accept an original_filename' do
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
- should "not generate filenames that include restricted characters" do
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
- should "not generate paths that include restricted characters" do
69
+ it "does not generate paths that include restricted characters" do
66
70
  @subject.original_filename = 'image:restricted.png'
67
- assert_no_match /:/, @subject.path
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
@@ -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,35 +59,35 @@ 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
76
  context "file with content type derived from file command on *nix" do
73
- setup do
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
- should "return content type without newline character" do
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
- setup do
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
- teardown do
98
+ after do
95
99
  @file.close
96
100
  @subject.close
97
101
  end
98
102
 
99
- should "not generate filenames that include restricted characters" do
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
- should "not generate paths that include restricted characters" do
104
- assert_no_match /:/, @subject.path
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
- setup do
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
- teardown do
118
+ after do
115
119
  @file.close
116
120
  @subject.close
117
121
  end
118
122
 
119
- should "provide correct mime-type" do
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 './test/helper'
1
+ require 'spec_helper'
2
2
 
3
- class HttpUrlProxyAdapterTest < Test::Unit::TestCase
3
+ describe Paperclip::HttpUrlProxyAdapter do
4
4
  context "a new instance" do
5
- setup do
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
- teardown do
13
+ after do
14
14
  @subject.close
15
15
  end
16
16
 
17
- should "return a file name" do
17
+ it "returns a file name" do
18
18
  assert_equal "thoughtbot-logo.png", @subject.original_filename
19
19
  end
20
20
 
21
- should 'close open handle after reading' do
21
+ it 'closes open handle after reading' do
22
22
  assert_equal true, @open_return.closed?
23
23
  end
24
24
 
25
- should "return a content type" do
25
+ it "returns a content type" do
26
26
  assert_equal "image/png", @subject.content_type
27
27
  end
28
28
 
29
- should "return the size of the data" do
29
+ it "returns the size of the data" do
30
30
  assert_equal @open_return.size, @subject.size
31
31
  end
32
32
 
33
- should "generate an MD5 hash of the contents" do
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
- should "generate correct fingerprint after read" do
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
- should "generate same fingerprint" do
42
+ it "generates same fingerprint" do
43
43
  assert_equal @subject.fingerprint, @subject.fingerprint
44
44
  end
45
45
 
46
- should "return the data contained in the StringIO" do
46
+ it "returns the data contained in the StringIO" do
47
47
  assert_equal "xxx", @subject.read
48
48
  end
49
49
 
50
- should 'accept a content_type' do
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
- should 'accept an original_filename' do
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
- setup do
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
- teardown do
68
+ after do
69
69
  @subject.close
70
70
  end
71
71
 
72
- should "return a file name" do
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
- setup do
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
- teardown do
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
- should "not generate filenames that include restricted characters" do
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
- should "not generate paths that include restricted characters" do
97
- assert_no_match(/:/, @subject.path)
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
 
@@ -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