schematics
a library to validate data using schemas expressed as Crystal classes
Installation
-
Add the dependency to your
shard.yml
:dependencies: schematics: github: qequ/schematics
-
Run
shards install
Usage
require "schematics"
Instantiate a new Schema class and define the fields you want to validate:
schema = Schema.new(String)
schema.validate("hello") # => true
You can also validate complex arrays
schema = Schema.new(Array(String))
schema.validate(["hello", "world"]) # => true
schema = Schema.new([Array(String), Int32, [[Bool]]])
schema.validate([["hello", "world"], 1, [[true]]]) # => true
Hashes
Validating hashes with basic types:
schema = Schema.new(Hash(String, Int32))
schema.validate({"a" => 1, "b" => 2}) # => true
Hashes with different key types should fail:
schema = Schema.new(Hash(String, Int32))
schema.validate({"a" => 1, 1 => 2}) # => false
Nested hashes:
schema = Schema.new(Hash(String, Hash(String, Int32)))
schema.validate({"a" => {"b" => 1}, "c" => {"d" => 2}}) # => true
Hashes with mixed types:
schema = Schema.new(Hash(String, Array(Int32)))
schema.validate({"a" => [1,2,3], "b" => [4,5,6]}) # => true
Structs
You can validate data against a struct:
struct Person
property name : String
property age : Int32
def initialize(@name : String, @age : Int32)
end
end
schema = Schema.new(Person)
person_instance = Person.new(name: "John", age: 30)
schema.validate(person_instance) # => true
For more examples and advanced use cases, check the specs.
Development
Until this version Schematics only validates Basic data types (int, string, bool, etc) and Arrays of those types or nested arrays.
Upcoming versions should parse more complex types like Hashes, Structs, etc.
TODO
- [x] Add support for Hashes
- [x] Add support for Structs
- [ ] Add support for custom types
- [ ] Add support for custom validations
Contributing
- Fork it (https://github.com/qequ/schematics/fork)
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request
Contributors
- Alvaro Frias Garay - creator and maintainer