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

Jifty commits jifty-commit at lists.jifty.org
Fri Feb 29 01:40:07 EST 2008


Author: sartak
Date: Fri Feb 29 01:40:06 2008
New Revision: 5179

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/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:
 r52261 at onn:  sartak | 2008-02-29 01:38:30 -0500
 Apply filters on default values for attributes
 Rename encode_select to decode_select (I always get the two confused)
 Force undefined boolean attributes to be false, for sanity reasons


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 01:40:06 2008
@@ -1332,7 +1332,7 @@
     $self->record_class->new(handle => $self->_handle)->_apply_input_filters(
         column    => $column_obj,
         value_ref => \$args{'value'},
-    ) if $column_obj && $column_obj->encode_select;
+    ) if $column_obj && $column_obj->decode_select;
 
     my $clause = {
         column   => $qualified_column,

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 01:40:06 2008
@@ -30,7 +30,7 @@
     case_sensitive
     private
     protected
-    encode_select
+    decode_select
     /;
 
 # these actually live in the attributes hash

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 01:40:06 2008
@@ -6,12 +6,14 @@
 use base 'Jifty::DBI::Filter';
 
 use constant TRUE_VALUES  => qw(1 t true y yes TRUE);
-use constant FALSE_VALUES => qw(0 f false n no FALSE);
+use constant FALSE_VALUES => ('', qw(0 f false n no FALSE));
 
 sub _is_true {
     my $self = shift;
     my $value = shift;
 
+    no warnings 'uninitialized';
+
     for ($self->TRUE_VALUES, map { "'$_'" } $self->TRUE_VALUES) {
         return 1 if $value eq $_;
     }
@@ -23,6 +25,8 @@
     my $self = shift;
     my $value = shift;
 
+    return 1 if not defined $value;
+
     for ($self->FALSE_VALUES, map { "'$_'" } $self->FALSE_VALUES) {
         return 1 if $value eq $_;
     }
@@ -42,8 +46,6 @@
 with the database's concept of the boolean's value. (For example, 't' and 'f'
 might be used -- 'f' is true in Perl)
 
-If the value is C<undef>, then the encoded value will also be C<undef>.
-
 =cut
 
 sub encode {
@@ -69,8 +71,6 @@
 Transform the value to the canonical true or false value as expected by the
 database.
 
-If the value is C<undef>, then the decoded value will also be C<undef>.
-
 =cut
 
 sub decode {

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 01:40:06 2008
@@ -1071,7 +1071,7 @@
             $self->_apply_input_filters(
                 column    => $column_obj,
                 value_ref => \$value,
-            ) if $column_obj->encode_select;
+            ) if $column_obj->decode_select;
 
             # if the handle is in a case_sensitive world and we need to make
             # a case-insensitive query
@@ -1368,6 +1368,11 @@
             and not ref $column->default )
         {
             $attribs{ $column->name } = $column->default;
+
+            $self->_apply_input_filters(
+                column    => $column,
+                value_ref => \$attribs{ $column->name },
+            );
         }
 
         if (    not defined $attribs{ $column->name }

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 01:40:06 2008
@@ -407,11 +407,12 @@
     boolean => sub {
         _init_handler is sub {
             my ($column, $from) = @_;
-            $column->encode_select(1);
+            $column->decode_select(1);
             $column->type('boolean');
         },
         type is 'boolean',
         filters are qw(Jifty::DBI::Filter::Boolean),
+        default is 0,
     },
 );
 

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 01:40:06 2008
@@ -6,7 +6,7 @@
 BEGIN { require "t/utils.pl" }
 our (@available_drivers);
 
-use constant TESTS_PER_DRIVER => 122;
+use constant TESTS_PER_DRIVER => 130;
 
 my $total = scalar(@available_drivers) * TESTS_PER_DRIVER;
 plan tests => $total;
@@ -40,13 +40,13 @@
         ( map { [$_, 'false'] } @false ),
     );
 
-    for my $value ( @values ) {
+    for my $value ( @values, [undef, 'false'] ) {
         my ($input, $bool) = @$value;
 
         my $rec = TestApp::User->new( handle => $handle );
         isa_ok($rec, 'Jifty::DBI::Record');
 
-        my ($id) = $rec->create( my_data => $input );
+        my ($id) = $rec->create( defined($input) ? (my_data => $input) : () );
         ok($id, 'created record');
         ok($rec->load($id), 'loaded record');
         is($rec->id, $id, 'record id matches');


More information about the Jifty-commit mailing list