Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
A Simple base class for generating simple validators based on Data::Rx
Perl

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib/Data/Rx/Tools
t
.gitignore
.perltidyrc
Changes
README.mkdn
dist.ini
perlcritic.rc
weaver.ini

README.mkdn

NAME

Data::Rx::Tools::ShareDirValidator - A Simple base class for generating simple validators based on Data::Rx

VERSION

version 0.1.3

SYNOPSIS

package Foo;
use Data::Rx::Tools::ShareDirValidator;
use parent 'Data::Rx::Tools::ShareDirValidator';

sub filename { 'schema' } # default value.
sub suffix  {'.json'} # default value.

1;

...

Later:

use Foo;
Foo->check({ some => [ 'data', 'structure' ] }) # true/false

1;

DESCRIPTION

The purpose of this is to make creating a portable validator with Data::Rx as painless as possible, while still permitting you to keep the specification itself separate from the actual implementation.

METHODS

filename

Defaults to just 'schema' and is combined with "suffix" to form the name of the file to load from the share directory.

suffix

Defaults to '.json' and is combined with "filename" to form the name of the file.

check

ClassName->check( $data )

Does all the lifting behind this module and validates the data in $data.

decode_file

Defaults to a decoder that can read JSON files.

->decode_file( Path::Class::File $file )

Override this method with something else if you don't want JSON files.

IMPLEMENTATION INSTRUCTIONS

  1. Create package 'Foo' and fill it with the generic boilerplate to extend the base class.
  2. Generate your Data::Rx schema in the format you desire ( ideally JSON ) and place it in the modules "Share" directory.

    ( i.e.: With Dist::Zilla, you would do this:

    [ModuleSharedirs]
    Foo = sharedir/Foo
    

    or something similar. )

  3. Ship your distribution and/or install it.

  4. Use it by simply doing:

    use Foo;
    if( Foo->check({ datastructure => [] })
    

    passing the data structure you need validated to check().

EXTENDING

By default, we assume you want JSON for everything, so by default, the suffix is ".json", and the default deserialiser is as follows:

sub decode_file {
  my ( $self, $file ) = @_;
  require JSON;
  return JSON->new()->utf8(1)->relaxed(1)->decode( scalar $file->slurp() );
}

If you want to use a file format other than JSON, overriding the suffix and decode_file sub is required.

Note: $file in this context is a file from Path::Class, which is why we can just do slurp() on it.

AUTHOR

Kent Fredric kentnl@cpan.org

COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by Kent Fredric kentnl@cpan.org.

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

Something went wrong with that request. Please try again.