NAME

Data::Rx - perl implementation of Rx schema system

VERSION

version 0.200003

SYNOPSIS

my $rx = Data::Rx->new;

my $success = {
  type     => '//rec',
  required => {
    location => '//str',
    status   => { type => '//int', value => 201 },
  },
  optional => {
    comments => {
      type     => '//arr',
      contents => '//str',
    },
  },
};

my $schema = $rx->make_schema($success);

my $reply = $json->decode( $agent->get($http_request) );

die "invalid reply" unless $schema->check($reply);

METHODS

new

my $rx = Data::Rx->new(\%arg);

This returns a new Data::Rx object.

Valid arguments are:

prefix        - optional; a hashref of prefix pairs for type shorthand
type_plugins  - optional; an arrayref of type or type bundle plugins
no_core_types - optional; if true, core type bundle is not loaded
sort_keys     - optional; see L</sort_keys>

The prefix hashref should look something like this:

{
  'pobox'  => 'tag:pobox.com,1995:rx/core/',
  'skynet' => 'tag:skynet.mil,1997-08-29:types/rx/',
}

make_schema

my $schema = $rx->make_schema($schema);

This returns a new schema checker (something with a check method) for the given Rx input.

register_type_plugin

$rx->register_type_plugin($type_or_bundle);

Given a type plugin, this registers the plugin with the Data::Rx object. Bundles are expanded recursively and all their plugins are registered. Type plugins must have a type_uri method and a new_checker method.

learn_type

$rx->learn_type($uri, $schema);

This defines a new type as a schema composed of other types.

For example:

$rx->learn_type('tag:www.example.com:rx/person',
                { type     => '//rec',
                  required => {
                    firstname => '//str',
                    lastname  => '//str',
                  },
                  optional => {
                    middlename => '//str',
                  },
                },
               );

add_prefix

$rx->add_prefix($name => $prefix_string);

For example:

$rx->add_prefix('.meta' => 'tag:codesimply.com,2008:rx/meta/');

sort_keys

$rx->sort_keys(1);

When sort_keys is enabled, causes Rx checkers for //rec and //map to sort the keys before validating. This results in failures being produced in a consistent order.

SEE ALSO

http://rjbs.manxome.org/rx

AUTHOR

Ricardo SIGNES <rjbs@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by Ricardo SIGNES.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.