DeeplyValid
There are times when you just can’t fake it. Maybe you’re implementing an API, or interacting with a legacy system. But for whatever reason, you have complex data structures that absolutely have to be valid.
DeeplyValid lets you define a “schema” for your data structures in a nice, declarative, way.
The Simplest Example:
class MyValidations < DeeplyValid::Base
define :name, "bob"
end
# true
MyValidations[:name].valid?("bob")
# false
MyValidations[:name].valid?("joe")
A more realistic example
class MyValidations < DeeplyValid::Base
define :person, {
:id => token(32),
:age => integer(1..100),
:name => string(1..100),
:department => {
:name => any('sales', 'accounting', 'engineering'),
:building => integer
},
:performace_reviews => array( structure(:review) )
}
# This structure is referenced in the "person" structure
define :review, {
:author => string(1..100),
:body => string(1..1024)
}
end
# true
MyValidations[:person].valid?({
:id => "x"*32,
:age => 22,
:name => "Bob Jones",
:department => {
:name => "sales",
:building => 33
},
:performace_reviews => [
{ :author => "joe", :body => "a review" },
{ :author => "bill", :body => "another review" }
]
})
Note on Patches/Pull Requests
-
Fork the project.
-
Make your feature addition or bug fix.
-
Add tests for it. This is important so I don’t break it in a future version unintentionally.
-
Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
-
Send me a pull request. Bonus points for topic branches.
Copyright
Copyright © 2010 Starr Horne. See LICENSE for details.