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.
- checksums.yaml +4 -4
- data/.gitignore +0 -6
- data/.hound.yml +1066 -0
- data/.rubocop.yml +1 -0
- data/.travis.yml +11 -17
- data/Appraisals +6 -14
- data/CONTRIBUTING.md +13 -8
- data/Gemfile +16 -3
- data/LICENSE +1 -3
- data/NEWS +167 -49
- data/README.md +294 -75
- data/RELEASING.md +17 -0
- data/Rakefile +6 -8
- data/features/basic_integration.feature +24 -6
- data/features/step_definitions/attachment_steps.rb +30 -22
- data/features/step_definitions/html_steps.rb +2 -2
- data/features/step_definitions/rails_steps.rb +44 -14
- data/features/step_definitions/web_steps.rb +1 -103
- data/features/support/env.rb +2 -2
- data/features/support/file_helpers.rb +2 -2
- data/features/support/fixtures/gemfile.txt +1 -1
- data/features/support/rails.rb +2 -1
- data/gemfiles/3.2.gemfile +14 -6
- data/gemfiles/4.1.gemfile +19 -0
- data/gemfiles/4.2.gemfile +19 -0
- data/lib/generators/paperclip/paperclip_generator.rb +0 -2
- data/lib/generators/paperclip/templates/paperclip_migration.rb.erb +1 -1
- data/lib/paperclip/attachment.rb +132 -38
- data/lib/paperclip/attachment_registry.rb +1 -1
- data/lib/paperclip/callbacks.rb +11 -1
- data/lib/paperclip/content_type_detector.rb +25 -22
- data/lib/paperclip/deprecations.rb +42 -0
- data/lib/paperclip/errors.rb +5 -0
- data/lib/paperclip/file_command_content_type_detector.rb +6 -8
- data/lib/paperclip/geometry_detector_factory.rb +3 -1
- data/lib/paperclip/geometry_parser_factory.rb +1 -1
- data/lib/paperclip/has_attached_file.rb +10 -0
- data/lib/paperclip/interpolations/plural_cache.rb +6 -5
- data/lib/paperclip/interpolations.rb +25 -12
- data/lib/paperclip/io_adapters/abstract_adapter.rb +3 -1
- data/lib/paperclip/io_adapters/attachment_adapter.rb +4 -4
- data/lib/paperclip/io_adapters/data_uri_adapter.rb +5 -10
- data/lib/paperclip/io_adapters/stringio_adapter.rb +6 -10
- data/lib/paperclip/io_adapters/uri_adapter.rb +30 -11
- data/lib/paperclip/locales/de.yml +18 -0
- data/lib/paperclip/locales/en.yml +1 -0
- data/lib/paperclip/locales/es.yml +18 -0
- data/lib/paperclip/locales/ja.yml +18 -0
- data/lib/paperclip/locales/pt-BR.yml +18 -0
- data/lib/paperclip/locales/zh-CN.yml +18 -0
- data/lib/paperclip/locales/zh-HK.yml +18 -0
- data/lib/paperclip/locales/zh-TW.yml +18 -0
- data/lib/paperclip/matchers/have_attached_file_matcher.rb +2 -1
- data/lib/paperclip/matchers/validate_attachment_presence_matcher.rb +2 -1
- data/lib/paperclip/matchers/validate_attachment_size_matcher.rb +2 -1
- data/lib/paperclip/media_type_spoof_detector.rb +89 -0
- data/lib/paperclip/processor.rb +0 -37
- data/lib/paperclip/processor_helpers.rb +50 -0
- data/lib/paperclip/rails_environment.rb +25 -0
- data/lib/paperclip/schema.rb +10 -2
- data/lib/paperclip/storage/filesystem.rb +1 -1
- data/lib/paperclip/storage/fog.rb +18 -7
- data/lib/paperclip/storage/s3.rb +53 -22
- data/lib/paperclip/style.rb +8 -2
- data/lib/paperclip/tempfile_factory.rb +5 -1
- data/lib/paperclip/thumbnail.rb +12 -10
- data/lib/paperclip/url_generator.rb +11 -3
- data/lib/paperclip/validators/attachment_content_type_validator.rb +4 -0
- data/lib/paperclip/validators/attachment_file_name_validator.rb +80 -0
- data/lib/paperclip/validators/attachment_file_type_ignorance_validator.rb +29 -0
- data/lib/paperclip/validators/attachment_presence_validator.rb +4 -0
- data/lib/paperclip/validators/attachment_size_validator.rb +11 -3
- data/lib/paperclip/validators/media_type_spoof_detection_validator.rb +27 -0
- data/lib/paperclip/validators.rb +10 -3
- data/lib/paperclip/version.rb +1 -1
- data/lib/paperclip.rb +26 -8
- data/lib/tasks/paperclip.rake +17 -2
- data/paperclip.gemspec +16 -14
- data/shoulda_macros/paperclip.rb +0 -1
- data/spec/paperclip/attachment_definitions_spec.rb +13 -0
- data/{test/attachment_processing_test.rb → spec/paperclip/attachment_processing_spec.rb} +20 -21
- data/spec/paperclip/attachment_registry_spec.rb +130 -0
- data/{test/attachment_test.rb → spec/paperclip/attachment_spec.rb} +438 -397
- data/{test/content_type_detector_test.rb → spec/paperclip/content_type_detector_spec.rb} +16 -19
- data/spec/paperclip/deprecations_spec.rb +65 -0
- data/{test/file_command_content_type_detector_test.rb → spec/paperclip/file_command_content_type_detector_spec.rb} +5 -6
- data/spec/paperclip/filename_cleaner_spec.rb +14 -0
- data/spec/paperclip/geometry_detector_spec.rb +39 -0
- data/{test/geometry_parser_test.rb → spec/paperclip/geometry_parser_spec.rb} +27 -27
- data/{test/geometry_test.rb → spec/paperclip/geometry_spec.rb} +50 -52
- data/spec/paperclip/glue_spec.rb +44 -0
- data/{test/has_attached_file_test.rb → spec/paperclip/has_attached_file_spec.rb} +45 -28
- data/{test/integration_test.rb → spec/paperclip/integration_spec.rb} +134 -126
- data/{test/interpolations_test.rb → spec/paperclip/interpolations_spec.rb} +70 -46
- data/spec/paperclip/io_adapters/abstract_adapter_spec.rb +78 -0
- data/{test/io_adapters/attachment_adapter_test.rb → spec/paperclip/io_adapters/attachment_adapter_spec.rb} +27 -29
- data/{test/io_adapters/data_uri_adapter_test.rb → spec/paperclip/io_adapters/data_uri_adapter_spec.rb} +26 -17
- data/spec/paperclip/io_adapters/empty_string_adapter_spec.rb +17 -0
- data/{test/io_adapters/file_adapter_test.rb → spec/paperclip/io_adapters/file_adapter_spec.rb} +36 -40
- data/{test/io_adapters/http_url_proxy_adapter_test.rb → spec/paperclip/io_adapters/http_url_proxy_adapter_spec.rb} +31 -29
- data/spec/paperclip/io_adapters/identity_adapter_spec.rb +8 -0
- data/{test/io_adapters/nil_adapter_test.rb → spec/paperclip/io_adapters/nil_adapter_spec.rb} +7 -7
- data/{test/io_adapters/registry_test.rb → spec/paperclip/io_adapters/registry_spec.rb} +10 -7
- data/{test/io_adapters/stringio_adapter_test.rb → spec/paperclip/io_adapters/stringio_adapter_spec.rb} +20 -17
- data/{test/io_adapters/uploaded_file_adapter_test.rb → spec/paperclip/io_adapters/uploaded_file_adapter_spec.rb} +41 -41
- data/{test/io_adapters/uri_adapter_test.rb → spec/paperclip/io_adapters/uri_adapter_spec.rb} +53 -28
- data/spec/paperclip/matchers/have_attached_file_matcher_spec.rb +19 -0
- data/spec/paperclip/matchers/validate_attachment_content_type_matcher_spec.rb +99 -0
- data/spec/paperclip/matchers/validate_attachment_presence_matcher_spec.rb +69 -0
- data/spec/paperclip/matchers/validate_attachment_size_matcher_spec.rb +88 -0
- data/spec/paperclip/media_type_spoof_detector_spec.rb +79 -0
- data/spec/paperclip/meta_class_spec.rb +30 -0
- data/spec/paperclip/paperclip_missing_attachment_styles_spec.rb +84 -0
- data/{test/paperclip_test.rb → spec/paperclip/paperclip_spec.rb} +53 -48
- data/spec/paperclip/plural_cache_spec.rb +37 -0
- data/spec/paperclip/processor_helpers_spec.rb +57 -0
- data/{test/processor_test.rb → spec/paperclip/processor_spec.rb} +5 -5
- data/spec/paperclip/rails_environment_spec.rb +33 -0
- data/{test/rake_test.rb → spec/paperclip/rake_spec.rb} +15 -15
- data/spec/paperclip/schema_spec.rb +248 -0
- data/{test/storage/filesystem_test.rb → spec/paperclip/storage/filesystem_spec.rb} +18 -18
- data/spec/paperclip/storage/fog_spec.rb +535 -0
- data/spec/paperclip/storage/s3_live_spec.rb +182 -0
- data/spec/paperclip/storage/s3_spec.rb +1526 -0
- data/spec/paperclip/style_spec.rb +255 -0
- data/spec/paperclip/tempfile_factory_spec.rb +33 -0
- data/{test/thumbnail_test.rb → spec/paperclip/thumbnail_spec.rb} +123 -107
- data/spec/paperclip/url_generator_spec.rb +211 -0
- data/spec/paperclip/validators/attachment_content_type_validator_spec.rb +322 -0
- data/spec/paperclip/validators/attachment_file_name_validator_spec.rb +160 -0
- data/{test/validators/attachment_presence_validator_test.rb → spec/paperclip/validators/attachment_presence_validator_spec.rb} +20 -20
- data/{test/validators/attachment_size_validator_test.rb → spec/paperclip/validators/attachment_size_validator_spec.rb} +65 -58
- data/spec/paperclip/validators/media_type_spoof_detection_validator_spec.rb +52 -0
- data/spec/paperclip/validators_spec.rb +164 -0
- data/spec/spec_helper.rb +43 -0
- data/spec/support/assertions.rb +71 -0
- data/spec/support/deprecations.rb +9 -0
- data/spec/support/fake_model.rb +25 -0
- data/spec/support/fake_rails.rb +12 -0
- data/spec/support/fixtures/empty.html +1 -0
- data/spec/support/fixtures/empty.xlsx +0 -0
- data/spec/support/fixtures/spaced file.jpg +0 -0
- data/spec/support/matchers/accept.rb +5 -0
- data/spec/support/matchers/exist.rb +5 -0
- data/spec/support/matchers/have_column.rb +23 -0
- data/spec/support/model_reconstruction.rb +60 -0
- data/spec/support/rails_helpers.rb +7 -0
- data/spec/support/test_data.rb +13 -0
- data/spec/support/version_helper.rb +9 -0
- metadata +334 -219
- data/RUNNING_TESTS.md +0 -4
- data/gemfiles/3.0.gemfile +0 -11
- data/gemfiles/3.1.gemfile +0 -11
- data/gemfiles/4.0.gemfile +0 -11
- data/test/attachment_definitions_test.rb +0 -12
- data/test/attachment_registry_test.rb +0 -88
- data/test/filename_cleaner_test.rb +0 -14
- data/test/generator_test.rb +0 -84
- data/test/geometry_detector_test.rb +0 -24
- data/test/helper.rb +0 -232
- data/test/io_adapters/abstract_adapter_test.rb +0 -58
- data/test/io_adapters/empty_string_adapter_test.rb +0 -18
- data/test/io_adapters/identity_adapter_test.rb +0 -8
- data/test/matchers/have_attached_file_matcher_test.rb +0 -24
- data/test/matchers/validate_attachment_content_type_matcher_test.rb +0 -110
- data/test/matchers/validate_attachment_presence_matcher_test.rb +0 -69
- data/test/matchers/validate_attachment_size_matcher_test.rb +0 -86
- data/test/meta_class_test.rb +0 -32
- data/test/paperclip_missing_attachment_styles_test.rb +0 -90
- data/test/plural_cache_test.rb +0 -36
- data/test/schema_test.rb +0 -200
- data/test/storage/fog_test.rb +0 -473
- data/test/storage/s3_live_test.rb +0 -179
- data/test/storage/s3_test.rb +0 -1356
- data/test/style_test.rb +0 -213
- data/test/support/mock_model.rb +0 -2
- data/test/tempfile_factory_test.rb +0 -17
- data/test/url_generator_test.rb +0 -187
- data/test/validators/attachment_content_type_validator_test.rb +0 -324
- data/test/validators_test.rb +0 -61
- /data/{test → spec}/database.yml +0 -0
- /data/{test → spec/support}/fixtures/12k.png +0 -0
- /data/{test → spec/support}/fixtures/50x50.png +0 -0
- /data/{test → spec/support}/fixtures/5k.png +0 -0
- /data/{test → spec/support}/fixtures/animated +0 -0
- /data/{test → spec/support}/fixtures/animated.gif +0 -0
- /data/{test → spec/support}/fixtures/animated.unknown +0 -0
- /data/{test → spec/support}/fixtures/bad.png +0 -0
- /data/{test → spec/support}/fixtures/fog.yml +0 -0
- /data/{test → spec/support}/fixtures/rotated.jpg +0 -0
- /data/{test → spec/support}/fixtures/s3.yml +0 -0
- /data/{test → spec/support}/fixtures/spaced file.png +0 -0
- /data/{test → spec/support}/fixtures/text.txt +0 -0
- /data/{test → spec/support}/fixtures/twopage.pdf +0 -0
- /data/{test → spec/support}/fixtures/uppercase.PNG +0 -0
- /data/{test → spec}/support/mock_attachment.rb +0 -0
- /data/{test → spec}/support/mock_interpolator.rb +0 -0
- /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
|
data/test/meta_class_test.rb
DELETED
@@ -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
|
data/test/plural_cache_test.rb
DELETED
@@ -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
|