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/RUNNING_TESTS.md DELETED
@@ -1,4 +0,0 @@
1
- Running Tests
2
- =============
3
-
4
- Please see `CONTRIBUTING.md` in "Running Tests" section for more information.
data/gemfiles/3.0.gemfile DELETED
@@ -1,11 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "jruby-openssl", :platform=>:jruby
6
- gem "activerecord-jdbcsqlite3-adapter", :platform=>:jruby
7
- gem "pry", :platform=>:ruby
8
- gem "rails", "~> 3.0.20"
9
- gem "paperclip", :path=>"../"
10
-
11
- gemspec :path=>"../"
data/gemfiles/3.1.gemfile DELETED
@@ -1,11 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "jruby-openssl", :platform=>:jruby
6
- gem "activerecord-jdbcsqlite3-adapter", :platform=>:jruby
7
- gem "pry", :platform=>:ruby
8
- gem "rails", "~> 3.1.12"
9
- gem "paperclip", :path=>"../"
10
-
11
- gemspec :path=>"../"
data/gemfiles/4.0.gemfile DELETED
@@ -1,11 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "jruby-openssl", :platform=>:jruby
6
- gem "activerecord-jdbcsqlite3-adapter", :platform=>:jruby
7
- gem "pry", :platform=>:ruby
8
- gem "rails", "~> 4.0.0"
9
- gem "paperclip", :path=>"../"
10
-
11
- gemspec :path=>"../"
@@ -1,12 +0,0 @@
1
- require './test/helper'
2
-
3
- class AttachmentDefinitionsTest < Test::Unit::TestCase
4
- should 'return 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
- expected = {:avatar => {:path => "abc"}, :other_attachment => {:url => "123"}}
9
-
10
- assert_equal expected, Dummy.attachment_definitions
11
- end
12
- end
@@ -1,88 +0,0 @@
1
- require './test/helper'
2
- require 'paperclip/attachment_registry'
3
-
4
- class AttachmentRegistryTest < Test::Unit::TestCase
5
- def setup
6
- Paperclip::AttachmentRegistry.clear
7
- end
8
-
9
- context '.names_for' do
10
- should 'include attachment names for the given class' do
11
- foo = Class.new
12
- Paperclip::AttachmentRegistry.register(foo, :avatar, {})
13
-
14
- assert_equal [:avatar], Paperclip::AttachmentRegistry.names_for(foo)
15
- end
16
-
17
- should 'not include attachment names for other classes' do
18
- foo = Class.new
19
- bar = Class.new
20
- Paperclip::AttachmentRegistry.register(foo, :avatar, {})
21
- Paperclip::AttachmentRegistry.register(bar, :lover, {})
22
-
23
- assert_equal [:lover], Paperclip::AttachmentRegistry.names_for(bar)
24
- end
25
-
26
- should 'produce the empty array for a missing key' do
27
- assert_empty Paperclip::AttachmentRegistry.names_for(Class.new)
28
- end
29
- end
30
-
31
- context '.each_definition' do
32
- should 'call the block with the class, attachment name, and options' do
33
- foo = Class.new
34
- expected_accumulations = [
35
- [foo, :avatar, { yo: 'greeting' }],
36
- [foo, :greeter, { ciao: 'greeting' }]
37
- ]
38
- expected_accumulations.each do |args|
39
- Paperclip::AttachmentRegistry.register(*args)
40
- end
41
- accumulations = []
42
-
43
- Paperclip::AttachmentRegistry.each_definition do |*args|
44
- accumulations << args
45
- end
46
-
47
- assert_equal expected_accumulations, accumulations
48
- end
49
- end
50
-
51
- context '.definitions_for' do
52
- should 'produce the attachment name and options' do
53
- expected_definitions = {
54
- avatar: { yo: 'greeting' },
55
- greeter: { ciao: 'greeting' }
56
- }
57
- foo = Class.new
58
- Paperclip::AttachmentRegistry.register(foo, :avatar, { yo: 'greeting' })
59
- Paperclip::AttachmentRegistry.register(foo, :greeter, { ciao: 'greeting' })
60
-
61
- definitions = Paperclip::AttachmentRegistry.definitions_for(foo)
62
-
63
- assert_equal expected_definitions, definitions
64
- end
65
-
66
- should "produce defintions for subclasses" do
67
- expected_definitions = { avatar: { yo: 'greeting' } }
68
- Foo = Class.new
69
- Bar = Class.new(Foo)
70
- Paperclip::AttachmentRegistry.register(Foo, :avatar, expected_definitions[:avatar])
71
-
72
- definitions = Paperclip::AttachmentRegistry.definitions_for(Bar)
73
-
74
- assert_equal expected_definitions, definitions
75
- end
76
- end
77
-
78
- context '.clear' do
79
- should 'remove all of the existing attachment definitions' do
80
- foo = Class.new
81
- Paperclip::AttachmentRegistry.register(foo, :greeter, { ciao: 'greeting' })
82
-
83
- Paperclip::AttachmentRegistry.clear
84
-
85
- assert_empty Paperclip::AttachmentRegistry.names_for(foo)
86
- end
87
- end
88
- end
@@ -1,14 +0,0 @@
1
- # encoding: utf-8
2
- require './test/helper'
3
-
4
- class FilenameCleanerTest < Test::Unit::TestCase
5
- should 'convert invalid characters to underscores' do
6
- cleaner = Paperclip::FilenameCleaner.new(/[aeiou]/)
7
- assert_equal "b_s_b_ll", cleaner.call("baseball")
8
- end
9
-
10
- should 'not convert anything if the character regex is nil' do
11
- cleaner = Paperclip::FilenameCleaner.new(nil)
12
- assert_equal "baseball", cleaner.call("baseball")
13
- end
14
- end
@@ -1,84 +0,0 @@
1
- require './test/helper'
2
- require 'rails/generators'
3
- require 'generators/paperclip/paperclip_generator'
4
-
5
- class GeneratorTest < Rails::Generators::TestCase
6
- tests PaperclipGenerator
7
- destination File.expand_path("../tmp", File.dirname(__FILE__))
8
- setup :prepare_destination
9
-
10
- context 'running migration' do
11
- context 'with single attachment name' do
12
- setup do
13
- run_generator %w(user avatar)
14
- end
15
-
16
- should 'create a correct migration file' do
17
- assert_migration 'db/migrate/add_attachment_avatar_to_users.rb' do |migration|
18
- assert_match /class AddAttachmentAvatarToUsers/, migration
19
-
20
- assert_class_method :up, migration do |up|
21
- expected = <<-migration
22
- change_table :users do |t|
23
- t.attachment :avatar
24
- end
25
- migration
26
-
27
- assert_equal expected.squish, up.squish
28
- end
29
-
30
- assert_class_method :down, migration do |down|
31
- expected = <<-migration
32
- drop_attached_file :users, :avatar
33
- migration
34
-
35
- assert_equal expected.squish, down.squish
36
- end
37
- end
38
- end
39
- end
40
-
41
- context 'with multiple attachment names' do
42
- setup do
43
- run_generator %w(user avatar photo)
44
- end
45
-
46
- should 'create a correct migration file' do
47
- assert_migration 'db/migrate/add_attachment_avatar_photo_to_users.rb' do |migration|
48
- assert_match /class AddAttachmentAvatarPhotoToUsers/, migration
49
-
50
- assert_class_method :up, migration do |up|
51
- expected = <<-migration
52
- change_table :users do |t|
53
- t.attachment :avatar
54
- t.attachment :photo
55
- end
56
- migration
57
-
58
- assert_equal expected.squish, up.squish
59
- end
60
-
61
- assert_class_method :down, migration do |down|
62
- expected = <<-migration
63
- drop_attached_file :users, :avatar
64
- drop_attached_file :users, :photo
65
- migration
66
-
67
- assert_equal expected.squish, down.squish
68
- end
69
- end
70
- end
71
- end
72
-
73
- context 'without required arguments' do
74
- should 'not create the migration' do
75
- begin
76
- silence_stream(STDERR) { run_generator %w() }
77
- assert_no_migration 'db/migrate/add_attachment_avatar_to_users.rb'
78
- rescue Thor::RequiredArgumentMissingError
79
- # This is also OK. It happens in 1.9.2 and Rails 3.2
80
- end
81
- end
82
- end
83
- end
84
- end
@@ -1,24 +0,0 @@
1
- require './test/helper'
2
-
3
- class GeometryDetectorTest < Test::Unit::TestCase
4
- should 'identify an image and extract its dimensions' do
5
- Paperclip::GeometryParser.stubs(:new).with("434x66,").returns(stub(:make => :correct))
6
- file = fixture_file("5k.png")
7
- factory = Paperclip::GeometryDetector.new(file)
8
-
9
- output = factory.make
10
-
11
- assert_equal :correct, output
12
- end
13
-
14
- should 'identify an image and extract its dimensions and orientation' do
15
- Paperclip::GeometryParser.stubs(:new).with("300x200,6").returns(stub(:make => :correct))
16
- file = fixture_file("rotated.jpg")
17
- factory = Paperclip::GeometryDetector.new(file)
18
-
19
- output = factory.make
20
-
21
- assert_equal :correct, output
22
- end
23
- end
24
-
data/test/helper.rb DELETED
@@ -1,232 +0,0 @@
1
- require 'rubygems'
2
- require 'tempfile'
3
- require 'pathname'
4
- require 'test/unit'
5
- require 'active_record'
6
- require 'active_record/version'
7
- require 'active_support'
8
- require 'active_support/core_ext'
9
- require 'shoulda'
10
- require 'mocha/setup'
11
- require 'bourne'
12
- require 'shoulda/context'
13
- require 'mime/types'
14
- require 'pathname'
15
- require 'ostruct'
16
-
17
- begin
18
- require 'pry'
19
- rescue LoadError
20
- # Pry is not available, just ignore.
21
- end
22
-
23
- puts "Testing against version #{ActiveRecord::VERSION::STRING}"
24
-
25
- `ruby -e 'exit 0'` # Prime $? with a value.
26
-
27
- begin
28
- require 'ruby-debug'
29
- rescue LoadError
30
- puts "debugger disabled"
31
- end
32
-
33
- ROOT = Pathname(File.expand_path(File.join(File.dirname(__FILE__), '..')))
34
-
35
- $previous_count = 0
36
- class Test::Unit::TestCase
37
- def setup
38
- silence_warnings do
39
- Object.const_set(:Rails, stub('Rails'))
40
- Rails.stubs(:root).returns(Pathname.new(ROOT).join('tmp'))
41
- Rails.stubs(:env).returns('test')
42
- Rails.stubs(:const_defined?).with(:Railtie).returns(false)
43
- end
44
- end
45
-
46
- def teardown
47
- end
48
-
49
- def report_files
50
- files = []
51
- ObjectSpace.each_object(IO){|io| files << io unless io.closed? }
52
- if files.count > $previous_count
53
- puts __name__
54
- puts "#{files.count} files"
55
- files.each do |file|
56
- puts "Open IO: #{file.inspect}"
57
- end
58
- end
59
- $previous_count = files.count
60
- end
61
- end
62
-
63
- $LOAD_PATH << File.join(ROOT, 'lib')
64
- $LOAD_PATH << File.join(ROOT, 'lib', 'paperclip')
65
-
66
- require File.join(ROOT, 'lib', 'paperclip.rb')
67
-
68
- require './shoulda_macros/paperclip'
69
-
70
- FIXTURES_DIR = File.join(File.dirname(__FILE__), "fixtures")
71
- config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
72
- ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
73
- ActiveRecord::Base.establish_connection(config['test'])
74
- Paperclip.options[:logger] = ActiveRecord::Base.logger
75
-
76
- def using_protected_attributes?
77
- ActiveRecord::VERSION::MAJOR < 4
78
- end
79
-
80
- def require_everything_in_directory(directory_name)
81
- Dir[File.join(File.dirname(__FILE__), directory_name, '*')].each do |f|
82
- require f
83
- end
84
- end
85
-
86
- require_everything_in_directory('support')
87
-
88
- def reset_class class_name
89
- ActiveRecord::Base.send(:include, Paperclip::Glue)
90
- Object.send(:remove_const, class_name) rescue nil
91
- klass = Object.const_set(class_name, Class.new(ActiveRecord::Base))
92
-
93
- klass.class_eval do
94
- include Paperclip::Glue
95
- end
96
-
97
- klass.reset_column_information
98
- klass.connection_pool.clear_table_cache!(klass.table_name) if klass.connection_pool.respond_to?(:clear_table_cache!)
99
- klass.connection.schema_cache.clear_table_cache!(klass.table_name) if klass.connection.respond_to?(:schema_cache)
100
- klass
101
- end
102
-
103
- def reset_table table_name, &block
104
- block ||= lambda { |table| true }
105
- ActiveRecord::Base.connection.create_table :dummies, {:force => true}, &block
106
- end
107
-
108
- def modify_table table_name, &block
109
- ActiveRecord::Base.connection.change_table :dummies, &block
110
- end
111
-
112
- def rebuild_model options = {}
113
- ActiveRecord::Base.connection.create_table :dummies, :force => true do |table|
114
- table.column :title, :string
115
- table.column :other, :string
116
- table.column :avatar_file_name, :string
117
- table.column :avatar_content_type, :string
118
- table.column :avatar_file_size, :integer
119
- table.column :avatar_updated_at, :datetime
120
- table.column :avatar_fingerprint, :string
121
- end
122
- rebuild_class options
123
- end
124
-
125
- def rebuild_class options = {}
126
- reset_class("Dummy").tap do |klass|
127
- klass.has_attached_file :avatar, options
128
- Paperclip.reset_duplicate_clash_check!
129
- end
130
- end
131
-
132
- def rebuild_meta_class_of obj, options = {}
133
- (class << obj; self; end).tap do |metaklass|
134
- metaklass.has_attached_file :avatar, options
135
- Paperclip.reset_duplicate_clash_check!
136
- end
137
- end
138
-
139
- class FakeModel
140
- attr_accessor :avatar_file_name,
141
- :avatar_file_size,
142
- :avatar_updated_at,
143
- :avatar_content_type,
144
- :avatar_fingerprint,
145
- :id
146
-
147
- def errors
148
- @errors ||= []
149
- end
150
-
151
- def run_paperclip_callbacks name, *args
152
- end
153
-
154
- def valid?
155
- errors.empty?
156
- end
157
- end
158
-
159
- def attachment(options={})
160
- Paperclip::Attachment.new(:avatar, FakeModel.new, options)
161
- end
162
-
163
- def silence_warnings
164
- old_verbose, $VERBOSE = $VERBOSE, nil
165
- yield
166
- ensure
167
- $VERBOSE = old_verbose
168
- end
169
-
170
- def should_accept_dummy_class
171
- should "accept the class" do
172
- assert_accepts @matcher, @dummy_class
173
- end
174
-
175
- should "accept an instance of that class" do
176
- assert_accepts @matcher, @dummy_class.new
177
- end
178
- end
179
-
180
- def should_reject_dummy_class
181
- should "reject the class" do
182
- assert_rejects @matcher, @dummy_class
183
- end
184
-
185
- should "reject an instance of that class" do
186
- assert_rejects @matcher, @dummy_class.new
187
- end
188
- end
189
-
190
- def with_exitstatus_returning(code)
191
- saved_exitstatus = $?.nil? ? 0 : $?.exitstatus
192
- begin
193
- `ruby -e 'exit #{code.to_i}'`
194
- yield
195
- ensure
196
- `ruby -e 'exit #{saved_exitstatus.to_i}'`
197
- end
198
- end
199
-
200
- def fixture_file(filename)
201
- File.join(File.dirname(__FILE__), 'fixtures', filename)
202
- end
203
-
204
- def assert_success_response(url)
205
- Net::HTTP.get_response(URI.parse(url)) do |response|
206
- assert_equal "200", response.code,
207
- "Expected HTTP response code 200, got #{response.code}"
208
- end
209
- end
210
-
211
- def assert_not_found_response(url)
212
- Net::HTTP.get_response(URI.parse(url)) do |response|
213
- assert_equal "404", response.code,
214
- "Expected HTTP response code 404, got #{response.code}"
215
- end
216
- end
217
-
218
- def assert_file_exists(path)
219
- assert File.exists?(path), %(Expect "#{path}" to be exists.)
220
- end
221
-
222
- def assert_file_not_exists(path)
223
- assert !File.exists?(path), %(Expect "#{path}" to not exists.)
224
- end
225
-
226
- def assert_frame_dimensions(range, frames)
227
- frames.each_with_index do |frame, frame_index|
228
- frame.split('x').each_with_index do |dimension, dimension_index |
229
- assert range.include?(dimension.to_i), "Frame #{frame_index}[#{dimension_index}] should have been within #{range.inspect}, but was #{dimension}"
230
- end
231
- end
232
- end
@@ -1,58 +0,0 @@
1
- require './test/helper'
2
-
3
- class AbstractAdapterTest < Test::Unit::TestCase
4
- class TestAdapter < Paperclip::AbstractAdapter
5
- attr_accessor :tempfile
6
-
7
- def content_type
8
- Paperclip::ContentTypeDetector.new(path).detect
9
- end
10
- end
11
-
12
- context "content type from file command" do
13
- setup do
14
- @adapter = TestAdapter.new
15
- @adapter.stubs(:path).returns("image.png")
16
- end
17
-
18
- should "return the content type without newline" do
19
- assert_equal "image/png", @adapter.content_type
20
- end
21
- end
22
-
23
- context "nil?" do
24
- should "return false" do
25
- assert !TestAdapter.new.nil?
26
- end
27
- end
28
-
29
- context "delegation" do
30
- setup do
31
- @adapter = TestAdapter.new
32
- @adapter.tempfile = stub("Tempfile")
33
- end
34
-
35
- [:binmode, :binmode?, :close, :close!, :closed?, :eof?, :path, :rewind, :unlink].each do |method|
36
- should "delegate #{method} to @tempfile" do
37
- @adapter.tempfile.stubs(method)
38
- @adapter.public_send(method)
39
- assert_received @adapter.tempfile, method
40
- end
41
- end
42
- end
43
-
44
- should 'get rid of slashes and colons in filenames' do
45
- @adapter = TestAdapter.new
46
- @adapter.original_filename = "awesome/file:name.png"
47
-
48
- assert_equal "awesome_file_name.png", @adapter.original_filename
49
- end
50
-
51
- should 'be an assignment' do
52
- assert TestAdapter.new.assignment?
53
- end
54
-
55
- should 'not be nil' do
56
- assert !TestAdapter.new.nil?
57
- end
58
- end
@@ -1,18 +0,0 @@
1
- require './test/helper'
2
-
3
- class EmptyStringAdapterTest < Test::Unit::TestCase
4
-
5
- context 'a new instance' do
6
- setup do
7
- @subject = Paperclip.io_adapters.for('')
8
- end
9
-
10
- should "return false for a call to nil?" do
11
- assert !@subject.nil?
12
- end
13
-
14
- should 'return false for a call to assignment?' do
15
- assert !@subject.assignment?
16
- end
17
- end
18
- end
@@ -1,8 +0,0 @@
1
- require './test/helper'
2
-
3
- class IdentityAdapterTest < Test::Unit::TestCase
4
- should "respond 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 +0,0 @@
1
- require './test/helper'
2
-
3
- class HaveAttachedFileMatcherTest < Test::Unit::TestCase
4
- context "have_attached_file" do
5
- setup do
6
- @dummy_class = reset_class "Dummy"
7
- reset_table "dummies"
8
- @matcher = self.class.have_attached_file(:avatar)
9
- end
10
-
11
- context "given a class with no attachment" do
12
- should_reject_dummy_class
13
- end
14
-
15
- context "given a class with an attachment" do
16
- setup do
17
- modify_table("dummies"){|d| d.string :avatar_file_name }
18
- @dummy_class.has_attached_file :avatar
19
- end
20
-
21
- should_accept_dummy_class
22
- end
23
- end
24
- end