[Jifty-commit] r2998 - in jifty/branches/virtual-models: . lib/Jifty/Model

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Fri Mar 16 14:17:33 EDT 2007


Author: sterling
Date: Fri Mar 16 14:17:32 2007
New Revision: 2998

Modified:
   jifty/branches/virtual-models/   (props changed)
   jifty/branches/virtual-models/lib/Jifty/Model/ModelClass.pm
   jifty/branches/virtual-models/t/TestApp-DatabaseBackedModels/t/01-insert.t

Log:
 r3238 at riddle:  andrew | 2007-03-16 13:16:42 -0500
 Add the ability to give additional super-classes to a database model.


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	Fri Mar 16 14:17:32 2007
@@ -34,6 +34,11 @@
         type is 'text',
         label is 'Description',
         render_as 'Textarea'; 
+    column super_classes =>
+        type is 'text',
+        label is 'Super classes',
+        hints is 'A space separated list of classes from which this model will inherit.';
+        validateor is \&validate_super_classes;
     column included_columns => 
         refers_to Jifty::Model::ModelClassColumnCollection by 'model_class';
 };
@@ -147,11 +152,12 @@
 
     my $uuid = $self->__uuid;
     my $base_class = Jifty->config->framework('ApplicationClass') . "::Record";
+    my $super_classes = ' '.$self->super_classes;
     my $class                 = << "EOF";
 use warnings;
 use strict;
 package $fully_qualified_class;
-use base qw'$base_class';
+use base qw'$base_class$super_classes';
 
 use constant CLASS_UUID => '$uuid';
 
@@ -169,4 +175,28 @@
     $INC{$path} = '#autoloaded';
 }
 
+=head2 validate_super_classes
+
+Makes certain that the value is a list of space separated class names.
+
+=cut
+
+sub validate_super_classes {
+    my ($self, $value) = @_;
+
+    if ($value !~ /^\s+$/) {
+
+        $value =~ /^
+            \s* (?: \w+ ) (?: :: \w+ )*          # match the first
+            ( \s+ (?: \w+ ) (?: :: \w+ )* )* \s* # match the rest
+        $/x
+            or return $self->validation_error(
+                super_classes => 'This must be a space separated list of Perl class names.',
+            );
+
+    }
+
+    return $self->validation_ok('super_classes');
+}
+
 1;

Modified: jifty/branches/virtual-models/t/TestApp-DatabaseBackedModels/t/01-insert.t
==============================================================================
--- jifty/branches/virtual-models/t/TestApp-DatabaseBackedModels/t/01-insert.t	(original)
+++ jifty/branches/virtual-models/t/TestApp-DatabaseBackedModels/t/01-insert.t	Fri Mar 16 14:17:32 2007
@@ -12,10 +12,15 @@
 use lib 't/lib';
 use Jifty::SubTest;
 
-use Jifty::Test tests => 23;
+use Jifty::Test tests => 26;
 
 ok(1, "Loaded the test script");
 
+{
+    package Some::Test;
+    use Test::More;
+    sub test_method_inherited_ok { pass; }
+}
 
 my $u = Jifty::CurrentUser->new(_bootstrap => 1);
 {
@@ -24,7 +29,9 @@
 ok($result, "Failed to instantiate an 'object' model before running our tests");
 }
 my $model = Jifty::Model::ModelClass->new(current_user => $u);
-$model->create(name => 'Object', description =>'You know. like widgets');
+$model->create(name          => 'Object', 
+               description   => 'You know. like widgets',
+               super_classes => 'Some::Test');
 ok($model->id);
 
 my $col = Jifty::Model::ModelClassColumn->new(current_user => $u);
@@ -58,6 +65,9 @@
 {
 my $object = TestApp::DatabaseBackedModels::Model::Object->new(current_user => $u);
 isa_ok($object, 'TestApp::DatabaseBackedModels::Model::Object');
+isa_ok($object, 'Some::Test');
+can_ok($object, 'test_method_inherited_ok');
+$object->test_method_inherited_ok;
 can_ok($object, 'id');
 can_ok($object, 'create');
 can_ok($object, 'name');


More information about the Jifty-commit mailing list