active_storage_validations 0.4.0 → 0.5.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 +5 -5
- data/README.md +4 -3
- data/lib/active_storage_validations.rb +42 -0
- data/lib/active_storage_validations/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0b1779b51e62cc8db0e51d18a471ce349a2ee7d7a6867921cfa879e9e0e696f9
|
4
|
+
data.tar.gz: 1f4972a779e7a2938a0d5ef8c322da49300644ec155e1d2a883af13363afc4c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 96539daee539f2ca6faeb7f276e6bec9f102fb62f54e32bee3509eedd996570366b89594349d548121ebb4f268088e6cd389a07b895736433a9f57389c3bdab6
|
7
|
+
data.tar.gz: 90ef6e23cb8347c25cc5cf9f4d1a78c1001b650d7f352e56794a2590fbb00abf1581dd5e3dd7ddb4c5184d3ccee8ebcc4f01eefe888179d649cd22d3f718a085
|
data/README.md
CHANGED
@@ -29,7 +29,7 @@ class Project < ApplicationRecord
|
|
29
29
|
|
30
30
|
validates :title, presence: true
|
31
31
|
|
32
|
-
validates :preview, attached: true
|
32
|
+
validates :preview, attached: true, size: { less_than: 100.megabytes , message: 'is not given between size' }
|
33
33
|
validates :attachment, attached: true, content_type: { in: 'application/pdf', message: 'is not a PDF' }
|
34
34
|
end
|
35
35
|
```
|
@@ -78,14 +78,15 @@ Very simple example of validation with file attached, content type check and cus
|
|
78
78
|
|
79
79
|
## Todo
|
80
80
|
* verify with remote storages
|
81
|
+
* better error message when content_size is invalid
|
81
82
|
* travis CI
|
82
|
-
* validation
|
83
|
+
* split validation classes into own classes
|
83
84
|
|
84
85
|
## Tests & Contributing
|
85
86
|
|
86
87
|
To run tests in root folder of gem `rake test`.
|
87
88
|
|
88
|
-
To play with app `cd test/dummy` and `rails s -b 0.0.0.0` (before `
|
89
|
+
To play with app `cd test/dummy` and `rails s -b 0.0.0.0` (before `rails db:migrate`).
|
89
90
|
|
90
91
|
## Contributing
|
91
92
|
You are welcome to contribute.
|
@@ -49,7 +49,49 @@ module ActiveStorageValidations
|
|
49
49
|
def content_type_valid?(file)
|
50
50
|
file.blob.present? && file.blob.content_type.in?(types)
|
51
51
|
end
|
52
|
+
end
|
53
|
+
|
54
|
+
class SizeValidator < ActiveModel::EachValidator
|
55
|
+
delegate :number_to_human_size, to: ActiveSupport::NumberHelper
|
56
|
+
|
57
|
+
AVAILABLE_CHECKS = [:less_than, :less_than_or_equal_to, :greater_than, :greater_than_or_equal_to, :between]
|
58
|
+
|
59
|
+
def check_validity!
|
60
|
+
unless (AVAILABLE_CHECKS).any? { |argument| options.has_key?(argument) }
|
61
|
+
raise ArgumentError, "You must pass either :less_than, :greater_than, or :between to the validator"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def validate_each(record, attribute, value)
|
66
|
+
files = record.send(attribute)
|
67
|
+
# only attached
|
68
|
+
return true unless files.attached?
|
52
69
|
|
70
|
+
files = Array.wrap(files)
|
71
|
+
|
72
|
+
files.each do |file|
|
73
|
+
if content_size_valid?(file)
|
74
|
+
record.errors.add(attribute, options[:message].presence || "size #{number_to_human_size(file.blob.byte_size)} is not between required range" )
|
75
|
+
return
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def content_size_valid?(file)
|
81
|
+
file_size = file.blob.byte_size
|
82
|
+
case
|
83
|
+
when options[:between].present?
|
84
|
+
options[:between].exclude?(file_size)
|
85
|
+
when options[:less_than].present?
|
86
|
+
file_size > options[:less_than]
|
87
|
+
when options[:less_than_or_equal_to].present?
|
88
|
+
file_size >= options[:less_than_or_equal_to]
|
89
|
+
when options[:greater_than].present?
|
90
|
+
file_size < options[:greater_than]
|
91
|
+
when options[:greater_than_or_equal_to].present?
|
92
|
+
file_size <= options[:greater_than_or_equal_to]
|
93
|
+
end
|
94
|
+
end
|
53
95
|
end
|
54
96
|
|
55
97
|
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: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Kasyanchuk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-10-
|
11
|
+
date: 2018-10-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -87,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
87
87
|
version: '0'
|
88
88
|
requirements: []
|
89
89
|
rubyforge_project:
|
90
|
-
rubygems_version: 2.6
|
90
|
+
rubygems_version: 2.7.6
|
91
91
|
signing_key:
|
92
92
|
specification_version: 4
|
93
93
|
summary: Validations for Active Storage
|