hash_validator 1.1.1 → 2.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 +4 -4
- data/.github/workflows/ruby.yml +1 -1
- data/.ruby-version +1 -1
- data/README.md +315 -56
- data/hash_validator.gemspec +1 -1
- data/lib/hash_validator/configuration.rb +16 -0
- data/lib/hash_validator/validators/alpha_validator.rb +15 -0
- data/lib/hash_validator/validators/alphanumeric_validator.rb +15 -0
- data/lib/hash_validator/validators/array_validator.rb +1 -1
- data/lib/hash_validator/validators/base.rb +28 -3
- data/lib/hash_validator/validators/boolean_validator.rb +3 -5
- data/lib/hash_validator/validators/class_validator.rb +1 -1
- data/lib/hash_validator/validators/digits_validator.rb +15 -0
- data/lib/hash_validator/validators/dynamic_func_validator.rb +26 -0
- data/lib/hash_validator/validators/dynamic_pattern_validator.rb +23 -0
- data/lib/hash_validator/validators/email_validator.rb +4 -6
- data/lib/hash_validator/validators/enumerable_validator.rb +4 -6
- data/lib/hash_validator/validators/hash_validator.rb +8 -3
- data/lib/hash_validator/validators/hex_color_validator.rb +15 -0
- data/lib/hash_validator/validators/ip_validator.rb +22 -0
- data/lib/hash_validator/validators/ipv4_validator.rb +18 -0
- data/lib/hash_validator/validators/ipv6_validator.rb +22 -0
- data/lib/hash_validator/validators/json_validator.rb +21 -0
- data/lib/hash_validator/validators/lambda_validator.rb +5 -8
- data/lib/hash_validator/validators/many_validator.rb +3 -3
- data/lib/hash_validator/validators/multiple_validator.rb +1 -1
- data/lib/hash_validator/validators/optional_validator.rb +1 -1
- data/lib/hash_validator/validators/presence_validator.rb +4 -6
- data/lib/hash_validator/validators/regex_validator.rb +4 -6
- data/lib/hash_validator/validators/simple_type_validators.rb +1 -1
- data/lib/hash_validator/validators/simple_validator.rb +2 -4
- data/lib/hash_validator/validators/url_validator.rb +21 -0
- data/lib/hash_validator/validators.rb +46 -4
- data/lib/hash_validator/version.rb +1 -1
- data/lib/hash_validator.rb +1 -0
- data/spec/configuration_spec.rb +189 -0
- data/spec/hash_validator_spec.rb +4 -4
- data/spec/validators/alpha_validator_spec.rb +93 -0
- data/spec/validators/alphanumeric_validator_spec.rb +99 -0
- data/spec/validators/base_spec.rb +2 -2
- data/spec/validators/digits_validator_spec.rb +99 -0
- data/spec/validators/dynamic_func_validator_spec.rb +252 -0
- data/spec/validators/dynamic_pattern_validator_spec.rb +150 -0
- data/spec/validators/hash_validator_spec.rb +102 -0
- data/spec/validators/hex_color_validator_spec.rb +111 -0
- data/spec/validators/ip_validator_spec.rb +105 -0
- data/spec/validators/ipv4_validator_spec.rb +99 -0
- data/spec/validators/ipv6_validator_spec.rb +99 -0
- data/spec/validators/json_validator_spec.rb +88 -0
- data/spec/validators/url_validator_spec.rb +75 -0
- data/spec/validators/user_defined_spec.rb +2 -2
- metadata +42 -4
@@ -0,0 +1,88 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe HashValidator::Validator::JsonValidator do
|
4
|
+
let(:validator) { HashValidator::Validator::JsonValidator.new }
|
5
|
+
|
6
|
+
context 'valid JSON' do
|
7
|
+
it 'validates simple JSON objects' do
|
8
|
+
errors = {}
|
9
|
+
validator.validate('key', '{"name": "test"}', {}, errors)
|
10
|
+
expect(errors).to be_empty
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'validates JSON arrays' do
|
14
|
+
errors = {}
|
15
|
+
validator.validate('key', '[1, 2, 3]', {}, errors)
|
16
|
+
expect(errors).to be_empty
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'validates JSON strings' do
|
20
|
+
errors = {}
|
21
|
+
validator.validate('key', '"hello world"', {}, errors)
|
22
|
+
expect(errors).to be_empty
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'validates JSON numbers' do
|
26
|
+
errors = {}
|
27
|
+
validator.validate('key', '42', {}, errors)
|
28
|
+
expect(errors).to be_empty
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'validates JSON booleans' do
|
32
|
+
errors = {}
|
33
|
+
validator.validate('key', 'true', {}, errors)
|
34
|
+
expect(errors).to be_empty
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'validates JSON null' do
|
38
|
+
errors = {}
|
39
|
+
validator.validate('key', 'null', {}, errors)
|
40
|
+
expect(errors).to be_empty
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'validates complex nested JSON' do
|
44
|
+
errors = {}
|
45
|
+
json_string = '{"users": [{"name": "John", "age": 30}, {"name": "Jane", "age": 25}]}'
|
46
|
+
validator.validate('key', json_string, {}, errors)
|
47
|
+
expect(errors).to be_empty
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'invalid JSON' do
|
52
|
+
it 'rejects non-string values' do
|
53
|
+
errors = {}
|
54
|
+
validator.validate('key', 123, {}, errors)
|
55
|
+
expect(errors['key']).to eq('is not valid JSON')
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'rejects nil values' do
|
59
|
+
errors = {}
|
60
|
+
validator.validate('key', nil, {}, errors)
|
61
|
+
expect(errors['key']).to eq('is not valid JSON')
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'rejects malformed JSON' do
|
65
|
+
errors = {}
|
66
|
+
validator.validate('key', '{"name": "test"', {}, errors)
|
67
|
+
expect(errors['key']).to eq('is not valid JSON')
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'rejects invalid JSON syntax' do
|
71
|
+
errors = {}
|
72
|
+
validator.validate('key', '{name: "test"}', {}, errors)
|
73
|
+
expect(errors['key']).to eq('is not valid JSON')
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'rejects empty strings' do
|
77
|
+
errors = {}
|
78
|
+
validator.validate('key', '', {}, errors)
|
79
|
+
expect(errors['key']).to eq('is not valid JSON')
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'rejects plain text' do
|
83
|
+
errors = {}
|
84
|
+
validator.validate('key', 'hello world', {}, errors)
|
85
|
+
expect(errors['key']).to eq('is not valid JSON')
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe HashValidator::Validator::UrlValidator do
|
4
|
+
let(:validator) { HashValidator::Validator::UrlValidator.new }
|
5
|
+
|
6
|
+
context 'valid URLs' do
|
7
|
+
it 'validates http URLs' do
|
8
|
+
errors = {}
|
9
|
+
validator.validate('key', 'http://example.com', {}, errors)
|
10
|
+
expect(errors).to be_empty
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'validates https URLs' do
|
14
|
+
errors = {}
|
15
|
+
validator.validate('key', 'https://example.com', {}, errors)
|
16
|
+
expect(errors).to be_empty
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'validates ftp URLs' do
|
20
|
+
errors = {}
|
21
|
+
validator.validate('key', 'ftp://ftp.example.com', {}, errors)
|
22
|
+
expect(errors).to be_empty
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'validates URLs with paths' do
|
26
|
+
errors = {}
|
27
|
+
validator.validate('key', 'https://example.com/path/to/resource', {}, errors)
|
28
|
+
expect(errors).to be_empty
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'validates URLs with query parameters' do
|
32
|
+
errors = {}
|
33
|
+
validator.validate('key', 'https://example.com/search?q=test&page=1', {}, errors)
|
34
|
+
expect(errors).to be_empty
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'invalid URLs' do
|
39
|
+
it 'rejects non-string values' do
|
40
|
+
errors = {}
|
41
|
+
validator.validate('key', 123, {}, errors)
|
42
|
+
expect(errors['key']).to eq('is not a valid URL')
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'rejects nil values' do
|
46
|
+
errors = {}
|
47
|
+
validator.validate('key', nil, {}, errors)
|
48
|
+
expect(errors['key']).to eq('is not a valid URL')
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'rejects malformed URLs' do
|
52
|
+
errors = {}
|
53
|
+
validator.validate('key', 'not a url', {}, errors)
|
54
|
+
expect(errors['key']).to eq('is not a valid URL')
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'rejects URLs without schemes' do
|
58
|
+
errors = {}
|
59
|
+
validator.validate('key', 'example.com', {}, errors)
|
60
|
+
expect(errors['key']).to eq('is not a valid URL')
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'rejects unsupported schemes' do
|
64
|
+
errors = {}
|
65
|
+
validator.validate('key', 'mailto:test@example.com', {}, errors)
|
66
|
+
expect(errors['key']).to eq('is not a valid URL')
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'rejects empty strings' do
|
70
|
+
errors = {}
|
71
|
+
validator.validate('key', '', {}, errors)
|
72
|
+
expect(errors['key']).to eq('is not a valid URL')
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -11,7 +11,7 @@ describe 'User-defined validator' do
|
|
11
11
|
|
12
12
|
def validate(key, value, validations, errors)
|
13
13
|
unless value.is_a?(Integer) && value.odd?
|
14
|
-
errors[key] =
|
14
|
+
errors[key] = error_message
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -72,7 +72,7 @@ describe 'User-defined validator' do
|
|
72
72
|
end
|
73
73
|
|
74
74
|
describe 'Integrating with the entire validation system' do
|
75
|
-
before { HashValidator.
|
75
|
+
before { HashValidator.add_validator(validator) rescue nil } # rescue to prevent: validators need to have unique names
|
76
76
|
|
77
77
|
it 'can be looked up using #validator_for' do
|
78
78
|
expect(HashValidator.validator_for('odd')).to be_a_kind_of(HashValidator::Validator::OddValidator)
|
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:
|
4
|
+
version: 2.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: 2025-
|
11
|
+
date: 2025-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -70,18 +70,29 @@ files:
|
|
70
70
|
- hash_validator.gemspec
|
71
71
|
- lib/hash_validator.rb
|
72
72
|
- lib/hash_validator/base.rb
|
73
|
+
- lib/hash_validator/configuration.rb
|
73
74
|
- lib/hash_validator/validations.rb
|
74
75
|
- lib/hash_validator/validations/many.rb
|
75
76
|
- lib/hash_validator/validations/multiple.rb
|
76
77
|
- lib/hash_validator/validations/optional.rb
|
77
78
|
- lib/hash_validator/validators.rb
|
79
|
+
- lib/hash_validator/validators/alpha_validator.rb
|
80
|
+
- lib/hash_validator/validators/alphanumeric_validator.rb
|
78
81
|
- lib/hash_validator/validators/array_validator.rb
|
79
82
|
- lib/hash_validator/validators/base.rb
|
80
83
|
- lib/hash_validator/validators/boolean_validator.rb
|
81
84
|
- lib/hash_validator/validators/class_validator.rb
|
85
|
+
- lib/hash_validator/validators/digits_validator.rb
|
86
|
+
- lib/hash_validator/validators/dynamic_func_validator.rb
|
87
|
+
- lib/hash_validator/validators/dynamic_pattern_validator.rb
|
82
88
|
- lib/hash_validator/validators/email_validator.rb
|
83
89
|
- lib/hash_validator/validators/enumerable_validator.rb
|
84
90
|
- lib/hash_validator/validators/hash_validator.rb
|
91
|
+
- lib/hash_validator/validators/hex_color_validator.rb
|
92
|
+
- lib/hash_validator/validators/ip_validator.rb
|
93
|
+
- lib/hash_validator/validators/ipv4_validator.rb
|
94
|
+
- lib/hash_validator/validators/ipv6_validator.rb
|
95
|
+
- lib/hash_validator/validators/json_validator.rb
|
85
96
|
- lib/hash_validator/validators/lambda_validator.rb
|
86
97
|
- lib/hash_validator/validators/many_validator.rb
|
87
98
|
- lib/hash_validator/validators/multiple_validator.rb
|
@@ -90,16 +101,29 @@ files:
|
|
90
101
|
- lib/hash_validator/validators/regex_validator.rb
|
91
102
|
- lib/hash_validator/validators/simple_type_validators.rb
|
92
103
|
- lib/hash_validator/validators/simple_validator.rb
|
104
|
+
- lib/hash_validator/validators/url_validator.rb
|
93
105
|
- lib/hash_validator/version.rb
|
106
|
+
- spec/configuration_spec.rb
|
94
107
|
- spec/hash_validator_spec.rb
|
95
108
|
- spec/hash_validator_spec_helper.rb
|
96
109
|
- spec/spec_helper.rb
|
110
|
+
- spec/validators/alpha_validator_spec.rb
|
111
|
+
- spec/validators/alphanumeric_validator_spec.rb
|
97
112
|
- spec/validators/array_spec.rb
|
98
113
|
- spec/validators/base_spec.rb
|
99
114
|
- spec/validators/boolean_spec.rb
|
100
115
|
- spec/validators/class_spec.rb
|
116
|
+
- spec/validators/digits_validator_spec.rb
|
117
|
+
- spec/validators/dynamic_func_validator_spec.rb
|
118
|
+
- spec/validators/dynamic_pattern_validator_spec.rb
|
101
119
|
- spec/validators/email_spec.rb
|
120
|
+
- spec/validators/hash_validator_spec.rb
|
121
|
+
- spec/validators/hex_color_validator_spec.rb
|
102
122
|
- spec/validators/in_enumerable_spec.rb
|
123
|
+
- spec/validators/ip_validator_spec.rb
|
124
|
+
- spec/validators/ipv4_validator_spec.rb
|
125
|
+
- spec/validators/ipv6_validator_spec.rb
|
126
|
+
- spec/validators/json_validator_spec.rb
|
103
127
|
- spec/validators/lambda_spec.rb
|
104
128
|
- spec/validators/many_spec.rb
|
105
129
|
- spec/validators/multiple_spec.rb
|
@@ -108,6 +132,7 @@ files:
|
|
108
132
|
- spec/validators/regexp_spec.rb
|
109
133
|
- spec/validators/simple_spec.rb
|
110
134
|
- spec/validators/simple_types_spec.rb
|
135
|
+
- spec/validators/url_validator_spec.rb
|
111
136
|
- spec/validators/user_defined_spec.rb
|
112
137
|
homepage: https://github.com/JamesBrooks/hash_validator
|
113
138
|
licenses:
|
@@ -121,27 +146,39 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
121
146
|
requirements:
|
122
147
|
- - ">="
|
123
148
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
149
|
+
version: 3.0.0
|
125
150
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
126
151
|
requirements:
|
127
152
|
- - ">="
|
128
153
|
- !ruby/object:Gem::Version
|
129
154
|
version: '0'
|
130
155
|
requirements: []
|
131
|
-
rubygems_version: 3.
|
156
|
+
rubygems_version: 3.2.33
|
132
157
|
signing_key:
|
133
158
|
specification_version: 4
|
134
159
|
summary: Ruby library to validate hashes (Hash) against user-defined requirements
|
135
160
|
test_files:
|
161
|
+
- spec/configuration_spec.rb
|
136
162
|
- spec/hash_validator_spec.rb
|
137
163
|
- spec/hash_validator_spec_helper.rb
|
138
164
|
- spec/spec_helper.rb
|
165
|
+
- spec/validators/alpha_validator_spec.rb
|
166
|
+
- spec/validators/alphanumeric_validator_spec.rb
|
139
167
|
- spec/validators/array_spec.rb
|
140
168
|
- spec/validators/base_spec.rb
|
141
169
|
- spec/validators/boolean_spec.rb
|
142
170
|
- spec/validators/class_spec.rb
|
171
|
+
- spec/validators/digits_validator_spec.rb
|
172
|
+
- spec/validators/dynamic_func_validator_spec.rb
|
173
|
+
- spec/validators/dynamic_pattern_validator_spec.rb
|
143
174
|
- spec/validators/email_spec.rb
|
175
|
+
- spec/validators/hash_validator_spec.rb
|
176
|
+
- spec/validators/hex_color_validator_spec.rb
|
144
177
|
- spec/validators/in_enumerable_spec.rb
|
178
|
+
- spec/validators/ip_validator_spec.rb
|
179
|
+
- spec/validators/ipv4_validator_spec.rb
|
180
|
+
- spec/validators/ipv6_validator_spec.rb
|
181
|
+
- spec/validators/json_validator_spec.rb
|
145
182
|
- spec/validators/lambda_spec.rb
|
146
183
|
- spec/validators/many_spec.rb
|
147
184
|
- spec/validators/multiple_spec.rb
|
@@ -150,4 +187,5 @@ test_files:
|
|
150
187
|
- spec/validators/regexp_spec.rb
|
151
188
|
- spec/validators/simple_spec.rb
|
152
189
|
- spec/validators/simple_types_spec.rb
|
190
|
+
- spec/validators/url_validator_spec.rb
|
153
191
|
- spec/validators/user_defined_spec.rb
|