[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