X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Controller-DBIC-API.git;a=blobdiff_plain;f=lib%2FCatalyst%2FController%2FDBIC%2FAPI%2FValidator.pm;h=3155020e44b9f9a98aedeac95bc26d3697459a27;hp=78176441c3f70ce1dd55c0fd42e65551f41b8f70;hb=8175463b4e1e7bb22f7f83f0eaa3e3a0ad1a70ea;hpb=d273984026646e5b57c052deef3fcb9121122060 diff --git a/lib/Catalyst/Controller/DBIC/API/Validator.pm b/lib/Catalyst/Controller/DBIC/API/Validator.pm index 7817644..3155020 100644 --- a/lib/Catalyst/Controller/DBIC/API/Validator.pm +++ b/lib/Catalyst/Controller/DBIC/API/Validator.pm @@ -1,6 +1,7 @@ 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'; } @@ -9,104 +10,9 @@ has '+visitor' => ( 'builder' => '_build_custom_visitor' ); 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