X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FController%2FDBIC%2FAPI%2FRequestArguments.pm;h=a6939f2c09e89aaee5f6fb9cc844495a3eb5b07b;hb=8c7199a13b832b6ce5e569320b3620dd38a67617;hp=e920857892c44b3d14bf305acbe86eeba318cb34;hpb=f0f07ea33a8782afb563bdc40a607d6823cb0a79;p=catagits%2FCatalyst-Controller-DBIC-API.git diff --git a/lib/Catalyst/Controller/DBIC/API/RequestArguments.pm b/lib/Catalyst/Controller/DBIC/API/RequestArguments.pm index e920857..a6939f2 100644 --- a/lib/Catalyst/Controller/DBIC/API/RequestArguments.pm +++ b/lib/Catalyst/Controller/DBIC/API/RequestArguments.pm @@ -6,6 +6,7 @@ use Catalyst::Controller::DBIC::API::Types(':all'); use MooseX::Types::Moose(':all'); use Scalar::Util('reftype'); use Data::Dumper; +use Catalyst::Controller::DBIC::API::Validator; use namespace::autoclean; use Catalyst::Controller::DBIC::API::JoinBuilder; @@ -16,35 +17,28 @@ A Catalyst::Controller::DBIC::API::Validator instance used solely to validate se =cut -with 'MooseX::Role::BuildInstanceOf' => -{ - 'target' => 'Catalyst::Controller::DBIC::API::Validator', - 'prefix' => 'search_validator', -}; - =attribute_private select_validator A Catalyst::Controller::DBIC::API::Validator instance used solely to validate select parameters =cut -with 'MooseX::Role::BuildInstanceOf' => -{ - 'target' => 'Catalyst::Controller::DBIC::API::Validator', - 'prefix' => 'select_validator', -}; - =attribute_private prefetch_validator A Catalyst::Controller::DBIC::API::Validator instance used solely to validate prefetch parameters =cut -with 'MooseX::Role::BuildInstanceOf' => -{ - 'target' => 'Catalyst::Controller::DBIC::API::Validator', - 'prefix' => 'prefetch_validator', -}; +has [qw( search_validator select_validator prefetch_validator )] => ( + is => 'ro', + isa => 'Catalyst::Controller::DBIC::API::Validator', + lazy => 1, + builder => '_build_validator', +); + +sub _build_validator { + return Catalyst::Controller::DBIC::API::Validator->new; +} parameter static => ( isa => Bool, default => 0 ); @@ -516,8 +510,9 @@ generate_column_parameters recursively generates properly aliased parameters for # build up condition foreach my $column (keys %$param) { - if($source->has_relationship($column)) + if ($source->has_relationship($column)) { + # check if the value isn't a hashref unless (ref($param->{$column}) && reftype($param->{$column}) eq 'HASH') { $search_params->{join('.', $base, $column)} = $param->{$column}; @@ -534,10 +529,22 @@ generate_column_parameters recursively generates properly aliased parameters for ) }}; } - else + elsif ($source->has_column($column)) { $search_params->{join('.', $base, $column)} = $param->{$column}; } + # might be a sql function instead of a column name + # e.g. {colname => {like => '%foo%'}} + else + { + # but only if it's not a hashref + unless (ref($param->{$column}) && reftype($param->{$column}) eq 'HASH') { + $search_params->{join('.', $base, $column)} = $param->{$column}; + } + else { + die "$column is neither a relationship nor a column\n"; + } + } } return $search_params; @@ -574,6 +581,7 @@ This builder method generates the search attributes as => $self->as || ((scalar(@{$static->as})) ? $static->as : undef), prefetch => $self->prefetch || $static->prefetch || undef, rows => $self->count || $static->count, + page => $static->page, offset => $self->offset, join => $self->build_joins, };