package Catalyst::Controller::DBIC::API::Validator;
#ABSTRACT: Provides validation services for inbound requests against whitelisted parameters
use Moose;
+use Catalyst::Controller::DBIC::API::Validator::Visitor;
use namespace::autoclean;
BEGIN { extends 'Data::DPath::Validator'; }
sub _build_custom_visitor
{
- return Catalyst::Controller::DBIC::API::Visitor->new();
+ return Catalyst::Controller::DBIC::API::Validator::Visitor->new();
}
-Catalyst::Controller::DBIC::API::Validator->meta->make_immutable;
+__PACKAGE__->meta->make_immutable;
-###############################################################################
-package Catalyst::Controller::DBIC::API::Visitor;
-
-use Moose;
-use namespace::autoclean;
-
-BEGIN { extends 'Data::DPath::Validator::Visitor'; }
-
-use constant DEBUG => $ENV{DATA_DPATH_VALIDATOR_DEBUG} || 0;
-
-around visit_array => sub
-{
- my ($orig, $self, $array) = @_;
- $self->dive();
- warn 'ARRAY: '. $self->current_template if DEBUG;
- if(@$array == 1 && $array->[0] eq '*')
- {
- $self->append_text('[reftype eq "HASH" ]');
- $self->add_template($self->current_template);
- }
- else
- {
- if($self->current_template =~ /\/$/)
- {
- my $temp = $self->current_template;
- $self->reset_template();
- $temp =~ s/\/$//;
- $self->append_text($temp);
- }
- $self->$orig($array);
- }
- $self->rise();
-};
-
-sub visit_array_entry
-{
- my ($self, $elem, $index, $array) = @_;
- $self->dive();
- warn 'ARRAYENTRY: '. $self->current_template if DEBUG;
- if(!ref($elem))
- {
- $self->append_text($elem . '/*');
- $self->add_template($self->current_template);
- }
- elsif(ref($elem) eq 'HASH')
- {
- $self->visit($elem);
- }
- $self->rise();
- $self->value_type('NONE');
-};
-
-around visit_hash => sub
-{
- my ($orig, $self, $hash) = @_;
- $self->dive();
- if($self->current_template =~ /\/$/)
- {
- my $temp = $self->current_template;
- $self->reset_template();
- $temp =~ s/\/$//;
- $self->append_text($temp);
- }
- warn 'HASH: '. $self->current_template if DEBUG;
- $self->$orig($hash);
- $self->rise();
-};
-
-around visit_value => sub
-{
- my ($orig, $self, $val) = @_;
-
- if($self->value_type eq 'NONE')
- {
- $self->dive();
- $self->append_text($val . '/*');
- $self->add_template($self->current_template);
- warn 'VALUE: ' . $self->current_template if DEBUG;
- $self->rise();
- }
- elsif($self->value_type eq 'HashKey')
- {
- $self->append_text($val);
- warn 'VALUE: ' . $self->current_template if DEBUG;
- }
- else
- {
- $self->$orig($val);
- }
-
-};
-
-
-Catalyst::Controller::DBIC::API::Visitor->meta->make_immutable;
-
-1;
+1;
\ No newline at end of file