Skip to content

Repository files navigation

JSON::SchemaBuilder

Build StatusCode ClimateTest CoverageGem Version

Build JSON Schemas with Ruby. Validates JSON using json-schema

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'classYourSchemaincludeJSON::SchemaBuilderdefschemaobjectdostring:name,min_length: 1,required: truearray:your_idsdomax_items10unique_itemstrueitemstype: :integerendendendendbuilder=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({})# => falsebuilder.schema.validatename: 'Your Name'# => true

builder.schema.validate!(data) validates your object, raising an exception on failure:

builder.schema.validate!({})# JSON::Schema::ValidationError: The property '#/' did not contain a required property of 'name'builder.schema.validate!name: 'Your Name',your_ids: [1,1,2]# JSON::Schema::ValidationError: The property '#/your_ids' contained duplicated array values

builder.schema.fully_validate(data) validates the object and reports all invalid properties:

builder.schema.fully_validateyour_ids: 'fail'# [# "The property '#/your_ids' of type String did not match the following type: array ",# "The property '#/' did not contain a required property of 'name'"# ]

Fragment validation can be accomplished by specifying the schema fragment:

builder.schema.validate[1],fragment: '#/properties/your_ids'# => true

Configuring

json-schema validation options can be specified in several contexts:

# As a global defaultJSON::SchemaBuilder.configuredo |opts|
opts.validate_schema=trueend# As a class-level defaultYourSchema.configuredo |opts|
opts.insert_defaults=trueend# Or at validationbuilder.schema.validatedata,strict: true,validate_schema: false# Results in{validate_schema: false,insert_defaults: true,strict: true}

Contributing

  1. Fork it ( https://github.com/parrish/json-schema_builder/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

About

Build JSON schemas with Ruby

Resources

Stars

33 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages