[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