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
data/paperclip.gemspec CHANGED
@@ -12,38 +12,40 @@ Gem::Specification.new do |s|
12
12
  s.description = "Easy upload management for ActiveRecord"
13
13
  s.license = "MIT"
14
14
 
15
- s.rubyforge_project = "paperclip"
16
-
17
15
  s.files = `git ls-files`.split("\n")
18
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.test_files = `git ls-files -- {spec,features}/*`.split("\n")
19
17
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
18
  s.require_paths = ["lib"]
21
19
 
22
20
  s.requirements << "ImageMagick"
23
21
  s.required_ruby_version = ">= 1.9.2"
24
22
 
25
- s.add_dependency('activemodel', '>= 3.0.0')
26
- s.add_dependency('activesupport', '>= 3.0.0')
27
- s.add_dependency('cocaine', '~> 0.5.3')
23
+ s.add_dependency('activemodel', '>= 3.2.0')
24
+ s.add_dependency('activesupport', '>= 3.2.0')
25
+ s.add_dependency('cocaine', '~> 0.5.5')
28
26
  s.add_dependency('mime-types')
27
+ s.add_dependency('mimemagic', '0.3.0')
29
28
 
30
- s.add_development_dependency('activerecord', '>= 3.0.0')
29
+ s.add_development_dependency('activerecord', '>= 3.2.0')
31
30
  s.add_development_dependency('shoulda')
31
+ s.add_development_dependency('rspec', '~> 3.0')
32
32
  s.add_development_dependency('appraisal')
33
33
  s.add_development_dependency('mocha')
34
- s.add_development_dependency('aws-sdk', '>= 1.5.7')
34
+ s.add_development_dependency('aws-sdk', '>= 1.5.7', "<= 2.0")
35
35
  s.add_development_dependency('bourne')
36
- s.add_development_dependency('sqlite3', '~> 1.3.4')
37
- s.add_development_dependency('cucumber', '~> 1.2.1')
38
- s.add_development_dependency('aruba')
36
+ s.add_development_dependency('cucumber', '~> 1.3.18')
37
+ s.add_development_dependency('aruba', '~> 0.9.0')
39
38
  s.add_development_dependency('nokogiri')
40
39
  # Ruby version < 1.9.3 can't install capybara > 2.0.3.
41
- s.add_development_dependency('capybara', '= 2.0.3')
40
+ s.add_development_dependency('capybara')
42
41
  s.add_development_dependency('bundler')
43
- s.add_development_dependency('fog', '~> 1.0')
42
+ s.add_development_dependency('fog-aws')
43
+ s.add_development_dependency('fog-local')
44
44
  s.add_development_dependency('launchy')
45
45
  s.add_development_dependency('rake')
46
46
  s.add_development_dependency('fakeweb')
47
47
  s.add_development_dependency('railties')
48
- s.add_development_dependency('actionmailer', '>= 3.0.0')
48
+ s.add_development_dependency('actionmailer', '>= 3.2.0')
49
+ s.add_development_dependency('generator_spec')
50
+ s.add_development_dependency('timecop')
49
51
  end
@@ -132,4 +132,3 @@ elsif defined?(Test)
132
132
  extend Paperclip::Shoulda
133
133
  end
134
134
  end
135
-
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Attachment Definitions" do
4
+ it 'returns all of the attachments on the class' do
5
+ reset_class "Dummy"
6
+ Dummy.has_attached_file :avatar, {path: "abc"}
7
+ Dummy.has_attached_file :other_attachment, {url: "123"}
8
+ Dummy.do_not_validate_attachment_file_type :avatar
9
+ expected = {avatar: {path: "abc"}, other_attachment: {url: "123"}}
10
+
11
+ expect(Dummy.attachment_definitions).to eq expected
12
+ end
13
+ end
@@ -1,16 +1,15 @@
1
1
  # encoding: utf-8
2
- require './test/helper'
3
- require 'paperclip/attachment'
4
-
5
- class AttachmentProcessingTest < Test::Unit::TestCase
6
- def setup
7
- rebuild_model
8
- end
2
+ require 'spec_helper'
9
3
 
4
+ describe 'Attachment Processing' do
10
5
  context 'using validates_attachment_content_type' do
11
- should 'process attachments given a valid assignment' do
6
+ before do
7
+ rebuild_class
8
+ end
9
+
10
+ it 'processes attachments given a valid assignment' do
12
11
  file = File.new(fixture_file("5k.png"))
13
- Dummy.validates_attachment_content_type :avatar, :content_type => "image/png"
12
+ Dummy.validates_attachment_content_type :avatar, content_type: "image/png"
14
13
  instance = Dummy.new
15
14
  attachment = instance.avatar
16
15
  attachment.expects(:post_process_styles)
@@ -18,9 +17,9 @@ class AttachmentProcessingTest < Test::Unit::TestCase
18
17
  attachment.assign(file)
19
18
  end
20
19
 
21
- should 'not process attachments given an invalid assignment with :not' do
20
+ it 'does not process attachments given an invalid assignment with :not' do
22
21
  file = File.new(fixture_file("5k.png"))
23
- Dummy.validates_attachment_content_type :avatar, :not => "image/png"
22
+ Dummy.validates_attachment_content_type :avatar, not: "image/png"
24
23
  instance = Dummy.new
25
24
  attachment = instance.avatar
26
25
  attachment.expects(:post_process_styles).never
@@ -28,9 +27,9 @@ class AttachmentProcessingTest < Test::Unit::TestCase
28
27
  attachment.assign(file)
29
28
  end
30
29
 
31
- should 'not process attachments given an invalid assignment with :content_type' do
30
+ it 'does not process attachments given an invalid assignment with :content_type' do
32
31
  file = File.new(fixture_file("5k.png"))
33
- Dummy.validates_attachment_content_type :avatar, :content_type => "image/tiff"
32
+ Dummy.validates_attachment_content_type :avatar, content_type: "image/tiff"
34
33
  instance = Dummy.new
35
34
  attachment = instance.avatar
36
35
  attachment.expects(:post_process_styles).never
@@ -38,9 +37,9 @@ class AttachmentProcessingTest < Test::Unit::TestCase
38
37
  attachment.assign(file)
39
38
  end
40
39
 
41
- should 'when validation :if clause returns false, allow what would be an invalid assignment' do
40
+ it 'allows what would be an invalid assignment when validation :if clause returns false' do
42
41
  invalid_assignment = File.new(fixture_file("5k.png"))
43
- Dummy.validates_attachment_content_type :avatar, :content_type => "image/tiff", :if => lambda{false}
42
+ Dummy.validates_attachment_content_type :avatar, content_type: "image/tiff", if: lambda{false}
44
43
  instance = Dummy.new
45
44
  attachment = instance.avatar
46
45
  attachment.expects(:post_process_styles)
@@ -50,9 +49,9 @@ class AttachmentProcessingTest < Test::Unit::TestCase
50
49
  end
51
50
 
52
51
  context 'using validates_attachment' do
53
- should 'process attachments given a valid assignment' do
52
+ it 'processes attachments given a valid assignment' do
54
53
  file = File.new(fixture_file("5k.png"))
55
- Dummy.validates_attachment :avatar, :content_type => {:content_type => "image/png"}
54
+ Dummy.validates_attachment :avatar, content_type: {content_type: "image/png"}
56
55
  instance = Dummy.new
57
56
  attachment = instance.avatar
58
57
  attachment.expects(:post_process_styles)
@@ -60,9 +59,9 @@ class AttachmentProcessingTest < Test::Unit::TestCase
60
59
  attachment.assign(file)
61
60
  end
62
61
 
63
- should 'not process attachments given an invalid assignment with :not' do
62
+ it 'does not process attachments given an invalid assignment with :not' do
64
63
  file = File.new(fixture_file("5k.png"))
65
- Dummy.validates_attachment :avatar, :content_type => {:not => "image/png"}
64
+ Dummy.validates_attachment :avatar, content_type: {not: "image/png"}
66
65
  instance = Dummy.new
67
66
  attachment = instance.avatar
68
67
  attachment.expects(:post_process_styles).never
@@ -70,9 +69,9 @@ class AttachmentProcessingTest < Test::Unit::TestCase
70
69
  attachment.assign(file)
71
70
  end
72
71
 
73
- should 'not process attachments given an invalid assignment with :content_type' do
72
+ it 'does not process attachments given an invalid assignment with :content_type' do
74
73
  file = File.new(fixture_file("5k.png"))
75
- Dummy.validates_attachment :avatar, :content_type => {:content_type => "image/tiff"}
74
+ Dummy.validates_attachment :avatar, content_type: {content_type: "image/tiff"}
76
75
  instance = Dummy.new
77
76
  attachment = instance.avatar
78
77
  attachment.expects(:post_process_styles).never
@@ -0,0 +1,130 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Attachment Registry' do
4
+ before do
5
+ Paperclip::AttachmentRegistry.clear
6
+ end
7
+
8
+ context '.names_for' do
9
+ it 'includes attachment names for the given class' do
10
+ foo = Class.new
11
+ Paperclip::AttachmentRegistry.register(foo, :avatar, {})
12
+
13
+ assert_equal [:avatar], Paperclip::AttachmentRegistry.names_for(foo)
14
+ end
15
+
16
+ it 'does not include attachment names for other classes' do
17
+ foo = Class.new
18
+ bar = Class.new
19
+ Paperclip::AttachmentRegistry.register(foo, :avatar, {})
20
+ Paperclip::AttachmentRegistry.register(bar, :lover, {})
21
+
22
+ assert_equal [:lover], Paperclip::AttachmentRegistry.names_for(bar)
23
+ end
24
+
25
+ it 'produces the empty array for a missing key' do
26
+ assert_empty Paperclip::AttachmentRegistry.names_for(Class.new)
27
+ end
28
+ end
29
+
30
+ context '.each_definition' do
31
+ it 'calls the block with the class, attachment name, and options' do
32
+ foo = Class.new
33
+ expected_accumulations = [
34
+ [foo, :avatar, { yo: "greeting" }],
35
+ [foo, :greeter, { ciao: "greeting" }]
36
+ ]
37
+ expected_accumulations.each do |args|
38
+ Paperclip::AttachmentRegistry.register(*args)
39
+ end
40
+ accumulations = []
41
+
42
+ Paperclip::AttachmentRegistry.each_definition do |*args|
43
+ accumulations << args
44
+ end
45
+
46
+ assert_equal expected_accumulations, accumulations
47
+ end
48
+ end
49
+
50
+ context '.definitions_for' do
51
+ it 'produces the attachment name and options' do
52
+ expected_definitions = {
53
+ avatar: { yo: "greeting" },
54
+ greeter: { ciao: "greeting" }
55
+ }
56
+ foo = Class.new
57
+ Paperclip::AttachmentRegistry.register(
58
+ foo,
59
+ :avatar,
60
+ yo: "greeting"
61
+ )
62
+ Paperclip::AttachmentRegistry.register(
63
+ foo,
64
+ :greeter,
65
+ ciao: "greeting"
66
+ )
67
+
68
+ definitions = Paperclip::AttachmentRegistry.definitions_for(foo)
69
+
70
+ assert_equal expected_definitions, definitions
71
+ end
72
+
73
+ it 'produces defintions for subclasses' do
74
+ expected_definitions = { avatar: { yo: "greeting" } }
75
+ foo = Class.new
76
+ bar = Class.new(foo)
77
+ Paperclip::AttachmentRegistry.register(
78
+ foo,
79
+ :avatar,
80
+ expected_definitions[:avatar]
81
+ )
82
+
83
+ definitions = Paperclip::AttachmentRegistry.definitions_for(bar)
84
+
85
+ assert_equal expected_definitions, definitions
86
+ end
87
+
88
+ it 'produces defintions for subclasses but deep merging them' do
89
+ foo_definitions = { avatar: { yo: "greeting" } }
90
+ bar_definitions = { avatar: { ciao: "greeting" } }
91
+ expected_definitions = {
92
+ avatar: {
93
+ yo: "greeting",
94
+ ciao: "greeting"
95
+ }
96
+ }
97
+ foo = Class.new
98
+ bar = Class.new(foo)
99
+ Paperclip::AttachmentRegistry.register(
100
+ foo,
101
+ :avatar,
102
+ foo_definitions[:avatar]
103
+ )
104
+ Paperclip::AttachmentRegistry.register(
105
+ bar,
106
+ :avatar,
107
+ bar_definitions[:avatar]
108
+ )
109
+
110
+ definitions = Paperclip::AttachmentRegistry.definitions_for(bar)
111
+
112
+ assert_equal expected_definitions, definitions
113
+ end
114
+ end
115
+
116
+ context '.clear' do
117
+ it 'removes all of the existing attachment definitions' do
118
+ foo = Class.new
119
+ Paperclip::AttachmentRegistry.register(
120
+ foo,
121
+ :greeter,
122
+ ciao: "greeting"
123
+ )
124
+
125
+ Paperclip::AttachmentRegistry.clear
126
+
127
+ assert_empty Paperclip::AttachmentRegistry.names_for(foo)
128
+ end
129
+ end
130
+ end