[Jifty-commit] r5178 - in Jifty-DBI/trunk: . lib/Jifty/DBI lib/Jifty/DBI/Filter

Jifty commits jifty-commit at lists.jifty.org
Fri Feb 29 00:30:49 EST 2008


Author: sartak
Date: Fri Feb 29 00:30:47 2008
New Revision: 5178

Modified:
   Jifty-DBI/trunk/   (props changed)
   Jifty-DBI/trunk/lib/Jifty/DBI/Collection.pm
   Jifty-DBI/trunk/lib/Jifty/DBI/Column.pm
   Jifty-DBI/trunk/lib/Jifty/DBI/Filter.pm
   Jifty-DBI/trunk/lib/Jifty/DBI/Filter/Boolean.pm
   Jifty-DBI/trunk/lib/Jifty/DBI/Record.pm
   Jifty-DBI/trunk/lib/Jifty/DBI/Schema.pm
   Jifty-DBI/trunk/t/06filter_boolean.t

Log:
 r52259 at onn:  sartak | 2008-02-29 00:30:30 -0500
 Add a new column attribute, encode_select. This will apply filters on load_by_cols and limit. Have Boolean use encode_select.


Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Collection.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Collection.pm	(original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Collection.pm	Fri Feb 29 00:30:47 2008
@@ -1329,6 +1329,11 @@
         $args{'operator'} = 'IN';
     }
 
+    $self->record_class->new(handle => $self->_handle)->_apply_input_filters(
+        column    => $column_obj,
+        value_ref => \$args{'value'},
+    ) if $column_obj && $column_obj->encode_select;
+
     my $clause = {
         column   => $qualified_column,
         operator => $args{'operator'},

Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Column.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Column.pm	(original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Column.pm	Fri Feb 29 00:30:47 2008
@@ -30,6 +30,7 @@
     case_sensitive
     private
     protected
+    encode_select
     /;
 
 # these actually live in the attributes hash

Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Filter.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Filter.pm	(original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Filter.pm	Fri Feb 29 00:30:47 2008
@@ -67,8 +67,6 @@
 A L<Jifty::DBI::Column> object, whatever sort of column we're working
 with here.
 
-=back
-
 =item handle
 
 A L<Jifty::DBI::Handle> object, because some filters (ie

Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Filter/Boolean.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Filter/Boolean.pm	(original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Filter/Boolean.pm	Fri Feb 29 00:30:47 2008
@@ -12,7 +12,7 @@
     my $self = shift;
     my $value = shift;
 
-    for ($self->TRUE_VALUES) {
+    for ($self->TRUE_VALUES, map { "'$_'" } $self->TRUE_VALUES) {
         return 1 if $value eq $_;
     }
 
@@ -23,7 +23,7 @@
     my $self = shift;
     my $value = shift;
 
-    for ($self->FALSE_VALUES) {
+    for ($self->FALSE_VALUES, map { "'$_'" } $self->FALSE_VALUES) {
         return 1 if $value eq $_;
     }
 

Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Record.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Record.pm	(original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Record.pm	Fri Feb 29 00:30:47 2008
@@ -1068,6 +1068,11 @@
                 $value = $value->id;
             }
 
+            $self->_apply_input_filters(
+                column    => $column_obj,
+                value_ref => \$value,
+            ) if $column_obj->encode_select;
+
             # if the handle is in a case_sensitive world and we need to make
             # a case-insensitive query
             if ( $self->_handle->case_sensitive && $value ) {

Modified: Jifty-DBI/trunk/lib/Jifty/DBI/Schema.pm
==============================================================================
--- Jifty-DBI/trunk/lib/Jifty/DBI/Schema.pm	(original)
+++ Jifty-DBI/trunk/lib/Jifty/DBI/Schema.pm	Fri Feb 29 00:30:47 2008
@@ -405,6 +405,11 @@
 
 __PACKAGE__->register_types(
     boolean => sub {
+        _init_handler is sub {
+            my ($column, $from) = @_;
+            $column->encode_select(1);
+            $column->type('boolean');
+        },
         type is 'boolean',
         filters are qw(Jifty::DBI::Filter::Boolean),
     },

Modified: Jifty-DBI/trunk/t/06filter_boolean.t
==============================================================================
--- Jifty-DBI/trunk/t/06filter_boolean.t	(original)
+++ Jifty-DBI/trunk/t/06filter_boolean.t	Fri Feb 29 00:30:47 2008
@@ -6,7 +6,7 @@
 BEGIN { require "t/utils.pl" }
 our (@available_drivers);
 
-use constant TESTS_PER_DRIVER => 86;
+use constant TESTS_PER_DRIVER => 122;
 
 my $total = scalar(@available_drivers) * TESTS_PER_DRIVER;
 plan tests => $total;
@@ -61,6 +61,25 @@
         # undef/NULL
         $rec->set_my_data;
         is($rec->my_data, undef, 'set undef value');
+
+        $rec->set_my_data($input);
+        ok($bool eq 'true' ? $rec->my_data : !$rec->my_data, 'Perl agrees with the expected boolean value');
+    }
+
+    for my $value ( @values ) {
+        my ($input, $bool) = @$value;
+        my $rec = TestApp::User->new( handle => $handle );
+        $rec->load_by_cols(
+            my_data => $input,
+        );
+        ok($rec->id, "loaded a record by boolean value '$input'");
+
+        my $col = TestApp::UserCollection->new( handle => $handle );
+        $col->limit(
+            column => 'my_data',
+            value  => $input,
+        );
+        ok($bool eq 'true' ? $col->first->my_data : !$col->first->my_data, 'Perl agrees with the expected boolean value');
     }
 
     cleanup_schema('TestApp', $handle);
@@ -71,8 +90,6 @@
 package TestApp::User;
 use base qw/ Jifty::DBI::Record /;
 
-1;
-
 sub schema_sqlite {
 
 <<EOF;
@@ -115,4 +132,13 @@
     }
 }
 
+package TestApp::UserCollection;
+
+use base qw/Jifty::DBI::Collection/;
+
+sub _init {
+    my $self = shift;
+    $self->SUPER::_init(@_);
+    $self->table('users');
+}
 


More information about the Jifty-commit mailing list