package Data::TreeValidator::RepeatingBranch; BEGIN { $Data::TreeValidator::RepeatingBranch::VERSION = '0.02'; } # ABSTRACT: A branch that can have its input repeated multiple times use Moose; use namespace::autoclean; use Data::TreeValidator::Types qw( HashTree ); use aliased 'Data::TreeValidator::Result::Branch' => 'Result'; use aliased 'Data::TreeValidator::Result::Repeating' => 'RepeatingResult'; use MooseX::Params::Validate; use MooseX::Types::Moose qw( ArrayRef Maybe ); with 'Data::TreeValidator::Node'; extends 'Data::TreeValidator::Branch'; sub process { my $self = shift; my ($tree) = pos_validated_list([ shift ], { isa => Maybe[ ArrayRef[HashTree] ], coerce => 1 } ); my %args = @_; my $process = $tree || $args{initialize}; return RepeatingResult->new( input => $tree, results => [ map { my $element = $_; Result->new( input => $element, results => { map { $_ => $self->child($_)->process($element->{$_}) } $self->child_names } ) } @$process ] ); } 1; __END__ =pod =encoding utf-8 =head1 NAME Data::TreeValidator::RepeatingBranch - A branch that can have its input repeated multiple times =head1 DESCRIPTION A repeatable branch is one that has a specification, and can consume input multiple times. The branch can have any valid specification (including repeatable elements). This class has all the functionality of L. =head1 METHODS =head2 process($input) Takes an array reference as input, and attempts to validate each element against the branch specification. Returns a L result object, which can be inspected to determine if the processing was valid, and to obtain the cleaned data (which will be wrapped as an array reference). =head1 AUTHOR Oliver Charles =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2010 by Oliver Charles . This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut