FormValidator::Simple::Plugin::DBIC::Schema::Unique - unique check for DBIC::Schema


FormValidator-Simple-Plugin-DBIC-Schema-Unique documentation Contained in the FormValidator-Simple-Plugin-DBIC-Schema-Unique distribution.

Index


Code Index:

NAME

Top

FormValidator::Simple::Plugin::DBIC::Schema::Unique - unique check for DBIC::Schema

SYNOPSIS

Top

    use FormValidator::Simple qw/DBIC::Schema::Unique/;

    # check single column
    FormValidator::Simple->check( $q => [
        name => [ [qw/DBIC_SCHEMA_UNIQUE name/, $schema->result_set('User')] ],
    ] );

DESCRIPTION

Top

This module is a plugin for FormValidator::Simple. This provides you a validation for unique check with DBIC table class.

SEE ALSO

Top

FormValidator::Simple

BUGS AND LIMITATIONS

Top

No bugs have been reported.

AUTHOR

Top

Atsushi Kobayashi <atsushi __at__ mobilefactory.jp>

LICENCE AND COPYRIGHT

Top


FormValidator-Simple-Plugin-DBIC-Schema-Unique documentation Contained in the FormValidator-Simple-Plugin-DBIC-Schema-Unique distribution.

package FormValidator::Simple::Plugin::DBIC::Schema::Unique;
use strict;
use warnings;
use Scalar::Util qw(blessed);
use FormValidator::Simple::Exception;
use FormValidator::Simple::Constants;

our $VERSION = '0.02';

sub DBIC_SCHEMA_UNIQUE {
    my ($class, $params, $args) = @_;

    unless ( scalar(@$args) >= 2 ) {
        FormValidator::Simple::Exception->throw(
            qq/Validation DBIC_SCHEMA_UNIQUE needs two arguments at least. /
        );
    }
    my $rs = pop @$args;
    if ( !blessed($rs) || !$rs->isa('DBIx::Class::ResultSet') ) {
        FormValidator::Simple::Exception->throw(
            qq/Validation DBIC_SCHEMA_UNIQUE: Last parameter need DBIx::Class::ResultSet's object./
        );
    }
    unless ( scalar(@$params) == scalar(@$args) ) {
        FormValidator::Simple::Exception->throw(
            qq/Validation DBIC_SCHEMA_UNIQUE: number of keys and validation arguments aren't same/
        );
    }

    my %criteria = ();
    for ( my $i = 0; $i < scalar(@$args); $i++ ) {
        my $key   = $args->[$i];
        my $value = $params->[$i];
        if ( $key =~ /^!(.+)$/ ) {
            $criteria{$1} = { '!=' => $value };
        }
        else {
            $criteria{$key} = $value || '';
        }
    }
    my $count = $rs->count(\%criteria);
    return $count > 0 ? FALSE : TRUE;
}

1;