Subject: | [PATCH] adding FormValidator::Simple validation_filter support |
First time RT patcher, so I hope I've done this properly.
DBIC::Validation includes FormValidator::Simple by default, but doesn't support the use of validation_filter with it because its valid() method returns a HASHREF rather than an ARRAYREF like Data::FormValidator.
I've provided the simple fix, complete with tests.
Cheers,
-kwa
P.s. If I've done something wrong, I'd love to know so I can put it right.
Subject: | fvs_validation_filter.patch |
diff --git a/Changes b/Changes
index de850a4..6af52b3 100644
--- a/Changes
+++ b/Changes
@@ -1,5 +1,8 @@
Revision history for DBIx::Class::Validation
+0.02006 Tue Jun 25 10:51:55 2013
+ - Added validation_filter support for FormValidator::Simple (KWAKWA)
+
0.02005 Sat Jul 11 11:20:03 2009
- Fix bug that skipped validation when setting values while doing an
update() like this: $row->update($hashref) (Sergio Salvi) (RT#47709)
diff --git a/MANIFEST b/MANIFEST
index a0bb78f..8c6a5e2 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -21,6 +21,7 @@ t/lib/DBIC/Test/Schema.pm
t/lib/DBIC/Test/Schema/Test.pm
t/lib/Validator.pm
t/lib/ValidatorWithoutCheck.pm
+t/lib/FormValidator/Simple/Plugin/FilterTest.pm
t/manifest.t
t/pod_coverage.t
t/pod_spelling.t
diff --git a/META.yml b/META.yml
index c17ed1b..8f236da 100644
--- a/META.yml
+++ b/META.yml
@@ -27,4 +27,4 @@ requires:
perl: 5.8.1
resources:
license: http://dev.perl.org/licenses/
-version: 0.02005
+version: 0.02006
diff --git a/README b/README
index 42f5a9c..59c1719 100644
--- a/README
+++ b/README
@@ -91,7 +91,8 @@ METHODS
your validation modules "check" method. This is primarily meant for use
with "Data::FormValidator" but may be used with any validation module
that returns a results object that supports a "valid()" method just like
- "Data::FormValidator::Results".
+ "Data::FormValidator::Results". (The "valid()" method must return an ARRAY
+ reference or HASH reference.)
Filters modify your data, so use them carefully.
diff --git a/lib/DBIx/Class/Validation.pm b/lib/DBIx/Class/Validation.pm
index 29f54cf..55c55b0 100644
--- a/lib/DBIx/Class/Validation.pm
+++ b/lib/DBIx/Class/Validation.pm
@@ -2,7 +2,7 @@
package DBIx::Class::Validation;
use strict;
use warnings;
-our $VERSION = '0.02005';
+our $VERSION = '0.02006';
BEGIN {
use base qw/DBIx::Class Class::Accessor::Grouped/;
@@ -148,7 +148,8 @@ UPDATEs and INSERTs modify your data to that of the values returned by
your validation modules C<check> method. This is primarily meant for use
with L<"Data::FormValidator"> but may be used with any validation module
that returns a results object that supports a C<valid()> method just
-like L<"Data::FormValidator::Results">.
+like L<"Data::FormValidator::Results">. (The C<valid()> method must return
+an ARRAY reference or HASH reference.)
B<Filters modify your data, so use them carefully>.
@@ -178,7 +179,8 @@ sub validate {
if ($result->success) {
if ($self->validation_filter && $result->can('valid')) {
- $self->$_($result->valid($_)) for ($result->valid);
+ $self->$_($result->valid($_))
+ for (ref $result->valid eq 'HASH' ? keys %{$result->valid} : $result->valid);
};
return $result;
} else {
@@ -238,6 +240,8 @@ John Napiorkowski <jjn1056@yahoo.com>
Sergio Salvi <sergio@developerl.com>
+Paul Williams <kwakwa@cpan.org>
+
=head1 LICENSE
You may distribute this code under the same terms as Perl itself.
diff --git a/t/fvs.t b/t/fvs.t
index 90b1769..7b220e8 100644
--- a/t/fvs.t
+++ b/t/fvs.t
@@ -5,17 +5,18 @@ use warnings;
BEGIN {
use lib 't/lib';
- use DBIC::Test tests => 17;
+ use DBIC::Test tests => 19;
}
my $schema = DBIC::Test->init_schema;
my $row;
my $profile = [
- name => [ 'NOT_BLANK', ['LENGTH', 4, 10] ],
+ name => [ 'NOT_BLANK', ['LENGTH', 4, 10], 'LOWERCASE' ],
];
DBIC::Test::Schema::Test->validation_profile($profile);
+DBIC::Test::Schema::Test->validation_module->import(qw/FilterTest/);
Class::C3->reinitialize();
$row = eval{ $schema->resultset('Test')->create({name => ''}) };
@@ -47,6 +48,18 @@ Class::C3->reinitialize();
$row = eval{ $schema->resultset('Test')->create({name => 'qwertyqwerty'}) };
is $row->name, 'qwertyqwerty', 'validation is off';
+# validation filter
+DBIC::Test::Schema::Test->validation_auto(1);
+DBIC::Test::Schema::Test->validation_filter(1);
+Class::C3->reinitialize();
+$row = eval{ $schema->resultset('Test')->create({name => 'TEST', email => 'test@test.org'}); };
+is $row->name, 'test', 'filters applied';
+
+DBIC::Test::Schema::Test->validation_filter(0);
+Class::C3->reinitialize();
+$row = eval{ $schema->resultset('Test')->create({name => 'TEST', email => 'test@test.org'}) };
+is $row->name, 'TEST', 'no filters applied';
+
# validation changes all
DBIC::Test::Schema::Test->validation(
module => 'Validator',
diff --git a/t/lib/FormValidator/Simple/Plugin/FilterTest.pm b/t/lib/FormValidator/Simple/Plugin/FilterTest.pm
new file mode 100644
index 0000000..45b4739
--- /dev/null
+++ b/t/lib/FormValidator/Simple/Plugin/FilterTest.pm
@@ -0,0 +1,16 @@
+package FormValidator::Simple::Plugin::FilterTest;
+use strict;
+use warnings;
+
+use FormValidator::Simple::Constants;
+use FormValidator::Simple::Exception;
+
+sub LOWERCASE {
+ my ($self, $params, $args) = @_;
+
+ map { $_ = lc $_ } @$params;
+
+ return TRUE, $#$params ? $params : $params->[0];
+}
+
+1;