paperclip 3.4.0 → 6.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (220) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +17 -0
  3. data/.github/issue_template.md +3 -0
  4. data/.gitignore +0 -6
  5. data/.hound.yml +1055 -0
  6. data/.rubocop.yml +1 -0
  7. data/.travis.yml +19 -12
  8. data/Appraisals +4 -11
  9. data/CONTRIBUTING.md +29 -13
  10. data/Gemfile +13 -4
  11. data/LICENSE +1 -3
  12. data/MIGRATING-ES.md +317 -0
  13. data/MIGRATING.md +375 -0
  14. data/NEWS +390 -71
  15. data/README.md +607 -152
  16. data/RELEASING.md +17 -0
  17. data/Rakefile +6 -8
  18. data/UPGRADING +12 -9
  19. data/features/basic_integration.feature +34 -21
  20. data/features/migration.feature +0 -24
  21. data/features/rake_tasks.feature +2 -3
  22. data/features/step_definitions/attachment_steps.rb +44 -36
  23. data/features/step_definitions/html_steps.rb +2 -2
  24. data/features/step_definitions/rails_steps.rb +125 -26
  25. data/features/step_definitions/s3_steps.rb +3 -3
  26. data/features/step_definitions/web_steps.rb +1 -103
  27. data/features/support/env.rb +3 -2
  28. data/features/support/fakeweb.rb +4 -1
  29. data/features/support/file_helpers.rb +12 -2
  30. data/features/support/fixtures/gemfile.txt +1 -1
  31. data/features/support/paths.rb +1 -1
  32. data/features/support/rails.rb +4 -11
  33. data/gemfiles/4.2.gemfile +17 -0
  34. data/gemfiles/5.0.gemfile +17 -0
  35. data/lib/generators/paperclip/paperclip_generator.rb +9 -3
  36. data/lib/generators/paperclip/templates/paperclip_migration.rb.erb +2 -2
  37. data/lib/paperclip/attachment.rb +215 -82
  38. data/lib/paperclip/attachment_registry.rb +60 -0
  39. data/lib/paperclip/callbacks.rb +13 -1
  40. data/lib/paperclip/content_type_detector.rb +48 -24
  41. data/lib/paperclip/errors.rb +8 -1
  42. data/lib/paperclip/file_command_content_type_detector.rb +6 -8
  43. data/lib/paperclip/filename_cleaner.rb +15 -0
  44. data/lib/paperclip/geometry_detector_factory.rb +12 -5
  45. data/lib/paperclip/geometry_parser_factory.rb +1 -1
  46. data/lib/paperclip/glue.rb +1 -2
  47. data/lib/paperclip/has_attached_file.rb +115 -0
  48. data/lib/paperclip/helpers.rb +15 -20
  49. data/lib/paperclip/interpolations/plural_cache.rb +18 -0
  50. data/lib/paperclip/interpolations.rb +36 -14
  51. data/lib/paperclip/io_adapters/abstract_adapter.rb +42 -5
  52. data/lib/paperclip/io_adapters/attachment_adapter.rb +20 -9
  53. data/lib/paperclip/io_adapters/data_uri_adapter.rb +22 -0
  54. data/lib/paperclip/io_adapters/empty_string_adapter.rb +19 -0
  55. data/lib/paperclip/io_adapters/file_adapter.rb +13 -7
  56. data/lib/paperclip/io_adapters/http_url_proxy_adapter.rb +16 -0
  57. data/lib/paperclip/io_adapters/identity_adapter.rb +12 -6
  58. data/lib/paperclip/io_adapters/nil_adapter.rb +8 -5
  59. data/lib/paperclip/io_adapters/registry.rb +6 -2
  60. data/lib/paperclip/io_adapters/stringio_adapter.rb +15 -16
  61. data/lib/paperclip/io_adapters/uploaded_file_adapter.rb +11 -7
  62. data/lib/paperclip/io_adapters/uri_adapter.rb +43 -19
  63. data/lib/paperclip/locales/en.yml +1 -0
  64. data/lib/paperclip/logger.rb +1 -1
  65. data/lib/paperclip/matchers/have_attached_file_matcher.rb +3 -6
  66. data/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb +4 -4
  67. data/lib/paperclip/matchers/validate_attachment_presence_matcher.rb +7 -2
  68. data/lib/paperclip/matchers/validate_attachment_size_matcher.rb +2 -1
  69. data/lib/paperclip/matchers.rb +1 -1
  70. data/lib/paperclip/media_type_spoof_detector.rb +93 -0
  71. data/lib/paperclip/missing_attachment_styles.rb +11 -16
  72. data/lib/paperclip/processor.rb +15 -43
  73. data/lib/paperclip/processor_helpers.rb +50 -0
  74. data/lib/paperclip/rails_environment.rb +25 -0
  75. data/lib/paperclip/schema.rb +10 -8
  76. data/lib/paperclip/storage/filesystem.rb +20 -5
  77. data/lib/paperclip/storage/fog.rb +49 -23
  78. data/lib/paperclip/storage/s3.rb +153 -82
  79. data/lib/paperclip/style.rb +8 -3
  80. data/lib/paperclip/tempfile_factory.rb +6 -4
  81. data/lib/paperclip/thumbnail.rb +35 -19
  82. data/lib/paperclip/url_generator.rb +26 -14
  83. data/lib/paperclip/validators/attachment_content_type_validator.rb +15 -2
  84. data/lib/paperclip/validators/attachment_file_name_validator.rb +80 -0
  85. data/lib/paperclip/validators/attachment_file_type_ignorance_validator.rb +29 -0
  86. data/lib/paperclip/validators/attachment_presence_validator.rb +12 -8
  87. data/lib/paperclip/validators/attachment_size_validator.rb +17 -10
  88. data/lib/paperclip/validators/media_type_spoof_detection_validator.rb +31 -0
  89. data/lib/paperclip/validators.rb +31 -3
  90. data/lib/paperclip/version.rb +3 -1
  91. data/lib/paperclip.rb +41 -55
  92. data/lib/tasks/paperclip.rake +56 -9
  93. data/paperclip.gemspec +18 -17
  94. data/shoulda_macros/paperclip.rb +13 -3
  95. data/spec/paperclip/attachment_definitions_spec.rb +13 -0
  96. data/spec/paperclip/attachment_processing_spec.rb +79 -0
  97. data/spec/paperclip/attachment_registry_spec.rb +158 -0
  98. data/{test/attachment_test.rb → spec/paperclip/attachment_spec.rb} +597 -389
  99. data/spec/paperclip/content_type_detector_spec.rb +48 -0
  100. data/spec/paperclip/file_command_content_type_detector_spec.rb +40 -0
  101. data/spec/paperclip/filename_cleaner_spec.rb +13 -0
  102. data/spec/paperclip/geometry_detector_spec.rb +39 -0
  103. data/{test/geometry_parser_test.rb → spec/paperclip/geometry_parser_spec.rb} +27 -27
  104. data/{test/geometry_test.rb → spec/paperclip/geometry_spec.rb} +50 -52
  105. data/spec/paperclip/glue_spec.rb +44 -0
  106. data/spec/paperclip/has_attached_file_spec.rb +158 -0
  107. data/{test/integration_test.rb → spec/paperclip/integration_spec.rb} +179 -199
  108. data/{test/interpolations_test.rb → spec/paperclip/interpolations_spec.rb} +79 -46
  109. data/spec/paperclip/io_adapters/abstract_adapter_spec.rb +160 -0
  110. data/{test/io_adapters/attachment_adapter_test.rb → spec/paperclip/io_adapters/attachment_adapter_spec.rb} +54 -25
  111. data/spec/paperclip/io_adapters/data_uri_adapter_spec.rb +89 -0
  112. data/spec/paperclip/io_adapters/empty_string_adapter_spec.rb +17 -0
  113. data/spec/paperclip/io_adapters/file_adapter_spec.rb +131 -0
  114. data/spec/paperclip/io_adapters/http_url_proxy_adapter_spec.rb +138 -0
  115. data/spec/paperclip/io_adapters/identity_adapter_spec.rb +8 -0
  116. data/{test/io_adapters/nil_adapter_test.rb → spec/paperclip/io_adapters/nil_adapter_spec.rb} +7 -7
  117. data/{test/io_adapters/registry_test.rb → spec/paperclip/io_adapters/registry_spec.rb} +12 -9
  118. data/spec/paperclip/io_adapters/stringio_adapter_spec.rb +64 -0
  119. data/spec/paperclip/io_adapters/uploaded_file_adapter_spec.rb +146 -0
  120. data/spec/paperclip/io_adapters/uri_adapter_spec.rb +220 -0
  121. data/spec/paperclip/matchers/have_attached_file_matcher_spec.rb +19 -0
  122. data/spec/paperclip/matchers/validate_attachment_content_type_matcher_spec.rb +109 -0
  123. data/spec/paperclip/matchers/validate_attachment_presence_matcher_spec.rb +69 -0
  124. data/spec/paperclip/matchers/validate_attachment_size_matcher_spec.rb +88 -0
  125. data/spec/paperclip/media_type_spoof_detector_spec.rb +120 -0
  126. data/spec/paperclip/meta_class_spec.rb +30 -0
  127. data/spec/paperclip/paperclip_missing_attachment_styles_spec.rb +84 -0
  128. data/spec/paperclip/paperclip_spec.rb +192 -0
  129. data/spec/paperclip/plural_cache_spec.rb +37 -0
  130. data/spec/paperclip/processor_helpers_spec.rb +57 -0
  131. data/{test/processor_test.rb → spec/paperclip/processor_spec.rb} +7 -7
  132. data/spec/paperclip/rails_environment_spec.rb +33 -0
  133. data/spec/paperclip/rake_spec.rb +103 -0
  134. data/spec/paperclip/schema_spec.rb +248 -0
  135. data/{test/storage/filesystem_test.rb → spec/paperclip/storage/filesystem_spec.rb} +18 -18
  136. data/spec/paperclip/storage/fog_spec.rb +566 -0
  137. data/spec/paperclip/storage/s3_live_spec.rb +188 -0
  138. data/spec/paperclip/storage/s3_spec.rb +1693 -0
  139. data/spec/paperclip/style_spec.rb +254 -0
  140. data/spec/paperclip/tempfile_factory_spec.rb +33 -0
  141. data/spec/paperclip/tempfile_spec.rb +35 -0
  142. data/{test/thumbnail_test.rb → spec/paperclip/thumbnail_spec.rb} +186 -141
  143. data/spec/paperclip/url_generator_spec.rb +221 -0
  144. data/spec/paperclip/validators/attachment_content_type_validator_spec.rb +322 -0
  145. data/spec/paperclip/validators/attachment_file_name_validator_spec.rb +160 -0
  146. data/{test/validators/attachment_presence_validator_test.rb → spec/paperclip/validators/attachment_presence_validator_spec.rb} +20 -20
  147. data/{test/validators/attachment_size_validator_test.rb → spec/paperclip/validators/attachment_size_validator_spec.rb} +87 -59
  148. data/spec/paperclip/validators/media_type_spoof_detection_validator_spec.rb +52 -0
  149. data/spec/paperclip/validators_spec.rb +164 -0
  150. data/spec/spec_helper.rb +46 -0
  151. data/spec/support/assertions.rb +82 -0
  152. data/spec/support/fake_model.rb +25 -0
  153. data/spec/support/fake_rails.rb +12 -0
  154. data/spec/support/fixtures/empty.html +1 -0
  155. data/spec/support/fixtures/empty.xlsx +0 -0
  156. data/spec/support/fixtures/spaced file.jpg +0 -0
  157. data/spec/support/matchers/accept.rb +5 -0
  158. data/spec/support/matchers/exist.rb +5 -0
  159. data/spec/support/matchers/have_column.rb +23 -0
  160. data/{test → spec}/support/mock_attachment.rb +2 -0
  161. data/{test → spec}/support/mock_url_generator_builder.rb +2 -2
  162. data/spec/support/model_reconstruction.rb +68 -0
  163. data/spec/support/reporting.rb +11 -0
  164. data/spec/support/test_data.rb +13 -0
  165. data/spec/support/version_helper.rb +9 -0
  166. metadata +395 -346
  167. data/Gemfile.lock +0 -200
  168. data/RUNNING_TESTS.md +0 -4
  169. data/cucumber/paperclip_steps.rb +0 -6
  170. data/gemfiles/3.0.gemfile +0 -11
  171. data/gemfiles/3.1.gemfile +0 -11
  172. data/gemfiles/3.2.gemfile +0 -11
  173. data/lib/paperclip/attachment_options.rb +0 -9
  174. data/lib/paperclip/instance_methods.rb +0 -35
  175. data/test/attachment_options_test.rb +0 -27
  176. data/test/attachment_processing_test.rb +0 -29
  177. data/test/content_type_detector_test.rb +0 -40
  178. data/test/file_command_content_type_detector_test.rb +0 -25
  179. data/test/generator_test.rb +0 -80
  180. data/test/geometry_detector_test.rb +0 -24
  181. data/test/helper.rb +0 -199
  182. data/test/io_adapters/abstract_adapter_test.rb +0 -50
  183. data/test/io_adapters/file_adapter_test.rb +0 -100
  184. data/test/io_adapters/identity_adapter_test.rb +0 -8
  185. data/test/io_adapters/stringio_adapter_test.rb +0 -51
  186. data/test/io_adapters/uploaded_file_adapter_test.rb +0 -123
  187. data/test/io_adapters/uri_adapter_test.rb +0 -86
  188. data/test/matchers/have_attached_file_matcher_test.rb +0 -24
  189. data/test/matchers/validate_attachment_content_type_matcher_test.rb +0 -110
  190. data/test/matchers/validate_attachment_presence_matcher_test.rb +0 -47
  191. data/test/matchers/validate_attachment_size_matcher_test.rb +0 -86
  192. data/test/meta_class_test.rb +0 -32
  193. data/test/paperclip_missing_attachment_styles_test.rb +0 -94
  194. data/test/paperclip_test.rb +0 -259
  195. data/test/schema_test.rb +0 -200
  196. data/test/storage/fog_test.rb +0 -453
  197. data/test/storage/s3_live_test.rb +0 -179
  198. data/test/storage/s3_test.rb +0 -1236
  199. data/test/style_test.rb +0 -213
  200. data/test/support/mock_model.rb +0 -2
  201. data/test/tempfile_factory_test.rb +0 -13
  202. data/test/url_generator_test.rb +0 -187
  203. data/test/validators/attachment_content_type_validator_test.rb +0 -292
  204. data/test/validators_test.rb +0 -25
  205. /data/{test → spec}/database.yml +0 -0
  206. /data/{test → spec/support}/fixtures/12k.png +0 -0
  207. /data/{test → spec/support}/fixtures/50x50.png +0 -0
  208. /data/{test → spec/support}/fixtures/5k.png +0 -0
  209. /data/{test → spec/support}/fixtures/animated +0 -0
  210. /data/{test → spec/support}/fixtures/animated.gif +0 -0
  211. /data/{test → spec/support}/fixtures/animated.unknown +0 -0
  212. /data/{test → spec/support}/fixtures/bad.png +0 -0
  213. /data/{test → spec/support}/fixtures/fog.yml +0 -0
  214. /data/{test → spec/support}/fixtures/rotated.jpg +0 -0
  215. /data/{test → spec/support}/fixtures/s3.yml +0 -0
  216. /data/{test → spec/support}/fixtures/spaced file.png +0 -0
  217. /data/{test → spec/support}/fixtures/text.txt +0 -0
  218. /data/{test → spec/support}/fixtures/twopage.pdf +0 -0
  219. /data/{test → spec/support}/fixtures/uppercase.PNG +0 -0
  220. /data/{test → spec}/support/mock_interpolator.rb +0 -0
@@ -1,292 +0,0 @@
1
- require './test/helper'
2
-
3
- class AttachmentContentTypeValidatorTest < Test::Unit::TestCase
4
- def setup
5
- rebuild_model
6
- @dummy = Dummy.new
7
- end
8
-
9
- def build_validator(options)
10
- @validator = Paperclip::Validators::AttachmentContentTypeValidator.new(options.merge(
11
- :attributes => :avatar
12
- ))
13
- end
14
-
15
- context "with a nil content type" do
16
- setup do
17
- build_validator :content_type => "image/jpg"
18
- @dummy.stubs(:avatar_content_type => nil)
19
- @validator.validate(@dummy)
20
- end
21
-
22
- should "not set an error message" do
23
- assert @dummy.errors[:avatar_content_type].blank?
24
- end
25
- end
26
-
27
- context "with :allow_nil option" do
28
- context "as true" do
29
- setup do
30
- build_validator :content_type => "image/png", :allow_nil => true
31
- @dummy.stubs(:avatar_content_type => nil)
32
- @validator.validate(@dummy)
33
- end
34
-
35
- should "allow avatar_content_type as nil" do
36
- assert @dummy.errors[:avatar_content_type].blank?
37
- end
38
- end
39
-
40
- context "as false" do
41
- setup do
42
- build_validator :content_type => "image/png", :allow_nil => false
43
- @dummy.stubs(:avatar_content_type => nil)
44
- @validator.validate(@dummy)
45
- end
46
-
47
- should "not allow avatar_content_type as nil" do
48
- assert @dummy.errors[:avatar_content_type].present?
49
- end
50
- end
51
- end
52
-
53
- context "with :allow_blank option" do
54
- context "as true" do
55
- setup do
56
- build_validator :content_type => "image/png", :allow_blank => true
57
- @dummy.stubs(:avatar_content_type => "")
58
- @validator.validate(@dummy)
59
- end
60
-
61
- should "allow avatar_content_type as blank" do
62
- assert @dummy.errors[:avatar_content_type].blank?
63
- end
64
- end
65
-
66
- context "as false" do
67
- setup do
68
- build_validator :content_type => "image/png", :allow_blank => false
69
- @dummy.stubs(:avatar_content_type => "")
70
- @validator.validate(@dummy)
71
- end
72
-
73
- should "not allow avatar_content_type as blank" do
74
- assert @dummy.errors[:avatar_content_type].present?
75
- end
76
- end
77
- end
78
-
79
- context "whitelist format" do
80
- context "with an allowed type" do
81
- context "as a string" do
82
- setup do
83
- build_validator :content_type => "image/jpg"
84
- @dummy.stubs(:avatar_content_type => "image/jpg")
85
- @validator.validate(@dummy)
86
- end
87
-
88
- should "not set an error message" do
89
- assert @dummy.errors[:avatar_content_type].blank?
90
- end
91
- end
92
-
93
- context "as an regexp" do
94
- setup do
95
- build_validator :content_type => /^image\/.*/
96
- @dummy.stubs(:avatar_content_type => "image/jpg")
97
- @validator.validate(@dummy)
98
- end
99
-
100
- should "not set an error message" do
101
- assert @dummy.errors[:avatar_content_type].blank?
102
- end
103
- end
104
-
105
- context "as a list" do
106
- setup do
107
- build_validator :content_type => ["image/png", "image/jpg", "image/jpeg"]
108
- @dummy.stubs(:avatar_content_type => "image/jpg")
109
- @validator.validate(@dummy)
110
- end
111
-
112
- should "not set an error message" do
113
- assert @dummy.errors[:avatar_content_type].blank?
114
- end
115
- end
116
- end
117
-
118
- context "with a disallowed type" do
119
- context "as a string" do
120
- setup do
121
- build_validator :content_type => "image/png"
122
- @dummy.stubs(:avatar_content_type => "image/jpg")
123
- @validator.validate(@dummy)
124
- end
125
-
126
- should "set a correct default error message" do
127
- assert @dummy.errors[:avatar_content_type].present?
128
- assert_includes @dummy.errors[:avatar_content_type], "is invalid"
129
- end
130
- end
131
-
132
- context "as a regexp" do
133
- setup do
134
- build_validator :content_type => /^text\/.*/
135
- @dummy.stubs(:avatar_content_type => "image/jpg")
136
- @validator.validate(@dummy)
137
- end
138
-
139
- should "set a correct default error message" do
140
- assert @dummy.errors[:avatar_content_type].present?
141
- assert_includes @dummy.errors[:avatar_content_type], "is invalid"
142
- end
143
- end
144
-
145
- context "with :message option" do
146
- context "without interpolation" do
147
- setup do
148
- build_validator :content_type => "image/png", :message => "should be a PNG image"
149
- @dummy.stubs(:avatar_content_type => "image/jpg")
150
- @validator.validate(@dummy)
151
- end
152
-
153
- should "set a correct error message" do
154
- assert_includes @dummy.errors[:avatar_content_type], "should be a PNG image"
155
- end
156
- end
157
-
158
- context "with interpolation" do
159
- setup do
160
- build_validator :content_type => "image/png", :message => "should have content type %{types}"
161
- @dummy.stubs(:avatar_content_type => "image/jpg")
162
- @validator.validate(@dummy)
163
- end
164
-
165
- should "set a correct error message" do
166
- assert_includes @dummy.errors[:avatar_content_type], "should have content type image/png"
167
- end
168
- end
169
- end
170
- end
171
- end
172
-
173
- context "blacklist format" do
174
- context "with an allowed type" do
175
- context "as a string" do
176
- setup do
177
- build_validator :not => "image/gif"
178
- @dummy.stubs(:avatar_content_type => "image/jpg")
179
- @validator.validate(@dummy)
180
- end
181
-
182
- should "not set an error message" do
183
- assert @dummy.errors[:avatar_content_type].blank?
184
- end
185
- end
186
-
187
- context "as an regexp" do
188
- setup do
189
- build_validator :not => /^text\/.*/
190
- @dummy.stubs(:avatar_content_type => "image/jpg")
191
- @validator.validate(@dummy)
192
- end
193
-
194
- should "not set an error message" do
195
- assert @dummy.errors[:avatar_content_type].blank?
196
- end
197
- end
198
-
199
- context "as a list" do
200
- setup do
201
- build_validator :not => ["image/png", "image/jpg", "image/jpeg"]
202
- @dummy.stubs(:avatar_content_type => "image/gif")
203
- @validator.validate(@dummy)
204
- end
205
-
206
- should "not set an error message" do
207
- assert @dummy.errors[:avatar_content_type].blank?
208
- end
209
- end
210
- end
211
-
212
- context "with a disallowed type" do
213
- context "as a string" do
214
- setup do
215
- build_validator :not => "image/png"
216
- @dummy.stubs(:avatar_content_type => "image/png")
217
- @validator.validate(@dummy)
218
- end
219
-
220
- should "set a correct default error message" do
221
- assert @dummy.errors[:avatar_content_type].present?
222
- assert_includes @dummy.errors[:avatar_content_type], "is invalid"
223
- end
224
- end
225
-
226
- context "as a regexp" do
227
- setup do
228
- build_validator :not => /^text\/.*/
229
- @dummy.stubs(:avatar_content_type => "text/plain")
230
- @validator.validate(@dummy)
231
- end
232
-
233
- should "set a correct default error message" do
234
- assert @dummy.errors[:avatar_content_type].present?
235
- assert_includes @dummy.errors[:avatar_content_type], "is invalid"
236
- end
237
- end
238
-
239
- context "with :message option" do
240
- context "without interpolation" do
241
- setup do
242
- build_validator :not => "image/png", :message => "should not be a PNG image"
243
- @dummy.stubs(:avatar_content_type => "image/png")
244
- @validator.validate(@dummy)
245
- end
246
-
247
- should "set a correct error message" do
248
- assert_includes @dummy.errors[:avatar_content_type], "should not be a PNG image"
249
- end
250
- end
251
-
252
- context "with interpolation" do
253
- setup do
254
- build_validator :not => "image/png", :message => "should not have content type %{types}"
255
- @dummy.stubs(:avatar_content_type => "image/png")
256
- @validator.validate(@dummy)
257
- end
258
-
259
- should "set a correct error message" do
260
- assert_includes @dummy.errors[:avatar_content_type], "should not have content type image/png"
261
- end
262
- end
263
- end
264
- end
265
- end
266
-
267
- context "using the helper" do
268
- setup do
269
- Dummy.validates_attachment_content_type :avatar, :content_type => "image/jpg"
270
- end
271
-
272
- should "add the validator to the class" do
273
- assert Dummy.validators_on(:avatar).any?{ |validator| validator.kind == :attachment_content_type }
274
- end
275
- end
276
-
277
- context "given options" do
278
- should "raise argument error if no required argument was given" do
279
- assert_raises(ArgumentError) do
280
- build_validator :message => "Some message"
281
- end
282
- end
283
-
284
- should "not raise argument error if :content_type was given" do
285
- build_validator :content_type => "image/jpg"
286
- end
287
-
288
- should "not raise argument error if :not was given" do
289
- build_validator :not => "image/jpg"
290
- end
291
- end
292
- end
@@ -1,25 +0,0 @@
1
- require './test/helper'
2
-
3
- class ValidatorsTest < Test::Unit::TestCase
4
- def setup
5
- rebuild_model
6
- end
7
-
8
- context "using the helper" do
9
- setup do
10
- Dummy.validates_attachment :avatar, :presence => true, :content_type => { :content_type => "image/jpg" }, :size => { :in => 0..10.kilobytes }
11
- end
12
-
13
- should "add the attachment_presence validator to the class" do
14
- assert Dummy.validators_on(:avatar).any?{ |validator| validator.kind == :attachment_presence }
15
- end
16
-
17
- should "add the attachment_content_type validator to the class" do
18
- assert Dummy.validators_on(:avatar).any?{ |validator| validator.kind == :attachment_content_type }
19
- end
20
-
21
- should "add the attachment_size validator to the class" do
22
- assert Dummy.validators_on(:avatar).any?{ |validator| validator.kind == :attachment_size }
23
- end
24
- end
25
- end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes