DBIx-Class-Result-Validation
view release on metacpan or search on metacpan
lib/DBIx/Class/Result/Validation.pm view on Meta::CPAN
sub error_reporting {
return 1;
};
=head2 _validate
_validate function is the function to redefine with validation behaviour object
=cut
sub _validate
{
return 1;
}
=head2 add_result_error
$self->add_result_error($key, $error_string)
Add a string error attributed to a key (field of object)
=cut
sub add_result_error
{
my ($self, $key, $value) = @_;
if (defined $self->result_errors)
{
if (defined $self->result_errors->{$key})
{ push(@{$self->result_errors->{$key}}, $value); }
else
{ $self->result_errors->{$key} = [$value]; }
}
else
{ $self->result_errors({$key => [$value]}); }
}
=head2 insert
call before DBIx::Calss::Base insert
Insert is done only if validate method return true
=cut
sub insert {
my $self = shift;
my $insert = $self->next::can;
return $self->_try_next_method($self->next::can, @_);
}
=head2 update
Call before DBIx::Class::Base update
Update is done only if validate method return true
=cut
sub update {
my $self = shift;
if ( my $columns = shift ) {
$self->set_inflated_columns($columns);
}
return $self->_try_next_method( $self->next::can, @_ );
}
sub _try_next_method {
my $self = shift;
my $next_method = shift;
my $class = ref $self;
my $result;
try {
if ( $self->validate ) {
$result = $self->$next_method(@_);
}
else {
my $errors = $self->_get_errors;
croak("$class: Validation failed.\n$errors");
}
}
catch {
my $error = $_;
$self->error_reporting();
$self->add_result_error(uncaught => $error) if !defined $self->result_errors;
croak $error
if ref $error eq 'DBIx::Class::Result::Validation::VException';
croak(
DBIx::Class::Result::Validation::VException->new(
object => $self,
message => "$error"
)
);
};
return $result;
}
sub _get_errors {
my $self = shift;
require Data::Dumper;
no warnings 'once';
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Sortkeys = 1;
local $Data::Dumper::Terse = 1;
return Data::Dumper::Dumper( $self->{result_errors} );
}
=head2 _erase_result_error
this function is called to re-init result_errors before call validate function
=cut
sub _erase_result_error
{
my $self = shift;
$self->result_errors(undef);
}
( run in 0.848 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )