DBIx-Class-FromValidators
view release on metacpan or search on metacpan
lib/DBIx/Class/FromValidators.pm view on Meta::CPAN
package DBIx::Class::FromValidators;
use strict;
use warnings;
use base 'DBIx::Class';
use Carp::Clan qw/^DBIx::Class/;
use Scalar::Util qw(blessed);
our $VERSION = '0.02';
{
package
DBIx::Class::ResultSet;
use strict;
use warnings;
use Carp::Clan qw/^DBIx::Class/;
use Scalar::Util qw(blessed);
sub create_from_fv {
my ($self, $results, $args) = @_;
croak "pass me a form results object" unless blessed($results);
croak "pass me a object which can call 'success' and 'valid'"
unless $results->can('success') and $results->can('valid');
croak "has error on form" unless $results->success;
my $cols = $args || {};
for my $col ($self->result_source->columns) {
next if defined($cols->{$col});
my $val;
if (defined($val = $results->valid($col))) {
$cols->{$col} = $val;
} elsif (defined($val = $args->{$col})) {
$cols->{$col} = $val;
}
}
return $self->create($cols);
}
}
sub update_from_fv {
my ($self, $results, $args) = @_;
croak "pass me a form results object" unless blessed($results);
croak "pass me a object which can call 'success' and 'valid'"
unless $results->can('success') and $results->can('valid');
croak "has error on form" unless $results->success;
my $cols = $args || {};
for my $col ($self->result_source->columns) {
next if defined($cols->{$col});
my $val;
if (defined($val = $results->valid($col))) {
$cols->{$col} = $val;
} elsif (defined($val = $args->{$col})) {
$cols->{$col} = $val;
}
}
return $self->update($cols);
}
1;
__END__
=head1 NAME
DBIx::Class::FromValidators - Update or Insert DBIx::Class data from Validators
=head1 SYNOPSIS
# in your Schema class
package
Test::Schema;
use base qw( DBIx::Class::Schema::Loader );
__PACKAGE__->loader_options(
components => [ qw( FromValidators ) ],
);
# in your Catalyst controller
$c->form;
$c->model('DBIC::Member')->create_from_fv($c->form,
{
# extra stuff
name => "woremacx",
email => "woremacx at gmail",
}
);
$c->model('DBIC::Member')->search({ name => "woremacx" })->first->update_from_fv($c->from,
{
# extra stuff
email => 'woremacx plus vagina at gmail',
}
);
=head1 DESCRIPTION
( run in 3.019 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )