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,110 +0,0 @@
1
- require './test/helper'
2
-
3
- class ValidateAttachmentContentTypeMatcherTest < Test::Unit::TestCase
4
- context "validate_attachment_content_type" do
5
- setup do
6
- reset_table("dummies") do |d|
7
- d.string :title
8
- d.string :avatar_file_name
9
- d.string :avatar_content_type
10
- end
11
- @dummy_class = reset_class "Dummy"
12
- @dummy_class.has_attached_file :avatar
13
- @matcher = self.class.validate_attachment_content_type(:avatar).
14
- allowing(%w(image/png image/jpeg)).
15
- rejecting(%w(audio/mp3 application/octet-stream))
16
- end
17
-
18
- context "given a class with no validation" do
19
- should_reject_dummy_class
20
- end
21
-
22
- context "given a class with a validation that doesn't match" do
23
- setup do
24
- @dummy_class.validates_attachment_content_type :avatar, :content_type => %r{audio/.*}
25
- end
26
-
27
- should_reject_dummy_class
28
- end
29
-
30
- context "given a class with a matching validation" do
31
- setup do
32
- @dummy_class.validates_attachment_content_type :avatar, :content_type => %r{image/.*}
33
- end
34
-
35
- should_accept_dummy_class
36
- end
37
-
38
- context "given a class with other validations but matching types" do
39
- setup do
40
- @dummy_class.validates_presence_of :title
41
- @dummy_class.validates_attachment_content_type :avatar, :content_type => %r{image/.*}
42
- end
43
-
44
- should_accept_dummy_class
45
- end
46
-
47
- context "given a class that matches and a matcher that only specifies 'allowing'" do
48
- setup do
49
- @dummy_class.validates_attachment_content_type :avatar, :content_type => %r{image/.*}
50
- @matcher = self.class.validate_attachment_content_type(:avatar).
51
- allowing(%w(image/png image/jpeg))
52
- end
53
-
54
- should_accept_dummy_class
55
- end
56
-
57
- context "given a class that does not match and a matcher that only specifies 'allowing'" do
58
- setup do
59
- @dummy_class.validates_attachment_content_type :avatar, :content_type => %r{audio/.*}
60
- @matcher = self.class.validate_attachment_content_type(:avatar).
61
- allowing(%w(image/png image/jpeg))
62
- end
63
-
64
- should_reject_dummy_class
65
- end
66
-
67
- context "given a class that matches and a matcher that only specifies 'rejecting'" do
68
- setup do
69
- @dummy_class.validates_attachment_content_type :avatar, :content_type => %r{image/.*}
70
- @matcher = self.class.validate_attachment_content_type(:avatar).
71
- rejecting(%w(audio/mp3 application/octet-stream))
72
- end
73
-
74
- should_accept_dummy_class
75
- end
76
-
77
- context "given a class that does not match and a matcher that only specifies 'rejecting'" do
78
- setup do
79
- @dummy_class.validates_attachment_content_type :avatar, :content_type => %r{audio/.*}
80
- @matcher = self.class.validate_attachment_content_type(:avatar).
81
- rejecting(%w(audio/mp3 application/octet-stream))
82
- end
83
-
84
- should_reject_dummy_class
85
- end
86
-
87
- context "using an :if to control the validation" do
88
- setup do
89
- @dummy_class.class_eval do
90
- validates_attachment_content_type :avatar, :content_type => %r{image/*} , :if => :go
91
- attr_accessor :go
92
- end
93
- @matcher = self.class.validate_attachment_content_type(:avatar).
94
- allowing(%w(image/png image/jpeg)).
95
- rejecting(%w(audio/mp3 application/octet-stream))
96
- @dummy = @dummy_class.new
97
- end
98
-
99
- should "run the validation if the control is true" do
100
- @dummy.go = true
101
- assert_accepts @matcher, @dummy
102
- end
103
-
104
- should "not run the validation if the control is false" do
105
- @dummy.go = false
106
- assert_rejects @matcher, @dummy
107
- end
108
- end
109
- end
110
- end
@@ -1,69 +0,0 @@
1
- require './test/helper'
2
-
3
- class ValidateAttachmentPresenceMatcherTest < Test::Unit::TestCase
4
- context "validate_attachment_presence" do
5
- setup do
6
- reset_table("dummies") do |d|
7
- d.string :avatar_file_name
8
- end
9
- @dummy_class = reset_class "Dummy"
10
- @dummy_class.has_attached_file :avatar
11
- @matcher = self.class.validate_attachment_presence(:avatar)
12
- end
13
-
14
- context "given a class with no validation" do
15
- should_reject_dummy_class
16
- end
17
-
18
- context "given a class with a matching validation" do
19
- setup do
20
- @dummy_class.validates_attachment_presence :avatar
21
- end
22
-
23
- should_accept_dummy_class
24
- end
25
-
26
- context "given an instance with other attachment validations" do
27
- setup do
28
- reset_table("dummies") do |d|
29
- d.string :avatar_file_name
30
- d.string :avatar_content_type
31
- end
32
-
33
- @dummy_class.class_eval do
34
- validates_attachment_presence :avatar
35
- validates_attachment_content_type :avatar, :content_type => 'image/gif'
36
- end
37
-
38
- @dummy = @dummy_class.new
39
- @matcher = self.class.validate_attachment_presence(:avatar)
40
- end
41
-
42
- should "it should validate properly" do
43
- @dummy.avatar = File.new fixture_file('5k.png')
44
- assert_accepts @matcher, @dummy
45
- end
46
- end
47
-
48
- context "using an :if to control the validation" do
49
- setup do
50
- @dummy_class.class_eval do
51
- validates_attachment_presence :avatar, :if => :go
52
- attr_accessor :go
53
- end
54
- @dummy = @dummy_class.new
55
- @dummy.avatar = nil
56
- end
57
-
58
- should "run the validation if the control is true" do
59
- @dummy.go = true
60
- assert_accepts @matcher, @dummy
61
- end
62
-
63
- should "not run the validation if the control is false" do
64
- @dummy.go = false
65
- assert_rejects @matcher, @dummy
66
- end
67
- end
68
- end
69
- end
@@ -1,86 +0,0 @@
1
- require './test/helper'
2
-
3
- class ValidateAttachmentSizeMatcherTest < Test::Unit::TestCase
4
- context "validate_attachment_size" do
5
- setup do
6
- reset_table("dummies") do |d|
7
- d.string :avatar_file_name
8
- d.integer :avatar_file_size
9
- end
10
- @dummy_class = reset_class "Dummy"
11
- @dummy_class.has_attached_file :avatar
12
- end
13
-
14
- context "of limited size" do
15
- setup{ @matcher = self.class.validate_attachment_size(:avatar).in(256..1024) }
16
-
17
- context "given a class with no validation" do
18
- should_reject_dummy_class
19
- end
20
-
21
- context "given a class with a validation that's too high" do
22
- setup { @dummy_class.validates_attachment_size :avatar, :in => 256..2048 }
23
- should_reject_dummy_class
24
- end
25
-
26
- context "given a class with a validation that's too low" do
27
- setup { @dummy_class.validates_attachment_size :avatar, :in => 0..1024 }
28
- should_reject_dummy_class
29
- end
30
-
31
- context "given a class with a validation that matches" do
32
- setup { @dummy_class.validates_attachment_size :avatar, :in => 256..1024 }
33
- should_accept_dummy_class
34
- end
35
- end
36
-
37
- context "allowing anything" do
38
- setup{ @matcher = self.class.validate_attachment_size(:avatar) }
39
-
40
- context "given a class with an upper limit" do
41
- setup { @dummy_class.validates_attachment_size :avatar, :less_than => 1 }
42
- should_accept_dummy_class
43
- end
44
-
45
- context "given a class with a lower limit" do
46
- setup { @dummy_class.validates_attachment_size :avatar, :greater_than => 1 }
47
- should_accept_dummy_class
48
- end
49
- end
50
-
51
- context "using an :if to control the validation" do
52
- setup do
53
- @dummy_class.class_eval do
54
- validates_attachment_size :avatar, :greater_than => 1024, :if => :go
55
- attr_accessor :go
56
- end
57
- @dummy = @dummy_class.new
58
- @matcher = self.class.validate_attachment_size(:avatar).greater_than(1024)
59
- end
60
-
61
- should "run the validation if the control is true" do
62
- @dummy.go = true
63
- assert_accepts @matcher, @dummy
64
- end
65
-
66
- should "not run the validation if the control is false" do
67
- @dummy.go = false
68
- assert_rejects @matcher, @dummy
69
- end
70
- end
71
-
72
- context "post processing" do
73
- setup do
74
- @dummy_class.validates_attachment_size :avatar, :greater_than => 1024
75
-
76
- @dummy = @dummy_class.new
77
- @matcher = self.class.validate_attachment_size(:avatar).greater_than(1024)
78
- end
79
-
80
- should "be skipped" do
81
- @dummy.avatar.expects(:post_process).never
82
- assert_accepts @matcher, @dummy
83
- end
84
- end
85
- end
86
- end
@@ -1,32 +0,0 @@
1
- require './test/helper'
2
-
3
- class MetaClassTest < Test::Unit::TestCase
4
- context "A meta-class of dummy" do
5
- setup do
6
- rebuild_model
7
- @file = File.new(fixture_file("5k.png"), 'rb')
8
- end
9
-
10
- teardown { @file.close }
11
-
12
- should "be able to use Paperclip like a normal class" do
13
- reset_class("Dummy")
14
- @dummy = Dummy.new
15
-
16
- assert_nothing_raised do
17
- rebuild_meta_class_of(@dummy)
18
- end
19
- end
20
-
21
- should "work like any other instance" do
22
- reset_class("Dummy")
23
- @dummy = Dummy.new
24
- rebuild_meta_class_of(@dummy)
25
-
26
- assert_nothing_raised do
27
- @dummy.avatar = @file
28
- end
29
- assert @dummy.save
30
- end
31
- end
32
- end
@@ -1,90 +0,0 @@
1
- require './test/helper'
2
-
3
- class PaperclipMissingAttachmentStylesTest < Test::Unit::TestCase
4
- def setup
5
- Paperclip::AttachmentRegistry.clear
6
- end
7
-
8
- context "Paperclip" do
9
- setup do
10
- Paperclip::AttachmentRegistry.clear
11
- end
12
-
13
- teardown do
14
- File.unlink(Paperclip.registered_attachments_styles_path) rescue nil
15
- end
16
-
17
- should "enable to get and set path to registered styles file" do
18
- assert_equal ROOT.join('tmp/public/system/paperclip_attachments.yml').to_s, Paperclip.registered_attachments_styles_path
19
- Paperclip.registered_attachments_styles_path = '/tmp/config/paperclip_attachments.yml'
20
- assert_equal '/tmp/config/paperclip_attachments.yml', Paperclip.registered_attachments_styles_path
21
- Paperclip.registered_attachments_styles_path = nil
22
- assert_equal ROOT.join('tmp/public/system/paperclip_attachments.yml').to_s, Paperclip.registered_attachments_styles_path
23
- end
24
-
25
- should "be able to get current attachment styles" do
26
- assert_equal Hash.new, Paperclip.send(:current_attachments_styles)
27
- rebuild_model :styles => {:croppable => '600x600>', :big => '1000x1000>'}
28
- expected_hash = { :Dummy => {:avatar => [:big, :croppable]}}
29
- assert_equal expected_hash, Paperclip.send(:current_attachments_styles)
30
- end
31
-
32
- should "be able to save current attachment styles for further comparison" do
33
- rebuild_model :styles => {:croppable => '600x600>', :big => '1000x1000>'}
34
- Paperclip.save_current_attachments_styles!
35
- expected_hash = { :Dummy => {:avatar => [:big, :croppable]}}
36
- assert_equal expected_hash, YAML.load_file(Paperclip.registered_attachments_styles_path)
37
- end
38
-
39
- should "be able to read registered attachment styles from file" do
40
- rebuild_model :styles => {:croppable => '600x600>', :big => '1000x1000>'}
41
- Paperclip.save_current_attachments_styles!
42
- expected_hash = { :Dummy => {:avatar => [:big, :croppable]}}
43
- assert_equal expected_hash, Paperclip.send(:get_registered_attachments_styles)
44
- end
45
-
46
- should "be able to calculate differences between registered styles and current styles" do
47
- rebuild_model :styles => {:croppable => '600x600>', :big => '1000x1000>'}
48
- Paperclip.save_current_attachments_styles!
49
- rebuild_model :styles => {:thumb => 'x100', :export => 'x400>', :croppable => '600x600>', :big => '1000x1000>'}
50
- expected_hash = { :Dummy => {:avatar => [:export, :thumb]} }
51
- assert_equal expected_hash, Paperclip.missing_attachments_styles
52
-
53
- ActiveRecord::Base.connection.create_table :books, :force => true
54
- class ::Book < ActiveRecord::Base
55
- has_attached_file :cover, :styles => {:small => 'x100', :large => '1000x1000>'}
56
- has_attached_file :sample, :styles => {:thumb => 'x100'}
57
- end
58
-
59
- expected_hash = {
60
- :Dummy => {:avatar => [:export, :thumb]},
61
- :Book => {:sample => [:thumb], :cover => [:large, :small]}
62
- }
63
- assert_equal expected_hash, Paperclip.missing_attachments_styles
64
- Paperclip.save_current_attachments_styles!
65
- assert_equal Hash.new, Paperclip.missing_attachments_styles
66
- end
67
-
68
- should "be able to calculate differences when a new attachment is added to a model" do
69
- rebuild_model :styles => {:croppable => '600x600>', :big => '1000x1000>'}
70
- Paperclip.save_current_attachments_styles!
71
-
72
- class ::Dummy
73
- has_attached_file :photo, :styles => {:small => 'x100', :large => '1000x1000>'}
74
- end
75
-
76
- expected_hash = {
77
- :Dummy => {:photo => [:large, :small]}
78
- }
79
- assert_equal expected_hash, Paperclip.missing_attachments_styles
80
- Paperclip.save_current_attachments_styles!
81
- assert_equal Hash.new, Paperclip.missing_attachments_styles
82
- end
83
-
84
- # It's impossible to build styles hash without loading from database whole bunch of records
85
- should "skip lambda-styles" do
86
- rebuild_model :styles => lambda{ |attachment| attachment.instance.other == 'a' ? {:thumb => "50x50#"} : {:large => "400x400"} }
87
- assert_equal Hash.new, Paperclip.send(:current_attachments_styles)
88
- end
89
- end
90
- end
@@ -1,36 +0,0 @@
1
- require './test/helper'
2
-
3
- class PluralCacheTest < Test::Unit::TestCase
4
- should 'cache pluralizations' do
5
- cache = Paperclip::Interpolations::PluralCache.new
6
- word = "box"
7
-
8
- word.expects(:pluralize).returns("boxes").once
9
-
10
- cache.pluralize(word)
11
- cache.pluralize(word)
12
- end
13
-
14
- should 'cache pluralizations and underscores' do
15
- cache = Paperclip::Interpolations::PluralCache.new
16
- word = "BigBox"
17
-
18
- word.expects(:pluralize).returns(word).once
19
- word.expects(:underscore).returns(word).once
20
-
21
- cache.underscore_and_pluralize(word)
22
- cache.underscore_and_pluralize(word)
23
- end
24
-
25
- should 'pluralize words' do
26
- cache = Paperclip::Interpolations::PluralCache.new
27
- word = "box"
28
- assert_equal "boxes", cache.pluralize(word)
29
- end
30
-
31
- should 'pluralize and underscore words' do
32
- cache = Paperclip::Interpolations::PluralCache.new
33
- word = "BigBox"
34
- assert_equal "big_boxes", cache.underscore_and_pluralize(word)
35
- end
36
- end
data/test/schema_test.rb DELETED
@@ -1,200 +0,0 @@
1
- require './test/helper'
2
- require 'paperclip/schema'
3
- require 'active_support/testing/deprecation'
4
-
5
- class SchemaTest < Test::Unit::TestCase
6
- include ActiveSupport::Testing::Deprecation
7
-
8
- def setup
9
- rebuild_class
10
- end
11
-
12
- def teardown
13
- Dummy.connection.drop_table :dummies rescue nil
14
- end
15
-
16
- context "within table definition" do
17
- context "using #has_attached_file" do
18
- should "create attachment columns" do
19
- Dummy.connection.create_table :dummies, :force => true do |t|
20
- ActiveSupport::Deprecation.silence do
21
- t.has_attached_file :avatar
22
- end
23
- end
24
- rebuild_class
25
-
26
- columns = Dummy.columns.map{ |column| [column.name, column.type] }
27
-
28
- assert_includes columns, ['avatar_file_name', :string]
29
- assert_includes columns, ['avatar_content_type', :string]
30
- assert_includes columns, ['avatar_file_size', :integer]
31
- assert_includes columns, ['avatar_updated_at', :datetime]
32
- end
33
-
34
- should "display deprecation warning" do
35
- Dummy.connection.create_table :dummies, :force => true do |t|
36
- assert_deprecated do
37
- t.has_attached_file :avatar
38
- end
39
- end
40
- end
41
- end
42
-
43
- context "using #attachment" do
44
- setup do
45
- Dummy.connection.create_table :dummies, :force => true do |t|
46
- t.attachment :avatar
47
- end
48
- rebuild_class
49
- end
50
-
51
- should "create attachment columns" do
52
- columns = Dummy.columns.map{ |column| [column.name, column.type] }
53
-
54
- assert_includes columns, ['avatar_file_name', :string]
55
- assert_includes columns, ['avatar_content_type', :string]
56
- assert_includes columns, ['avatar_file_size', :integer]
57
- assert_includes columns, ['avatar_updated_at', :datetime]
58
- end
59
- end
60
- end
61
-
62
- context "within schema statement" do
63
- setup do
64
- Dummy.connection.create_table :dummies, :force => true
65
- end
66
-
67
- context "migrating up" do
68
- context "with single attachment" do
69
- setup do
70
- Dummy.connection.add_attachment :dummies, :avatar
71
- rebuild_class
72
- end
73
-
74
- should "create attachment columns" do
75
- columns = Dummy.columns.map{ |column| [column.name, column.type] }
76
-
77
- assert_includes columns, ['avatar_file_name', :string]
78
- assert_includes columns, ['avatar_content_type', :string]
79
- assert_includes columns, ['avatar_file_size', :integer]
80
- assert_includes columns, ['avatar_updated_at', :datetime]
81
- end
82
- end
83
-
84
- context "with multiple attachments" do
85
- setup do
86
- Dummy.connection.add_attachment :dummies, :avatar, :photo
87
- rebuild_class
88
- end
89
-
90
- should "create attachment columns" do
91
- columns = Dummy.columns.map{ |column| [column.name, column.type] }
92
-
93
- assert_includes columns, ['avatar_file_name', :string]
94
- assert_includes columns, ['avatar_content_type', :string]
95
- assert_includes columns, ['avatar_file_size', :integer]
96
- assert_includes columns, ['avatar_updated_at', :datetime]
97
- assert_includes columns, ['photo_file_name', :string]
98
- assert_includes columns, ['photo_content_type', :string]
99
- assert_includes columns, ['photo_file_size', :integer]
100
- assert_includes columns, ['photo_updated_at', :datetime]
101
- end
102
- end
103
-
104
- context "with no attachment" do
105
- should "raise an error" do
106
- assert_raise ArgumentError do
107
- Dummy.connection.add_attachment :dummies
108
- rebuild_class
109
- end
110
- end
111
- end
112
- end
113
-
114
- context "migrating down" do
115
- setup do
116
- Dummy.connection.change_table :dummies do |t|
117
- t.column :avatar_file_name, :string
118
- t.column :avatar_content_type, :string
119
- t.column :avatar_file_size, :integer
120
- t.column :avatar_updated_at, :datetime
121
- end
122
- end
123
-
124
- context "using #drop_attached_file" do
125
- should "remove the attachment columns" do
126
- ActiveSupport::Deprecation.silence do
127
- Dummy.connection.drop_attached_file :dummies, :avatar
128
- end
129
- rebuild_class
130
-
131
- columns = Dummy.columns.map{ |column| [column.name, column.type] }
132
-
133
- assert_not_includes columns, ['avatar_file_name', :string]
134
- assert_not_includes columns, ['avatar_content_type', :string]
135
- assert_not_includes columns, ['avatar_file_size', :integer]
136
- assert_not_includes columns, ['avatar_updated_at', :datetime]
137
- end
138
-
139
- should "display a deprecation warning" do
140
- assert_deprecated do
141
- Dummy.connection.drop_attached_file :dummies, :avatar
142
- end
143
- end
144
- end
145
-
146
- context "using #remove_attachment" do
147
- context "with single attachment" do
148
- setup do
149
- Dummy.connection.remove_attachment :dummies, :avatar
150
- rebuild_class
151
- end
152
-
153
- should "remove the attachment columns" do
154
- columns = Dummy.columns.map{ |column| [column.name, column.type] }
155
-
156
- assert_not_includes columns, ['avatar_file_name', :string]
157
- assert_not_includes columns, ['avatar_content_type', :string]
158
- assert_not_includes columns, ['avatar_file_size', :integer]
159
- assert_not_includes columns, ['avatar_updated_at', :datetime]
160
- end
161
- end
162
-
163
- context "with multiple attachments" do
164
- setup do
165
- Dummy.connection.change_table :dummies do |t|
166
- t.column :photo_file_name, :string
167
- t.column :photo_content_type, :string
168
- t.column :photo_file_size, :integer
169
- t.column :photo_updated_at, :datetime
170
- end
171
-
172
- Dummy.connection.remove_attachment :dummies, :avatar, :photo
173
- rebuild_class
174
- end
175
-
176
- should "remove the attachment columns" do
177
- columns = Dummy.columns.map{ |column| [column.name, column.type] }
178
-
179
- assert_not_includes columns, ['avatar_file_name', :string]
180
- assert_not_includes columns, ['avatar_content_type', :string]
181
- assert_not_includes columns, ['avatar_file_size', :integer]
182
- assert_not_includes columns, ['avatar_updated_at', :datetime]
183
- assert_not_includes columns, ['photo_file_name', :string]
184
- assert_not_includes columns, ['photo_content_type', :string]
185
- assert_not_includes columns, ['photo_file_size', :integer]
186
- assert_not_includes columns, ['photo_updated_at', :datetime]
187
- end
188
- end
189
-
190
- context "with no attachment" do
191
- should "raise an error" do
192
- assert_raise ArgumentError do
193
- Dummy.connection.remove_attachment :dummies
194
- end
195
- end
196
- end
197
- end
198
- end
199
- end
200
- end