Project

schema

0.0
No commit activity in last 3 years
No release in over 3 years
Deep type conversion through schemas for hashes
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

~> 2.2
>= 0
 Project Readme

Schema

Schema is a mechanism for enforcing schemas for ruby hashes. Type conversions are specified in a schema-hash and applied to a hash that shall be transformed.

SYNOPSIS

Schema.transform({:float => '42', :array_of_strings => 23}, {:float => Float, :array_of_strings => [String]})
# => {:float => 42.0, :array_of_strings => ['23']}

or

Schema.include!

{:float => '42', :array_of_strings => 23}.transform({:float => Float, :array_of_strings => [String]})
# => {:float => 42.0, :array_of_strings => ['23']}

Schemas

A Schema is either a type that implements #from or a hash of schemas or an array with a schema as it's single element.

Float # is a schema
[Float] # is a schema
{ :string => String } # is a schema
{ :foo => [{ :bar => DateTime }]} # is a schema

Ruby has no Boolean class, therefore we define it, so we have:

"true".transform(Boolean) == true

nil is also a valid schema but it transforms everything to nil:

"string".transform(nil) == nil

In Hash-schemas keys may be optional indicated by a trailing question mark.

{ :optional => '42' }.transform({ :optional? => Float }) == { :optional => 42.0 }
{}.transform({ :optional? => Float }) == {}

This also enables circular schemas (for eg. trees)

schema = { :value => Float }
schema.update { :children? => [schema] }

Issues

  • Works only for symbol keys. Not yet sure if this is a bug or a feature...

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 Daniel Kirsch. See LICENSE for details.