Comments (1)
I usually define a method with all the logic to custom validate the keys in this case. Then I use a lambda to call that method and validate the key. Something like:
require 'hash_validator'
# the data you provided
VALID_FOO = [1,2]
VALID_BAR = [3,4]
valid_a = { foo: [1,2], bar: [3,4]}
valid_b = {}
valid_c = {foo: [1]}
valid_d = {bar: [3]}
invalid_a = {foo: 1}
invalid_b = {bar: 1}
invalid_c = {bar: [1]}
# assembling an array with your samples
samples = [valid_a, valid_b, valid_c, valid_d, invalid_a, invalid_b, invalid_c]
# the expected hash with lambdas
expected = {
foo: ->(value) { foo_validation value },
bar: ->(value) { bar_validation value }
}
# methods with the logic of the validation
def foo_validation(value)
return true unless value
value.each { |v| return false unless VALID_FOO.include? v } if value.is_a? Array
end
def bar_validation(value)
return true unless value
value.each { |v| return false unless VALID_BAR.include? v } if value.is_a? Array
end
# validating each of the samples you provided
samples.each do |sample|
val = HashValidator.validate(sample, expected)
puts val.valid?
puts val.errors
end
If you run this code, you'll see that the first four hashes are OK, and the other three are invalid, just like you want.
Also, you can write a custom validator and use it just like the others.
from hash_validator.
Related Issues (13)
- Append Validator Doesn't Work HOT 4
- How to use regexp validations? HOT 2
- Conditional and referential validations HOT 1
- Does it support many validators for same key ? HOT 1
- How can I validate an array of values within a given set? HOT 2
- [enhancement] Exclusive key validation. HOT 1
- Feature Request: Union
- ArrayValidator not available when installing from RubyGems HOT 1
- Enumeration support HOT 4
- Add 'hash' type to stop validation recursion HOT 2
- Requied field bug when evaluating value is boolean "false" HOT 1
- Validators as symbol HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from hash_validator.