kt-paperclip 6.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.codeclimate.yml +17 -0
- data/.github/issue_template.md +3 -0
- data/.gitignore +19 -0
- data/.hound.yml +1050 -0
- data/.rubocop.yml +1 -0
- data/.travis.yml +47 -0
- data/Appraisals +24 -0
- data/CONTRIBUTING.md +86 -0
- data/Gemfile +18 -0
- data/LICENSE +24 -0
- data/NEWS +515 -0
- data/README.md +1053 -0
- data/RELEASING.md +17 -0
- data/Rakefile +52 -0
- data/UPGRADING +17 -0
- data/features/basic_integration.feature +85 -0
- data/features/migration.feature +29 -0
- data/features/rake_tasks.feature +62 -0
- data/features/step_definitions/attachment_steps.rb +110 -0
- data/features/step_definitions/html_steps.rb +15 -0
- data/features/step_definitions/rails_steps.rb +257 -0
- data/features/step_definitions/s3_steps.rb +14 -0
- data/features/step_definitions/web_steps.rb +106 -0
- data/features/support/env.rb +12 -0
- data/features/support/fakeweb.rb +11 -0
- data/features/support/file_helpers.rb +34 -0
- data/features/support/fixtures/boot_config.txt +15 -0
- data/features/support/fixtures/gemfile.txt +5 -0
- data/features/support/fixtures/preinitializer.txt +20 -0
- data/features/support/paths.rb +28 -0
- data/features/support/rails.rb +39 -0
- data/features/support/selectors.rb +19 -0
- data/gemfiles/4.2.gemfile +20 -0
- data/gemfiles/5.0.gemfile +20 -0
- data/gemfiles/5.1.gemfile +20 -0
- data/gemfiles/5.2.gemfile +20 -0
- data/gemfiles/6.0.gemfile +20 -0
- data/lib/generators/paperclip/USAGE +8 -0
- data/lib/generators/paperclip/paperclip_generator.rb +36 -0
- data/lib/generators/paperclip/templates/paperclip_migration.rb.erb +15 -0
- data/lib/paperclip.rb +215 -0
- data/lib/paperclip/attachment.rb +617 -0
- data/lib/paperclip/attachment_registry.rb +60 -0
- data/lib/paperclip/callbacks.rb +42 -0
- data/lib/paperclip/content_type_detector.rb +80 -0
- data/lib/paperclip/errors.rb +34 -0
- data/lib/paperclip/file_command_content_type_detector.rb +28 -0
- data/lib/paperclip/filename_cleaner.rb +15 -0
- data/lib/paperclip/geometry.rb +157 -0
- data/lib/paperclip/geometry_detector_factory.rb +45 -0
- data/lib/paperclip/geometry_parser_factory.rb +31 -0
- data/lib/paperclip/glue.rb +17 -0
- data/lib/paperclip/has_attached_file.rb +116 -0
- data/lib/paperclip/helpers.rb +60 -0
- data/lib/paperclip/interpolations.rb +201 -0
- data/lib/paperclip/interpolations/plural_cache.rb +18 -0
- data/lib/paperclip/io_adapters/abstract_adapter.rb +75 -0
- data/lib/paperclip/io_adapters/attachment_adapter.rb +47 -0
- data/lib/paperclip/io_adapters/data_uri_adapter.rb +22 -0
- data/lib/paperclip/io_adapters/empty_string_adapter.rb +19 -0
- data/lib/paperclip/io_adapters/file_adapter.rb +26 -0
- data/lib/paperclip/io_adapters/http_url_proxy_adapter.rb +16 -0
- data/lib/paperclip/io_adapters/identity_adapter.rb +17 -0
- data/lib/paperclip/io_adapters/nil_adapter.rb +37 -0
- data/lib/paperclip/io_adapters/registry.rb +36 -0
- data/lib/paperclip/io_adapters/stringio_adapter.rb +36 -0
- data/lib/paperclip/io_adapters/uploaded_file_adapter.rb +44 -0
- data/lib/paperclip/io_adapters/uri_adapter.rb +68 -0
- data/lib/paperclip/locales/en.yml +18 -0
- data/lib/paperclip/logger.rb +21 -0
- data/lib/paperclip/matchers.rb +64 -0
- data/lib/paperclip/matchers/have_attached_file_matcher.rb +54 -0
- data/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb +101 -0
- data/lib/paperclip/matchers/validate_attachment_presence_matcher.rb +59 -0
- data/lib/paperclip/matchers/validate_attachment_size_matcher.rb +97 -0
- data/lib/paperclip/media_type_spoof_detector.rb +90 -0
- data/lib/paperclip/missing_attachment_styles.rb +84 -0
- data/lib/paperclip/processor.rb +56 -0
- data/lib/paperclip/processor_helpers.rb +52 -0
- data/lib/paperclip/rails_environment.rb +21 -0
- data/lib/paperclip/railtie.rb +31 -0
- data/lib/paperclip/schema.rb +81 -0
- data/lib/paperclip/storage.rb +3 -0
- data/lib/paperclip/storage/filesystem.rb +99 -0
- data/lib/paperclip/storage/fog.rb +252 -0
- data/lib/paperclip/storage/s3.rb +461 -0
- data/lib/paperclip/style.rb +106 -0
- data/lib/paperclip/tempfile.rb +42 -0
- data/lib/paperclip/tempfile_factory.rb +22 -0
- data/lib/paperclip/thumbnail.rb +131 -0
- data/lib/paperclip/url_generator.rb +76 -0
- data/lib/paperclip/validators.rb +73 -0
- data/lib/paperclip/validators/attachment_content_type_validator.rb +88 -0
- data/lib/paperclip/validators/attachment_file_name_validator.rb +75 -0
- data/lib/paperclip/validators/attachment_file_type_ignorance_validator.rb +28 -0
- data/lib/paperclip/validators/attachment_presence_validator.rb +28 -0
- data/lib/paperclip/validators/attachment_size_validator.rb +109 -0
- data/lib/paperclip/validators/media_type_spoof_detection_validator.rb +29 -0
- data/lib/paperclip/version.rb +3 -0
- data/lib/tasks/paperclip.rake +140 -0
- data/paperclip.gemspec +50 -0
- data/shoulda_macros/paperclip.rb +134 -0
- data/spec/database.yml +4 -0
- data/spec/paperclip/attachment_definitions_spec.rb +13 -0
- data/spec/paperclip/attachment_processing_spec.rb +79 -0
- data/spec/paperclip/attachment_registry_spec.rb +158 -0
- data/spec/paperclip/attachment_spec.rb +1590 -0
- data/spec/paperclip/content_type_detector_spec.rb +47 -0
- data/spec/paperclip/file_command_content_type_detector_spec.rb +40 -0
- data/spec/paperclip/filename_cleaner_spec.rb +13 -0
- data/spec/paperclip/geometry_detector_spec.rb +38 -0
- data/spec/paperclip/geometry_parser_spec.rb +73 -0
- data/spec/paperclip/geometry_spec.rb +255 -0
- data/spec/paperclip/glue_spec.rb +42 -0
- data/spec/paperclip/has_attached_file_spec.rb +78 -0
- data/spec/paperclip/integration_spec.rb +702 -0
- data/spec/paperclip/interpolations_spec.rb +270 -0
- data/spec/paperclip/io_adapters/abstract_adapter_spec.rb +160 -0
- data/spec/paperclip/io_adapters/attachment_adapter_spec.rb +140 -0
- data/spec/paperclip/io_adapters/data_uri_adapter_spec.rb +88 -0
- data/spec/paperclip/io_adapters/empty_string_adapter_spec.rb +17 -0
- data/spec/paperclip/io_adapters/file_adapter_spec.rb +131 -0
- data/spec/paperclip/io_adapters/http_url_proxy_adapter_spec.rb +137 -0
- data/spec/paperclip/io_adapters/identity_adapter_spec.rb +8 -0
- data/spec/paperclip/io_adapters/nil_adapter_spec.rb +25 -0
- data/spec/paperclip/io_adapters/registry_spec.rb +35 -0
- data/spec/paperclip/io_adapters/stringio_adapter_spec.rb +64 -0
- data/spec/paperclip/io_adapters/uploaded_file_adapter_spec.rb +146 -0
- data/spec/paperclip/io_adapters/uri_adapter_spec.rb +221 -0
- data/spec/paperclip/matchers/have_attached_file_matcher_spec.rb +19 -0
- data/spec/paperclip/matchers/validate_attachment_content_type_matcher_spec.rb +108 -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 +120 -0
- data/spec/paperclip/meta_class_spec.rb +30 -0
- data/spec/paperclip/paperclip_missing_attachment_styles_spec.rb +88 -0
- data/spec/paperclip/paperclip_spec.rb +196 -0
- data/spec/paperclip/plural_cache_spec.rb +37 -0
- data/spec/paperclip/processor_helpers_spec.rb +57 -0
- data/spec/paperclip/processor_spec.rb +26 -0
- data/spec/paperclip/rails_environment_spec.rb +30 -0
- data/spec/paperclip/rake_spec.rb +103 -0
- data/spec/paperclip/schema_spec.rb +252 -0
- data/spec/paperclip/storage/filesystem_spec.rb +79 -0
- data/spec/paperclip/storage/fog_spec.rb +560 -0
- data/spec/paperclip/storage/s3_live_spec.rb +188 -0
- data/spec/paperclip/storage/s3_spec.rb +1695 -0
- data/spec/paperclip/style_spec.rb +251 -0
- data/spec/paperclip/tempfile_factory_spec.rb +33 -0
- data/spec/paperclip/tempfile_spec.rb +35 -0
- data/spec/paperclip/thumbnail_spec.rb +504 -0
- data/spec/paperclip/url_generator_spec.rb +221 -0
- data/spec/paperclip/validators/attachment_content_type_validator_spec.rb +322 -0
- data/spec/paperclip/validators/attachment_file_name_validator_spec.rb +159 -0
- data/spec/paperclip/validators/attachment_presence_validator_spec.rb +85 -0
- data/spec/paperclip/validators/attachment_size_validator_spec.rb +235 -0
- data/spec/paperclip/validators/media_type_spoof_detection_validator_spec.rb +48 -0
- data/spec/paperclip/validators_spec.rb +164 -0
- data/spec/spec_helper.rb +45 -0
- data/spec/support/assertions.rb +84 -0
- data/spec/support/fake_model.rb +24 -0
- data/spec/support/fake_rails.rb +12 -0
- data/spec/support/fixtures/12k.png +0 -0
- data/spec/support/fixtures/50x50.png +0 -0
- data/spec/support/fixtures/5k.png +0 -0
- data/spec/support/fixtures/animated +0 -0
- data/spec/support/fixtures/animated.gif +0 -0
- data/spec/support/fixtures/animated.unknown +0 -0
- data/spec/support/fixtures/bad.png +1 -0
- data/spec/support/fixtures/empty.html +1 -0
- data/spec/support/fixtures/empty.xlsx +0 -0
- data/spec/support/fixtures/fog.yml +8 -0
- data/spec/support/fixtures/rotated.jpg +0 -0
- data/spec/support/fixtures/s3.yml +8 -0
- data/spec/support/fixtures/spaced file.jpg +0 -0
- data/spec/support/fixtures/spaced file.png +0 -0
- data/spec/support/fixtures/text.txt +1 -0
- data/spec/support/fixtures/twopage.pdf +0 -0
- data/spec/support/fixtures/uppercase.PNG +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/mock_attachment.rb +24 -0
- data/spec/support/mock_interpolator.rb +24 -0
- data/spec/support/mock_url_generator_builder.rb +26 -0
- data/spec/support/model_reconstruction.rb +72 -0
- data/spec/support/reporting.rb +11 -0
- data/spec/support/test_data.rb +13 -0
- data/spec/support/version_helper.rb +9 -0
- metadata +586 -0
@@ -0,0 +1,159 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Paperclip::Validators::AttachmentFileNameValidator do
|
4
|
+
before do
|
5
|
+
rebuild_model
|
6
|
+
@dummy = Dummy.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def build_validator(options)
|
10
|
+
@validator = Paperclip::Validators::AttachmentFileNameValidator.new(options.merge(
|
11
|
+
attributes: :avatar
|
12
|
+
))
|
13
|
+
end
|
14
|
+
|
15
|
+
context "with a failing validation" do
|
16
|
+
before do
|
17
|
+
build_validator matches: /.*\.png$/, allow_nil: false
|
18
|
+
allow(@dummy).to receive_messages(avatar_file_name: "data.txt")
|
19
|
+
@validator.validate(@dummy)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "adds error to the base object" do
|
23
|
+
assert @dummy.errors[:avatar].present?,
|
24
|
+
"Error not added to base attribute"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "adds error to base object as a string" do
|
28
|
+
expect(@dummy.errors[:avatar].first).to be_a String
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
it "does not add error to the base object with a successful validation" do
|
33
|
+
build_validator matches: /.*\.png$/, allow_nil: false
|
34
|
+
allow(@dummy).to receive_messages(avatar_file_name: "image.png")
|
35
|
+
@validator.validate(@dummy)
|
36
|
+
|
37
|
+
assert @dummy.errors[:avatar].blank?, "Error was added to base attribute"
|
38
|
+
end
|
39
|
+
|
40
|
+
context "whitelist format" do
|
41
|
+
context "with an allowed type" do
|
42
|
+
context "as a single regexp" do
|
43
|
+
before do
|
44
|
+
build_validator matches: /.*\.jpg$/
|
45
|
+
allow(@dummy).to receive_messages(avatar_file_name: "image.jpg")
|
46
|
+
@validator.validate(@dummy)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "does not set an error message" do
|
50
|
+
assert @dummy.errors[:avatar_file_name].blank?
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context "as a list" do
|
55
|
+
before do
|
56
|
+
build_validator matches: [/.*\.png$/, /.*\.jpe?g$/]
|
57
|
+
allow(@dummy).to receive_messages(avatar_file_name: "image.jpg")
|
58
|
+
@validator.validate(@dummy)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "does not set an error message" do
|
62
|
+
assert @dummy.errors[:avatar_file_name].blank?
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
context "with a disallowed type" do
|
68
|
+
it "sets a correct default error message" do
|
69
|
+
build_validator matches: /^text\/.*/
|
70
|
+
allow(@dummy).to receive_messages(avatar_file_name: "image.jpg")
|
71
|
+
@validator.validate(@dummy)
|
72
|
+
|
73
|
+
assert @dummy.errors[:avatar_file_name].present?
|
74
|
+
expect(@dummy.errors[:avatar_file_name]).to include "is invalid"
|
75
|
+
end
|
76
|
+
|
77
|
+
it "sets a correct custom error message" do
|
78
|
+
build_validator matches: /.*\.png$/, message: "should be a PNG image"
|
79
|
+
allow(@dummy).to receive_messages(avatar_file_name: "image.jpg")
|
80
|
+
@validator.validate(@dummy)
|
81
|
+
|
82
|
+
expect(@dummy.errors[:avatar_file_name]).to include "should be a PNG image"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context "blacklist format" do
|
88
|
+
context "with an allowed type" do
|
89
|
+
context "as a single regexp" do
|
90
|
+
before do
|
91
|
+
build_validator not: /^text\/.*/
|
92
|
+
allow(@dummy).to receive_messages(avatar_file_name: "image.jpg")
|
93
|
+
@validator.validate(@dummy)
|
94
|
+
end
|
95
|
+
|
96
|
+
it "does not set an error message" do
|
97
|
+
assert @dummy.errors[:avatar_file_name].blank?
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
context "as a list" do
|
102
|
+
before do
|
103
|
+
build_validator not: [/.*\.png$/, /.*\.jpe?g$/]
|
104
|
+
allow(@dummy).to receive_messages(avatar_file_name: "image.gif")
|
105
|
+
@validator.validate(@dummy)
|
106
|
+
end
|
107
|
+
|
108
|
+
it "does not set an error message" do
|
109
|
+
assert @dummy.errors[:avatar_file_name].blank?
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
context "with a disallowed type" do
|
115
|
+
it "sets a correct default error message" do
|
116
|
+
build_validator not: /data.*/
|
117
|
+
allow(@dummy).to receive_messages(avatar_file_name: "data.txt")
|
118
|
+
@validator.validate(@dummy)
|
119
|
+
|
120
|
+
assert @dummy.errors[:avatar_file_name].present?
|
121
|
+
expect(@dummy.errors[:avatar_file_name]).to include "is invalid"
|
122
|
+
end
|
123
|
+
|
124
|
+
it "sets a correct custom error message" do
|
125
|
+
build_validator not: /.*\.png$/, message: "should not be a PNG image"
|
126
|
+
allow(@dummy).to receive_messages(avatar_file_name: "image.png")
|
127
|
+
@validator.validate(@dummy)
|
128
|
+
|
129
|
+
expect(@dummy.errors[:avatar_file_name]).to include "should not be a PNG image"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
context "using the helper" do
|
135
|
+
before do
|
136
|
+
Dummy.validates_attachment_file_name :avatar, matches: /.*\.jpg$/
|
137
|
+
end
|
138
|
+
|
139
|
+
it "adds the validator to the class" do
|
140
|
+
assert Dummy.validators_on(:avatar).any? { |validator| validator.kind == :attachment_file_name }
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
context "given options" do
|
145
|
+
it "raises argument error if no required argument was given" do
|
146
|
+
assert_raises(ArgumentError) do
|
147
|
+
build_validator message: "Some message"
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
it "does not raise argument error if :matches was given" do
|
152
|
+
build_validator matches: /.*\.jpg$/
|
153
|
+
end
|
154
|
+
|
155
|
+
it "does not raise argument error if :not was given" do
|
156
|
+
build_validator not: /.*\.jpg$/
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Paperclip::Validators::AttachmentPresenceValidator do
|
4
|
+
before do
|
5
|
+
rebuild_model
|
6
|
+
@dummy = Dummy.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def build_validator(options = {})
|
10
|
+
@validator = Paperclip::Validators::AttachmentPresenceValidator.new(options.merge(
|
11
|
+
attributes: :avatar
|
12
|
+
))
|
13
|
+
end
|
14
|
+
|
15
|
+
context "nil attachment" do
|
16
|
+
before do
|
17
|
+
@dummy.avatar = nil
|
18
|
+
end
|
19
|
+
|
20
|
+
context "with default options" do
|
21
|
+
before do
|
22
|
+
build_validator
|
23
|
+
@validator.validate(@dummy)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "adds error on the attachment" do
|
27
|
+
assert @dummy.errors[:avatar].present?
|
28
|
+
end
|
29
|
+
|
30
|
+
it "does not add an error on the file_name attribute" do
|
31
|
+
assert @dummy.errors[:avatar_file_name].blank?
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "with :if option" do
|
36
|
+
context "returning true" do
|
37
|
+
before do
|
38
|
+
build_validator if: true
|
39
|
+
@validator.validate(@dummy)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "performs a validation" do
|
43
|
+
assert @dummy.errors[:avatar].present?
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context "returning false" do
|
48
|
+
before do
|
49
|
+
build_validator if: false
|
50
|
+
@validator.validate(@dummy)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "performs a validation" do
|
54
|
+
assert @dummy.errors[:avatar].present?
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context "with attachment" do
|
61
|
+
before do
|
62
|
+
build_validator
|
63
|
+
@dummy.avatar = StringIO.new('.\n')
|
64
|
+
@validator.validate(@dummy)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "does not add error on the attachment" do
|
68
|
+
assert @dummy.errors[:avatar].blank?
|
69
|
+
end
|
70
|
+
|
71
|
+
it "does not add an error on the file_name attribute" do
|
72
|
+
assert @dummy.errors[:avatar_file_name].blank?
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context "using the helper" do
|
77
|
+
before do
|
78
|
+
Dummy.validates_attachment_presence :avatar
|
79
|
+
end
|
80
|
+
|
81
|
+
it "adds the validator to the class" do
|
82
|
+
assert Dummy.validators_on(:avatar).any? { |validator| validator.kind == :attachment_presence }
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,235 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Paperclip::Validators::AttachmentSizeValidator do
|
4
|
+
before do
|
5
|
+
rebuild_model
|
6
|
+
@dummy = Dummy.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def build_validator(options)
|
10
|
+
@validator = Paperclip::Validators::AttachmentSizeValidator.new(options.merge(
|
11
|
+
attributes: :avatar
|
12
|
+
))
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.should_allow_attachment_file_size(size)
|
16
|
+
context "when the attachment size is #{size}" do
|
17
|
+
it "adds error to dummy object" do
|
18
|
+
allow(@dummy).to receive(:avatar_content_type).and_return(size)
|
19
|
+
@validator.validate(@dummy)
|
20
|
+
assert @dummy.errors[:avatar_file_size].blank?,
|
21
|
+
"Expect an error message on :avatar_file_size, got none."
|
22
|
+
end
|
23
|
+
|
24
|
+
it "does not add error to the base dummy object" do
|
25
|
+
assert @dummy.errors[:avatar].blank?,
|
26
|
+
"Error added to base attribute"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.should_not_allow_attachment_file_size(size, options = {})
|
32
|
+
context "when the attachment size is #{size}" do
|
33
|
+
before do
|
34
|
+
allow(@dummy).to receive(:avatar_file_size).and_return(size)
|
35
|
+
@validator.validate(@dummy)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "adds error to dummy object" do
|
39
|
+
assert @dummy.errors[:avatar_file_size].present?,
|
40
|
+
"Unexpected error message on :avatar_file_size"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "adds error to the base dummy object" do
|
44
|
+
assert @dummy.errors[:avatar].present?,
|
45
|
+
"Error not added to base attribute"
|
46
|
+
end
|
47
|
+
|
48
|
+
it "adds error to base object as a string" do
|
49
|
+
expect(@dummy.errors[:avatar].first).to be_a String
|
50
|
+
end
|
51
|
+
|
52
|
+
if options[:message]
|
53
|
+
it "returns a correct error message" do
|
54
|
+
expect(@dummy.errors[:avatar_file_size]).to include options[:message]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context "with :in option" do
|
61
|
+
context "as a range" do
|
62
|
+
before do
|
63
|
+
build_validator in: (5.kilobytes..10.kilobytes)
|
64
|
+
end
|
65
|
+
|
66
|
+
should_allow_attachment_file_size(7.kilobytes)
|
67
|
+
should_not_allow_attachment_file_size(4.kilobytes)
|
68
|
+
should_not_allow_attachment_file_size(11.kilobytes)
|
69
|
+
end
|
70
|
+
|
71
|
+
context "as a proc" do
|
72
|
+
before do
|
73
|
+
build_validator in: lambda { |_avatar| (5.kilobytes..10.kilobytes) }
|
74
|
+
end
|
75
|
+
|
76
|
+
should_allow_attachment_file_size(7.kilobytes)
|
77
|
+
should_not_allow_attachment_file_size(4.kilobytes)
|
78
|
+
should_not_allow_attachment_file_size(11.kilobytes)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context "with :greater_than option" do
|
83
|
+
context "as number" do
|
84
|
+
before do
|
85
|
+
build_validator greater_than: 10.kilobytes
|
86
|
+
end
|
87
|
+
|
88
|
+
should_allow_attachment_file_size 11.kilobytes
|
89
|
+
should_not_allow_attachment_file_size 10.kilobytes
|
90
|
+
end
|
91
|
+
|
92
|
+
context "as a proc" do
|
93
|
+
before do
|
94
|
+
build_validator greater_than: lambda { |_avatar| 10.kilobytes }
|
95
|
+
end
|
96
|
+
|
97
|
+
should_allow_attachment_file_size 11.kilobytes
|
98
|
+
should_not_allow_attachment_file_size 10.kilobytes
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
context "with :less_than option" do
|
103
|
+
context "as number" do
|
104
|
+
before do
|
105
|
+
build_validator less_than: 10.kilobytes
|
106
|
+
end
|
107
|
+
|
108
|
+
should_allow_attachment_file_size 9.kilobytes
|
109
|
+
should_not_allow_attachment_file_size 10.kilobytes
|
110
|
+
end
|
111
|
+
|
112
|
+
context "as a proc" do
|
113
|
+
before do
|
114
|
+
build_validator less_than: lambda { |_avatar| 10.kilobytes }
|
115
|
+
end
|
116
|
+
|
117
|
+
should_allow_attachment_file_size 9.kilobytes
|
118
|
+
should_not_allow_attachment_file_size 10.kilobytes
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
context "with :greater_than and :less_than option" do
|
123
|
+
context "as numbers" do
|
124
|
+
before do
|
125
|
+
build_validator greater_than: 5.kilobytes,
|
126
|
+
less_than: 10.kilobytes
|
127
|
+
end
|
128
|
+
|
129
|
+
should_allow_attachment_file_size 7.kilobytes
|
130
|
+
should_not_allow_attachment_file_size 5.kilobytes
|
131
|
+
should_not_allow_attachment_file_size 10.kilobytes
|
132
|
+
end
|
133
|
+
|
134
|
+
context "as a proc" do
|
135
|
+
before do
|
136
|
+
build_validator greater_than: lambda { |_avatar| 5.kilobytes },
|
137
|
+
less_than: lambda { |_avatar| 10.kilobytes }
|
138
|
+
end
|
139
|
+
|
140
|
+
should_allow_attachment_file_size 7.kilobytes
|
141
|
+
should_not_allow_attachment_file_size 5.kilobytes
|
142
|
+
should_not_allow_attachment_file_size 10.kilobytes
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
context "with :message option" do
|
147
|
+
context "given a range" do
|
148
|
+
before do
|
149
|
+
build_validator in: (5.kilobytes..10.kilobytes),
|
150
|
+
message: "is invalid. (Between %{min} and %{max} please.)"
|
151
|
+
end
|
152
|
+
|
153
|
+
should_not_allow_attachment_file_size(
|
154
|
+
11.kilobytes,
|
155
|
+
message: "is invalid. (Between 5 KB and 10 KB please.)"
|
156
|
+
)
|
157
|
+
end
|
158
|
+
|
159
|
+
context "given :less_than and :greater_than" do
|
160
|
+
before do
|
161
|
+
build_validator less_than: 10.kilobytes,
|
162
|
+
greater_than: 5.kilobytes,
|
163
|
+
message: "is invalid. (Between %{min} and %{max} please.)"
|
164
|
+
end
|
165
|
+
|
166
|
+
should_not_allow_attachment_file_size(
|
167
|
+
11.kilobytes,
|
168
|
+
message: "is invalid. (Between 5 KB and 10 KB please.)"
|
169
|
+
)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
context "default error messages" do
|
174
|
+
context "given :less_than and :greater_than" do
|
175
|
+
before do
|
176
|
+
build_validator greater_than: 5.kilobytes,
|
177
|
+
less_than: 10.kilobytes
|
178
|
+
end
|
179
|
+
|
180
|
+
should_not_allow_attachment_file_size(
|
181
|
+
11.kilobytes,
|
182
|
+
message: "must be less than 10 KB"
|
183
|
+
)
|
184
|
+
|
185
|
+
should_not_allow_attachment_file_size(
|
186
|
+
4.kilobytes,
|
187
|
+
message: "must be greater than 5 KB"
|
188
|
+
)
|
189
|
+
end
|
190
|
+
|
191
|
+
context "given a size range" do
|
192
|
+
before do
|
193
|
+
build_validator in: (5.kilobytes..10.kilobytes)
|
194
|
+
end
|
195
|
+
|
196
|
+
should_not_allow_attachment_file_size(
|
197
|
+
11.kilobytes,
|
198
|
+
message: "must be in between 5 KB and 10 KB"
|
199
|
+
)
|
200
|
+
|
201
|
+
should_not_allow_attachment_file_size(
|
202
|
+
4.kilobytes,
|
203
|
+
message: "must be in between 5 KB and 10 KB"
|
204
|
+
)
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
context "using the helper" do
|
209
|
+
before do
|
210
|
+
Dummy.validates_attachment_size :avatar, in: (5.kilobytes..10.kilobytes)
|
211
|
+
end
|
212
|
+
|
213
|
+
it "adds the validator to the class" do
|
214
|
+
assert Dummy.validators_on(:avatar).any? { |validator| validator.kind == :attachment_size }
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
context "given options" do
|
219
|
+
it "raises argument error if no required argument was given" do
|
220
|
+
assert_raises(ArgumentError) do
|
221
|
+
build_validator message: "Some message"
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
Paperclip::Validators::AttachmentSizeValidator::AVAILABLE_CHECKS.each do |argument|
|
226
|
+
it "does not raise arguemnt error if #{argument} was given" do
|
227
|
+
build_validator argument => 5.kilobytes
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
it "does not raise argument error if :in was given" do
|
232
|
+
build_validator in: (5.kilobytes..10.kilobytes)
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|