[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