JSON::SchemaBuilder

Installation
Add this line to your application's Gemfile:
gem 'json-schema_builder'
And then execute:
$ bundle
Or install it yourself as:
$ gem install json-schema_builder
Usage
Building schemas
require 'json/schema_builder'
class YourSchema
include JSON::SchemaBuilder
def schema
object do
string :name, min_length: 1, required: true
array :your_ids do
max_items 10
unique_items true
items type: :integer
end
end
end
end
builder = YourSchema.new
builder.schema.as_json
will return a valid JSON schema:
{
"type": "object",
"required": "name",
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"your_ids": {
"type": "array",
"maxItems": 10,
"uniqueItems": true,
"items": { "type": "integer" }
}
}
}
More examples can be found in the specs.
Validating data against a schema
builder.schema.validate(data)
will validate your object against the schema:
builder.schema.validate({ })
builder.schema.validate name: 'Your Name'
builder.schema.validate!(data)
validates your object, raising an exception on failure:
builder.schema.validate!({ })
builder.schema.validate! name: 'Your Name', your_ids: [1, 1, 2]
builder.schema.fully_validate(data)
validates the object and reports all invalid properties:
builder.schema.fully_validate your_ids: 'fail'
Fragment validation can be accomplished by specifying the schema fragment:
builder.schema.validate [1], fragment: '#/properties/your_ids'
Configuring
json-schema validation options can be specified in several contexts:
JSON::SchemaBuilder.configure do |opts|
opts.validate_schema = true
end
YourSchema.configure do |opts|
opts.insert_defaults = true
end
builder.schema.validate data, strict: true, validate_schema: false
{
validate_schema: false,
insert_defaults: true,
strict: true
}
Contributing
- Fork it ( https://github.com/parrish/json-schema_builder/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