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.