[Jifty-commit] r4202 - in jifty/branches/virtual-models: .

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Wed Oct 3 17:59:00 EDT 2007


Author: sterling
Date: Wed Oct  3 17:59:00 2007
New Revision: 4202

Modified:
   jifty/branches/virtual-models/   (props changed)
   jifty/branches/virtual-models/lib/Jifty/Model/ModelClass.pm
   jifty/branches/virtual-models/lib/Jifty/Model/ModelClassColumn.pm

Log:
 r12830 at riddle:  andrew | 2007-10-03 16:58:11 -0500
 Adding support for fancy type handlers to virtual-models. This way virtual-models can use the UUID, GoogleMap, and any similar plugins in the future.


Modified: jifty/branches/virtual-models/lib/Jifty/Model/ModelClass.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Model/ModelClass.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Model/ModelClass.pm	Wed Oct  3 17:59:00 2007
@@ -47,7 +47,7 @@
         refers_to Jifty::Model::ModelClassColumnCollection by 'model_class';
 };
 
-
+use Hash::Merge ();
 
 =head2 table
 
@@ -139,6 +139,22 @@
     my $self = shift;
     my $col = shift;
     my $column =$self->qualified_class->add_column($col->name);
+
+    if ($col->type_handler) {
+        my $name = $col->name;
+        my $typehandler = $col->type_handler;
+
+        # TODO XXX FIXME There has got to be a better way. Someone who knows
+        # the guts of Jifty::DBI::Schema and Object::Declare can probably clean
+        # this up.
+
+        package Jifty::DBI::Schema;
+        my $type_handler_column 
+            = &declare(sub { column $name => is $typehandler })->{$name};
+        $column = Hash::Merge::merge($column, $type_handler_column);
+        $column = bless $column, 'Jifty::DBI::Column';
+    }
+
     for (qw(readable writable hints indexed max_length render_as mandatory sort_order virtual)) {
         $column->$_( $col->$_() );
     }
@@ -151,8 +167,12 @@
     $column->default( $col->default_value );
     $column->distinct( $col->distinct_value );
     $column->type( $col->storage_type );
-    $self->qualified_class->_init_methods_for_column($column);
 
+    if (my $handler = $column->attributes->{'_init_handler'}) {
+        $handler->($column, $self->qualified_class);
+    }
+
+    $self->qualified_class->_init_methods_for_column($column);
 }
 
 

Modified: jifty/branches/virtual-models/lib/Jifty/Model/ModelClassColumn.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Model/ModelClassColumn.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Model/ModelClassColumn.pm	Wed Oct  3 17:59:00 2007
@@ -152,6 +152,13 @@
         label is 'Virtual?',
         is mandatory,
         default is 0;
+
+    # Allows you to specify a special type handler, normally given in
+    # traditional schema declarations like "is GeoLocation"
+    column type_handler =>
+        type is 'text',
+        label is 'Type handler',
+        ;
 };
 
 =head2 before_create


More information about the Jifty-commit mailing list