NAME
JSON::Schema::Shorthand - Alternative, condensed format for JSON Schemas
VERSION
version 0.0.2
SYNOPSIS
use JSON::Schema::Shorthand;
my $schema = js_shorthand({
    object => { foo => 'number', bar => { type => 'string', required => 1 }         
});
# $schema is 
# { 
#   type => 'object',
#   properties => {
#       foo => { type => 'number' },
#       bar => { type => string },
#  }
#  required => [ 'bar' ],
# }
DESCRIPTION
JSON Schema is a useful beast, but its schema definition can be a little bit more long-winded than necessary. This module allows to use a few shortcuts that will be expanded into their canonical form.
CAVEAT: the module is still very young, and there are plenty of properties this module should expand and does not. So don't trust it blindly. If you hit such a case, raise a ticket and I'll refine the process.
js_shorthand
my $schema = js_shorthand $shorthand;
The module exports a single function, js_shorthand, that takes in a JSON schema in shorthand notation and returns the expanded, canonical schema form.
If you don't like the name js_shorthand, you can always import it under a different name in your namespace.
use JSON::Schema::Shorthand 'js_shorthand' => { -as => 'expand_json_schema' };
...;
my $schema = expand_json_schema $shorthand;
Types as string
If a string type is encountered where a property definition is expected, the string is expanded to the object { "type": type }.
{
    "foo": "number",
    "bar": "string"
}
expands to
{
    "foo": { "type": "number" },
    "bar": { "type": "string" }
}
If the string begins with a #, the type is assumed to be a reference and #type is expanded to { "$ref": type }.
{ "foo": "#/definitions/bar" } 
becomes
{ "foo": { "$ref": "#/definitions/bar" } }
object property
{ object: properties } expands to { type: "object", properties }.
shorthand                              expanded
------------------------               ---------------------------
foo: {                                  foo: {
    object: {                               type: "object",
        bar: { }                            properties: {
    }                                           bar: { }
}                                           }
                                        }
array property
{ array: items } expands to { type: "array", items }.
shorthand                              expanded
------------------------               ---------------------------
foo: {                                  foo: {
    array: 'number'                         type: "array",
}                                           items: {
                                                type: 'number' 
                                            }
                                        }
required property
If the required attribute is set to true for a property, it is bubbled up to the required attribute of its parent object.
shorthand                              expanded
------------------------               ---------------------------
foo: {                                  foo: {
    properties: {                           required: [ 'bar' ],
      bar: { required: true },              properties: { 
      baz: { }                                bar: {},
    }                                         baz: {}
}                                       }
SEE ALSO
* JSON Schema specs - http://json-schema.org/
* JavaScript version of this module - http://github.com/yanick/json-shema-shorthand
AUTHOR
Yanick Champoux <yanick@babyl.dyndns.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2016 by Yanick Champoux.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 136:
 Unknown directive: =head2Shorthands