= 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 (c) 2010 Starr Horne. See LICENSE for details.