hash_validator 0.8.0 → 1.0.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/.travis.yml +2 -4
- data/README.md +5 -4
- data/lib/hash_validator/base.rb +5 -4
- data/lib/hash_validator/validators.rb +1 -0
- data/lib/hash_validator/validators/class_validator.rb +21 -0
- data/lib/hash_validator/version.rb +1 -1
- data/spec/validators/class_spec.rb +72 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ddc15dcd023f389504598ac3895671ba65e79b8cc120af48db730c02552919ab
|
4
|
+
data.tar.gz: e968308c55c754b88d4a0fb969e75832576f06429f93e29e0b354cf4c1fbd632
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8251c3d9506f21e5f4fe6c5461ac45002b3bb48227619744734ccb7dd1a6c9ac7e8f443317f94845f93faf31b65695235d083f9a691b2dff7c6c26a9fef7cf79
|
7
|
+
data.tar.gz: 972582fdda827e6a086956d38ef908dfff7fbfbe6e0d0c50dd9170d61965c6ee009ef60178aa384288361dc0144f513a1093c12406c2881db108d5d1ec585949
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
# Hash Validator
|
2
2
|
|
3
|
-
[]()
|
3
|
+
[](https://rubygems.org/gems/hash_validator)
|
4
4
|
[](https://travis-ci.org/jamesbrooks/hash_validator)
|
5
5
|
[](https://coveralls.io/r/jamesbrooks/hash_validator)
|
6
|
-
[](https://gemnasium.com/github.com/JamesBrooks/hash_validator)
|
6
|
+
[](https://codeclimate.com/github/JamesBrooks/hash_validator/maintainability)
|
8
7
|
|
9
8
|
Ruby library to validate hashes (Hash) against user-defined requirements
|
10
9
|
|
@@ -28,7 +27,7 @@ Or install it yourself as:
|
|
28
27
|
# Validations hash
|
29
28
|
validations = {
|
30
29
|
user: {
|
31
|
-
first_name:
|
30
|
+
first_name: String,
|
32
31
|
last_name: 'string',
|
33
32
|
age: 'numeric',
|
34
33
|
likes: 'array'
|
@@ -80,6 +79,8 @@ Define a validation hash which will be used to validate. This has can be nested
|
|
80
79
|
* `required`: just requires any value to be present for the designated key.
|
81
80
|
* hashes are validates by nesting validations, or if just the presence of a hash is required `{}` can be used.
|
82
81
|
|
82
|
+
On top of the pre-defined simple types, classes can be used directly (e.g. String) to validate the presence of a value of a desired class.
|
83
|
+
|
83
84
|
Additional validations exist to validate beyond simple typing, such as:
|
84
85
|
|
85
86
|
* An Enumerable instance: validates that the value is contained within the supplied enumerable.
|
data/lib/hash_validator/base.rb
CHANGED
@@ -6,7 +6,7 @@ class HashValidator::Base
|
|
6
6
|
self.errors = {}
|
7
7
|
self.hash = hash
|
8
8
|
self.validations = validations
|
9
|
-
|
9
|
+
|
10
10
|
validate
|
11
11
|
end
|
12
12
|
|
@@ -18,12 +18,13 @@ class HashValidator::Base
|
|
18
18
|
@strict = strict
|
19
19
|
new(hash, validations)
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
def self.strict?
|
23
23
|
@strict
|
24
24
|
end
|
25
|
-
|
26
|
-
|
25
|
+
|
26
|
+
|
27
|
+
private
|
27
28
|
def validate
|
28
29
|
HashValidator.validator_for(hash).validate(:base, self.hash, self.validations, self.errors)
|
29
30
|
self.errors = errors[:base]
|
@@ -25,6 +25,7 @@ end
|
|
25
25
|
# Load validators
|
26
26
|
require 'hash_validator/validators/base'
|
27
27
|
require 'hash_validator/validators/simple_validator'
|
28
|
+
require 'hash_validator/validators/class_validator'
|
28
29
|
require 'hash_validator/validators/hash_validator'
|
29
30
|
require 'hash_validator/validators/presence_validator'
|
30
31
|
require 'hash_validator/validators/simple_type_validators'
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class HashValidator::Validator::ClassValidator < HashValidator::Validator::Base
|
2
|
+
def initialize
|
3
|
+
super('_class') # The name of the validator, underscored as it won't usually be directly invoked (invoked through use of validator)
|
4
|
+
end
|
5
|
+
|
6
|
+
def should_validate?(rhs)
|
7
|
+
rhs.is_a?(Class)
|
8
|
+
end
|
9
|
+
|
10
|
+
def presence_error_message
|
11
|
+
'value from list required'
|
12
|
+
end
|
13
|
+
|
14
|
+
def validate(key, value, klass, errors)
|
15
|
+
unless value.is_a?(klass)
|
16
|
+
errors[key] = "#{klass} required"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
HashValidator.append_validator(HashValidator::Validator::ClassValidator.new)
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Class validator' do
|
4
|
+
let(:errors) { Hash.new }
|
5
|
+
|
6
|
+
{
|
7
|
+
Array => {
|
8
|
+
valid: [ [], [1], ['foo'], [1,['foo'],Time.now] ],
|
9
|
+
invalid: [ nil, '', 123, '123', Time.now, '[1]' ]
|
10
|
+
},
|
11
|
+
Complex => {
|
12
|
+
valid: [ Complex(1), Complex(2, 3), Complex('2/3+3/4i'), 0.3.to_c ],
|
13
|
+
invalid: [ nil, '', 123, '123', Time.now, '[1]', [1], '2/3+3/4i', Rational(2, 3) ]
|
14
|
+
},
|
15
|
+
Float => {
|
16
|
+
valid: [ 0.0, 1.1, 1.23, Float::INFINITY, Float::EPSILON ],
|
17
|
+
invalid: [ nil, '', 0, 123, '123', Time.now, '[1]', '2013-03-04' ]
|
18
|
+
},
|
19
|
+
Integer => {
|
20
|
+
valid: [ 0, -1000000, 1000000 ],
|
21
|
+
invalid: [ nil, '', 1.1, '123', Time.now, '[1]', '2013-03-04' ]
|
22
|
+
},
|
23
|
+
Numeric => {
|
24
|
+
valid: [ 0, 123, 123.45 ],
|
25
|
+
invalid: [ nil, '', '123', Time.now ]
|
26
|
+
},
|
27
|
+
Range => {
|
28
|
+
valid: [ 0..10, 'a'..'z', 5..0 ],
|
29
|
+
invalid: [ nil, '', '123', Time.now ]
|
30
|
+
},
|
31
|
+
Rational => {
|
32
|
+
valid: [ Rational(1), Rational(2, 3), 3.to_r ],
|
33
|
+
invalid: [ nil, '', 123, '123', Time.now, '[1]', [1], Complex(2, 3) ]
|
34
|
+
},
|
35
|
+
Regexp => {
|
36
|
+
valid: [ /[a-z]+/, //, //i, Regexp.new('.*') ],
|
37
|
+
invalid: [ nil, '', 123, '123', Time.now, '.*' ]
|
38
|
+
},
|
39
|
+
String => {
|
40
|
+
valid: [ '', 'Hello World', '12345' ],
|
41
|
+
invalid: [ nil, 12345, Time.now ]
|
42
|
+
},
|
43
|
+
Symbol => {
|
44
|
+
valid: [ :foo, :'', 'bar'.to_sym ],
|
45
|
+
invalid: [ nil, '', 1.1, '123', Time.now, '[1]', '2013-03-04' ]
|
46
|
+
},
|
47
|
+
Time => {
|
48
|
+
valid: [ Time.now ],
|
49
|
+
invalid: [ nil, '', 123, '123', "#{Time.now}" ]
|
50
|
+
}
|
51
|
+
}.each do |type, data|
|
52
|
+
describe type do
|
53
|
+
data[:valid].each do |value|
|
54
|
+
it "validates '#{value}' successful" do
|
55
|
+
validator = HashValidator.validate({ v: value }, { v: type })
|
56
|
+
|
57
|
+
expect(validator.valid?).to eq true
|
58
|
+
expect(validator.errors).to be_empty
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
data[:invalid].each do |value|
|
63
|
+
it "validates '#{value}' with failure" do
|
64
|
+
validator = HashValidator.validate({ v: value }, { v: type })
|
65
|
+
|
66
|
+
expect(validator.valid?).to eq false
|
67
|
+
expect(validator.errors).to eq({ v: "#{type} required" })
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hash_validator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Brooks
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-07-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -90,6 +90,7 @@ files:
|
|
90
90
|
- lib/hash_validator/validators.rb
|
91
91
|
- lib/hash_validator/validators/base.rb
|
92
92
|
- lib/hash_validator/validators/boolean_validator.rb
|
93
|
+
- lib/hash_validator/validators/class_validator.rb
|
93
94
|
- lib/hash_validator/validators/email_validator.rb
|
94
95
|
- lib/hash_validator/validators/enumerable_validator.rb
|
95
96
|
- lib/hash_validator/validators/hash_validator.rb
|
@@ -107,6 +108,7 @@ files:
|
|
107
108
|
- spec/spec_helper.rb
|
108
109
|
- spec/validators/base_spec.rb
|
109
110
|
- spec/validators/boolean_spec.rb
|
111
|
+
- spec/validators/class_spec.rb
|
110
112
|
- spec/validators/email_spec.rb
|
111
113
|
- spec/validators/in_enumerable_spec.rb
|
112
114
|
- spec/validators/lambda_spec.rb
|
@@ -137,8 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
139
|
- !ruby/object:Gem::Version
|
138
140
|
version: '0'
|
139
141
|
requirements: []
|
140
|
-
|
141
|
-
rubygems_version: 2.5.2
|
142
|
+
rubygems_version: 3.0.3
|
142
143
|
signing_key:
|
143
144
|
specification_version: 4
|
144
145
|
summary: Ruby library to validate hashes (Hash) against user-defined requirements
|
@@ -148,6 +149,7 @@ test_files:
|
|
148
149
|
- spec/spec_helper.rb
|
149
150
|
- spec/validators/base_spec.rb
|
150
151
|
- spec/validators/boolean_spec.rb
|
152
|
+
- spec/validators/class_spec.rb
|
151
153
|
- spec/validators/email_spec.rb
|
152
154
|
- spec/validators/in_enumerable_spec.rb
|
153
155
|
- spec/validators/lambda_spec.rb
|