JSON Schema validator. Supports drafts 4, 6, and 7.
Add this line to your application's Gemfile:
gem 'json_schemer'
And then execute:
$ bundle
Or install it yourself as:
$ gem install json_schemer
require 'json_schemer'
schema = {
'type' => 'object',
'properties' => {
'abc' => {
'type' => 'integer',
'minimum' => 11
}
}
}
schemer = JSONSchemer.schema(schema)
# true/false validation
schemer.valid?({ 'abc' => 11 })
# => true
schemer.valid?({ 'abc' => 10 })
# => false
# error validation (`validate` returns an enumerator)
schemer.validate({ 'abc' => 10 }).to_a
# => [{"data"=>10, "schema"=>{"type"=>"integer", "minimum"=>11}, "pointer"=>"#/abc", "type"=>"minimum"}]
# default property values
data = {}
JSONSchemer.schema(
{
'properties' => {
'foo' => {
'default' => 'bar'
}
}
},
insert_property_defaults: true
).valid?(data)
data
# => {"foo"=>"bar"}
# schema files
require 'pathname'
schema = Pathname.new('/path/to/schema.json')
schemer = JSONSchemer.schema(schema)
# schema json string
schema = '{ "type": "integer" }'
schemer = JSONSchemer.schema(schema)
JSONSchemer.schema(
schema,
# validate `format` (https://tools.ietf.org/html/draft-handrews-json-schema-validation-00#section-7)
# true/false
# default: true
format: true,
# insert default property values during validation
# true/false
# default: false
insert_property_defaults: true,
# modify properties during validation. You can pass one Proc or a list of Procs to modify data.
# Proc/[Proc]
# default: nil
before_property_validation: proc do |data, property, property_schema, _parent|
data[property] ||= 42
end,
# modify properties after validation. You can pass one Proc or a list of Procs to modify data.
# Proc/[Proc]
# default: nil
after_property_validation: proc do |data, property, property_schema, _parent|
data[property] = Date.iso8601(data[property]) if property_schema.is_a?(Hash) && property_schema['format'] == 'date'
end,
# resolve external references
# 'net/http'/proc/lambda/respond_to?(:call)
# 'net/http': proc { |uri| JSON.parse(Net::HTTP.get(uri)) }
# default: proc { |uri| raise UnknownRef, uri.to_s }
ref_resolver: 'net/http'
)
After checking out the repo, run bin/setup
to install dependencies. Then, run rake test
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
Bug reports and pull requests are welcome on GitHub at https://github.com/davishmcclurg/json_schemer.
The gem is available as open source under the terms of the MIT License.