active_storage_validations 1.0.3 → 1.0.4
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 +4 -4
- data/README.md +9 -6
- data/lib/active_storage_validations/limit_validator.rb +0 -2
- data/lib/active_storage_validations/matchers/dimension_validator_matcher.rb +11 -7
- data/lib/active_storage_validations/metadata.rb +23 -11
- data/lib/active_storage_validations/version.rb +1 -1
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe9e0494c1bf81d0f0a00c649abce9de1ff9c0dc8782a6a39253bdf1a890361d
|
4
|
+
data.tar.gz: '0690ff0b6a259b35d074b8c81bad13ac4c699dbb1a3caca2b5b0b2b3d8b143ce'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 040ea6fc5660f163ba936b0b384eb515bad557f8d489bc75560e745b03011e97bc699c13e220f48f2e617b72abb70163f86cb7bdeb68522da48acb3508642679
|
7
|
+
data.tar.gz: e014d61d14631626179784ce0f7e31a65264103264d0b39666c720e135e6b34b68a64f374157174a0f974644cfdb8b22deeeee365c2d29d6ccb7394e290edab0
|
data/README.md
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
[](https://github.com/igorkasyanchuk/active_storage_validations/actions)
|
7
7
|
[](https://www.railsjazz.com)
|
8
8
|
[](https://www.patreon.com/igorkasyanchuk)
|
9
|
+
[](https://opensource-heroes.com/r/igorkasyanchuk/active_storage_validations)
|
9
10
|
|
10
11
|
If you are using `active_storage` gem and you want to add simple validations for it, like presence or content_type you need to write a custom validation method.
|
11
12
|
|
@@ -394,12 +395,14 @@ You are welcome to contribute.
|
|
394
395
|
- https://github.com/NARKOZ
|
395
396
|
- https://github.com/stephensolis
|
396
397
|
- https://github.com/kwent
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
398
|
+
- https://github.com/Animesh-Ghosh
|
399
|
+
- https://github.com/gr8bit
|
400
|
+
- https://github.com/codegeek319
|
401
|
+
- https://github.com/clwy-cn
|
402
|
+
- https://github.com/kukicola
|
403
|
+
- https://github.com/sobrinho
|
404
|
+
- https://github.com/iainbeeston
|
405
|
+
- https://github.com/marckohlbrugge
|
403
406
|
|
404
407
|
## License
|
405
408
|
|
@@ -12,8 +12,6 @@ module ActiveStorageValidations
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def validate_each(record, attribute, _)
|
15
|
-
return true unless record.send(attribute).attached?
|
16
|
-
|
17
15
|
files = Array.wrap(record.send(attribute)).compact.uniq
|
18
16
|
flat_options = unfold_procs(record, self.options, AVAILABLE_CHECKS)
|
19
17
|
errors_options = { min: flat_options[:min], max: flat_options[:max] }
|
@@ -65,8 +65,8 @@ module ActiveStorageValidations
|
|
65
65
|
def matches?(subject)
|
66
66
|
@subject = subject.is_a?(Class) ? subject.new : subject
|
67
67
|
responds_to_methods &&
|
68
|
-
|
69
|
-
|
68
|
+
width_not_smaller_than_min? && width_larger_than_min? && width_smaller_than_max? && width_not_larger_than_max? && width_equals? &&
|
69
|
+
height_not_smaller_than_min? && height_larger_than_min? && height_smaller_than_max? && height_not_larger_than_max? && height_equals?
|
70
70
|
end
|
71
71
|
|
72
72
|
def failure_message
|
@@ -93,7 +93,7 @@ module ActiveStorageValidations
|
|
93
93
|
((@height_min || 0) + (@height_max || 2000)) / 2
|
94
94
|
end
|
95
95
|
|
96
|
-
def
|
96
|
+
def width_not_smaller_than_min?
|
97
97
|
@width_min.nil? || !passes_validation_with_dimensions(@width_min - 1, valid_height, 'width')
|
98
98
|
end
|
99
99
|
|
@@ -105,7 +105,7 @@ module ActiveStorageValidations
|
|
105
105
|
@width_max.nil? || @width_min == @width_max || passes_validation_with_dimensions(@width_max - 1, valid_height, 'width')
|
106
106
|
end
|
107
107
|
|
108
|
-
def
|
108
|
+
def width_not_larger_than_max?
|
109
109
|
@width_max.nil? || !passes_validation_with_dimensions(@width_max + 1, valid_height, 'width')
|
110
110
|
end
|
111
111
|
|
@@ -113,7 +113,7 @@ module ActiveStorageValidations
|
|
113
113
|
@width_min.nil? || @width_min != @width_max || passes_validation_with_dimensions(@width_min, valid_height, 'width')
|
114
114
|
end
|
115
115
|
|
116
|
-
def
|
116
|
+
def height_not_smaller_than_min?
|
117
117
|
@height_min.nil? || !passes_validation_with_dimensions(valid_width, @height_min - 1, 'height')
|
118
118
|
end
|
119
119
|
|
@@ -125,7 +125,7 @@ module ActiveStorageValidations
|
|
125
125
|
@height_max.nil? || @height_min == @height_max || passes_validation_with_dimensions(valid_width, @height_max - 1, 'height')
|
126
126
|
end
|
127
127
|
|
128
|
-
def
|
128
|
+
def height_not_larger_than_max?
|
129
129
|
@height_max.nil? || !passes_validation_with_dimensions(valid_width, @height_max + 1, 'height')
|
130
130
|
end
|
131
131
|
|
@@ -140,7 +140,11 @@ module ActiveStorageValidations
|
|
140
140
|
Matchers.mock_metadata(attachment, width, height) do
|
141
141
|
@subject.validate
|
142
142
|
exclude_error_message = @custom_message || "dimension_#{check}"
|
143
|
-
@subject.errors.details[@attribute_name].
|
143
|
+
@subject.errors.details[@attribute_name].none? do |error|
|
144
|
+
error[:error].to_s.include?(exclude_error_message) ||
|
145
|
+
error[:error].to_s.include?("dimension_min") ||
|
146
|
+
error[:error].to_s.include?("dimension_max")
|
147
|
+
end
|
144
148
|
end
|
145
149
|
end
|
146
150
|
|
@@ -75,17 +75,10 @@ module ActiveStorageValidations
|
|
75
75
|
tempfile.flush
|
76
76
|
tempfile.rewind
|
77
77
|
|
78
|
-
image =
|
79
|
-
Vips::Image.new_from_file(tempfile.path)
|
80
|
-
elsif defined?(MiniMagick)
|
81
|
-
MiniMagick::Image.new(tempfile.path)
|
82
|
-
end
|
78
|
+
image = new_image_from_path(tempfile.path)
|
83
79
|
else
|
84
|
-
|
85
|
-
|
86
|
-
elsif defined?(MiniMagick)
|
87
|
-
MiniMagick::Image.new(read_file_path)
|
88
|
-
end
|
80
|
+
file_path = read_file_path
|
81
|
+
image = new_image_from_path(file_path)
|
89
82
|
end
|
90
83
|
|
91
84
|
|
@@ -101,6 +94,14 @@ module ActiveStorageValidations
|
|
101
94
|
image = nil
|
102
95
|
end
|
103
96
|
|
97
|
+
def new_image_from_path(path)
|
98
|
+
if image_processor == :vips && defined?(Vips) && (Vips::get_suffixes.include?(File.extname(path).downcase) || !Vips::respond_to?(:vips_foreign_get_suffixes))
|
99
|
+
Vips::Image.new_from_file(path)
|
100
|
+
elsif defined?(MiniMagick)
|
101
|
+
MiniMagick::Image.new(path)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
104
105
|
def valid_image?(image)
|
105
106
|
return false unless image
|
106
107
|
|
@@ -125,7 +126,18 @@ module ActiveStorageValidations
|
|
125
126
|
when ActionDispatch::Http::UploadedFile, Rack::Test::UploadedFile
|
126
127
|
file.path
|
127
128
|
when Hash
|
128
|
-
|
129
|
+
io = file.fetch(:io)
|
130
|
+
if io.is_a?(StringIO)
|
131
|
+
tempfile = Tempfile.new([File.basename(file[:filename], '.*'), File.extname(file[:filename])])
|
132
|
+
tempfile.binmode
|
133
|
+
IO.copy_stream(io, tempfile)
|
134
|
+
io.rewind
|
135
|
+
tempfile.flush
|
136
|
+
tempfile.rewind
|
137
|
+
tempfile.path
|
138
|
+
else
|
139
|
+
File.open(io).path
|
140
|
+
end
|
129
141
|
else
|
130
142
|
raise "Something wrong with params."
|
131
143
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_storage_validations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Kasyanchuk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activejob
|
@@ -164,6 +164,20 @@ dependencies:
|
|
164
164
|
- - ">="
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: simplecov
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
182
|
name: globalid
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -240,7 +254,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
240
254
|
- !ruby/object:Gem::Version
|
241
255
|
version: '0'
|
242
256
|
requirements: []
|
243
|
-
rubygems_version: 3.
|
257
|
+
rubygems_version: 3.4.13
|
244
258
|
signing_key:
|
245
259
|
specification_version: 4
|
246
260
|
summary: Validations for Active Storage
|