a library to validate data using schemas expressed as Crystal classes
-
Add the dependency to your
shard.yml
:dependencies: schematics: github: qequ/schematics
-
Run
shards install
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
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
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.
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.
- Add support for Hashes
- Add support for Structs
- Add support for custom types
- Add support for custom validations
- 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
- Alvaro Frias Garay - creator and maintainer