[Jifty-commit] r2702 - in jifty/branches/virtual-models: .
lib/Jifty lib/Jifty/Script
t/TestApp-DatabaseBackedModels/lib/TestApp/DatabaseBackedModels
t/TestApp-DatabaseBackedModels/t
jifty-commit at lists.jifty.org
jifty-commit at lists.jifty.org
Mon Jan 29 00:22:22 EST 2007
Author: jesse
Date: Mon Jan 29 00:22:20 2007
New Revision: 2702
Added:
jifty/branches/virtual-models/t/TestApp-DatabaseBackedModels/t/bootstrap.t
Modified:
jifty/branches/virtual-models/ (props changed)
jifty/branches/virtual-models/lib/Jifty/Everything.pm
jifty/branches/virtual-models/lib/Jifty/Model/ModelClass.pm
jifty/branches/virtual-models/lib/Jifty/Model/ModelClassCollection.pm
jifty/branches/virtual-models/lib/Jifty/Script/Schema.pm
jifty/branches/virtual-models/t/TestApp-DatabaseBackedModels/lib/TestApp/DatabaseBackedModels/Bootstrap.pm
Log:
r21646 at hualien: jesse | 2007-01-29 13:10:21 +0800
* Now able to bootstrap database-backed model classes
Modified: jifty/branches/virtual-models/lib/Jifty/Everything.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Everything.pm (original)
+++ jifty/branches/virtual-models/lib/Jifty/Everything.pm Mon Jan 29 00:22:20 2007
@@ -51,10 +51,6 @@
use Jifty::Model::Session ();
use Jifty::Model::SessionCollection ();
-use Jifty::Model::ModelClass ();
-use Jifty::Model::ModelClassCollection ();
-use Jifty::Model::ModelClassColumn ();
-use Jifty::Model::ModelClassColumnCollection ();
use Jifty::Request ();
use Jifty::Request::Mapper ();
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 Mon Jan 29 00:22:20 2007
@@ -90,9 +90,11 @@
sub _instantiate_stub_class {
my $self = shift;
- my $base_class
- = Jifty->config->framework('ApplicationClass') . "::Record";
my $fully_qualified_class = $self->qualified_class();
+ my $path = join('/', split(/::/,$fully_qualified_class)).".pm";
+ return if ($INC{$path});
+
+ my $base_class = Jifty->config->framework('ApplicationClass') . "::Record";
my $class = <<EOF;
use warnings;
use strict;
@@ -103,11 +105,13 @@
1;
EOF
-
+ local $@;
eval "$class";
- if ($@) {
- warn $@;
- }
+ # Fake out the classloader so that it doesn't try to autoload our magically blessed-into-existence class
+ # This WILL hurt us when you also want an on-disk version of the same.
+ # At that point, the instantiation of db-backed classes should move into the classloader
+ if ($@) { die $@; }
+ $INC{$path} = '#autoloaded';
}
1;
Modified: jifty/branches/virtual-models/lib/Jifty/Model/ModelClassCollection.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Model/ModelClassCollection.pm (original)
+++ jifty/branches/virtual-models/lib/Jifty/Model/ModelClassCollection.pm Mon Jan 29 00:22:20 2007
@@ -13,4 +13,17 @@
sub record_class { 'Jifty::Model::ModelClass' }
+=head2 instantiate
+
+Instantiate all model classes in this collection. See L<Jifty::Model::ModelClass/instantiate>.
+
+=cut
+
+sub instantiate {
+ my $self = shift;
+ for (@{$self->items_array_ref}) {
+ $_->instantiate;
+ }
+}
+
1;
Modified: jifty/branches/virtual-models/lib/Jifty/Script/Schema.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Script/Schema.pm (original)
+++ jifty/branches/virtual-models/lib/Jifty/Script/Schema.pm Mon Jan 29 00:22:20 2007
@@ -216,6 +216,11 @@
my $bootstrapper = Jifty->app_class("Bootstrap");
Jifty::Util->require($bootstrapper);
$bootstrapper->run() if $bootstrapper->can('run');
+ my $virtual_classes = Jifty::Model::ModelClassCollection->new();
+ $virtual_classes->unlimit();
+ $virtual_classes->instantiate();
+ $self->create_tables_for_models(map {$_->qualified_class} @{$virtual_classes->items_array_ref});
+
};
die $@ if $@;
Modified: jifty/branches/virtual-models/t/TestApp-DatabaseBackedModels/lib/TestApp/DatabaseBackedModels/Bootstrap.pm
==============================================================================
--- jifty/branches/virtual-models/t/TestApp-DatabaseBackedModels/lib/TestApp/DatabaseBackedModels/Bootstrap.pm (original)
+++ jifty/branches/virtual-models/t/TestApp-DatabaseBackedModels/lib/TestApp/DatabaseBackedModels/Bootstrap.pm Mon Jan 29 00:22:20 2007
@@ -4,15 +4,15 @@
use base 'Jifty::Bootstrap';
sub run {
-# my $user = TestApp::DatabaseBackedModels::CurrentUser->new( _bootstrap => 1);
-# my $modelclass = Jifty::Model::ModelClass->new(current_user => $user);
-# $modelclass->create( name => 'Widget');
-#
-# my $col = Jifty::Model::ModelClassColumn->new(current_user => $user);
-# $col->create( name => 'name', label => 'Name', storage_type => 'text', hints => 'This is the widget name', model_class => $modelclass);
-# my $col2 = Jifty::Model::ModelClassColumn->new(current_user => $user);
-# $col2->create( name => 'inventory', label => 'Inventory', storage_type => 'int', hints => 'How many do we have on hand?', model_class => $modelclass);
-#
+ my $user = TestApp::DatabaseBackedModels::CurrentUser->new( _bootstrap => 1);
+ my $modelclass = Jifty::Model::ModelClass->new(current_user => $user);
+ $modelclass->create( name => 'Widget');
+
+ my $col = Jifty::Model::ModelClassColumn->new(current_user => $user);
+ $col->create( name => 'name', label => 'Name', storage_type => 'text', hints => 'This is the widget name', model_class => $modelclass);
+ my $col2 = Jifty::Model::ModelClassColumn->new(current_user => $user);
+ $col2->create( name => 'inventory', label => 'Inventory', storage_type => 'int', hints => 'How many do we have on hand?', model_class => $modelclass);
+
};
Added: jifty/branches/virtual-models/t/TestApp-DatabaseBackedModels/t/bootstrap.t
==============================================================================
--- (empty file)
+++ jifty/branches/virtual-models/t/TestApp-DatabaseBackedModels/t/bootstrap.t Mon Jan 29 00:22:20 2007
@@ -0,0 +1,39 @@
+#!/usr/bin/env perl
+
+use warnings;
+use strict;
+
+=head1 DESCRIPTION
+
+This is a template for your own tests. Copy it and modify it.
+
+=cut
+
+use lib 't/lib';
+use Jifty::SubTest;
+
+use Jifty::Test tests => 11;
+
+ok(1, "Loaded the test script");
+
+can_ok('TestApp::DatabaseBackedModels::Model::Widget', 'new');
+
+my $u = Jifty::CurrentUser->new(_bootstrap => 1);
+my $object = TestApp::DatabaseBackedModels::Model::Widget->new(current_user => $u);
+isa_ok($object, 'TestApp::DatabaseBackedModels::Model::Widget');
+isa_ok($object, 'TestApp::DatabaseBackedModels::Record');
+can_ok($object, 'id');
+can_ok($object, 'create');
+can_ok($object, 'name');
+can_ok($object, 'set_name');
+
+my $id = $object->create( name => 'Widget');
+ok($id, "Created id ".$id);
+is($id,$object->id);
+my $object_clone = TestApp::DatabaseBackedModels::Model::Widget->new(current_user => $u);
+
+$object_clone->load($id);
+is($object_clone->name, 'Widget');
+
+1;
+
More information about the Jifty-commit
mailing list