[Jifty-commit] r2715 - in jifty/branches/virtual-models: . lib/Jifty/Model t/TestApp-DatabaseBackedModels/lib/TestApp/DatabaseBackedModels

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Mon Jan 29 05:31:26 EST 2007


Author: jesse
Date: Mon Jan 29 05:31:26 2007
New Revision: 2715

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
   jifty/branches/virtual-models/lib/Jifty/Script/Database.pm
   jifty/branches/virtual-models/t/TestApp-DatabaseBackedModels/lib/TestApp/DatabaseBackedModels/Bootstrap.pm

Log:
 r21655 at hualien:  jesse | 2007-01-29 18:28:05 +0800
  * generate uuids on models and columns


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 05:31:26 2007
@@ -20,14 +20,18 @@
 package Jifty::Model::ModelClass;
 use Jifty::Model::ModelClassColumnCollection; # we can drop this when we switch to Jifty::DBI's od branch
 use base qw( Jifty::Record );
+use Scalar::Defer;
+
 use Jifty::DBI::Schema;
 use Jifty::Record schema {
     column name => type is 'text';
     column description => type is 'text'; 
-    column since_version => type is 'text';
+    column uuid => type is 'text', is immutable;
     column included_columns => refers_to Jifty::Model::ModelClassColumnCollection by 'model_class';
 };
 
+
+
 =head2 table
 
 Database-backed models are stored in the table C<_jifty_models>.
@@ -55,7 +59,8 @@
 sub after_create {
     my $self = shift;
     my $idref = shift;
-    $self->load_by_cols(id=>$$idref);
+    $self->load_by_cols(id => $$idref);
+    $self->__set(column => 'uuid', value => Jifty::Util->generate_uuid) unless ($self->__value('uuid'));
     $self->instantiate();
     $self->qualified_class->create_table_in_db();
 

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	Mon Jan 29 05:31:26 2007
@@ -22,6 +22,7 @@
 
 use Jifty::DBI::Schema;
 use Jifty::Model::ModelClass;
+use Scalar::Defer;
 
 use Jifty::Record schema {
     column name => type is 'text';
@@ -36,7 +37,6 @@
     column canonicalizer => type is 'text'; # ditto
     column autocompleter => type is 'text'; # ditto
     column mandatory => type is 'boolean';
-    column since_version => type is 'text';
     column render_as => type is 'text'; # should actually be a reference to  a list
     column filters => type is 'text'; # should actually be a reference to  a list
     column description => type is 'text'; 
@@ -44,6 +44,7 @@
     column readable => type is 'boolean', default is 'true';
     column writable => type is 'boolean', default is 'true';
     column default_value => type is 'text';
+    column uuid => type is 'text', is immutable;
 };
 
 =head2 after_create
@@ -56,6 +57,8 @@
     my $self = shift;
     my $idref = shift;
     $self->load_by_cols(id => $$idref);
+    $self->__set(column => 'uuid', value => Jifty::Util->generate_uuid) 
+        unless ($self->__value('uuid'));
     $self->model_class->add_column($self);
 
     my $ret = Jifty->handle->simple_query( $self->model_class->qualified_class->add_column_sql( $self->name ) );

Modified: jifty/branches/virtual-models/lib/Jifty/Script/Database.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Script/Database.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Script/Database.pm	Mon Jan 29 05:31:26 2007
@@ -95,6 +95,50 @@
 }
 
 
+sub upgrade_schema {
+    my $self           = shift;
+    my $new_tables     = shift;
+    my $columns        = shift;
+    my $current_tables = Jifty::Model::ModelClassCollection->new();
+    $current_tables->unlimit();
+    while ( my $table = $current_tables->next ) {
+        if ( $new_tables->{ $table->id } ) {
+
+            # we have the same table in the db and the dump
+            # let's sync its attributes from the dump then sync its columns
+            delete $new_tables->{ $table->id };
+        } else {
+
+            # we don't have the table anymore. That means we should delete it.
+            $table->delete();
+        }
+
+        # now we only have tables that were not yet in the database;
+        $self->_upgrade_create_new_tables( $new_tables => $columns );
+    }
+}
+
+
+sub _upgrade_create_new_tables {
+    my $self       = shift;
+    my $new_tables = shift;
+    my $columns    = shift;
+    foreach my $table ( values %$new_tables ) {
+        my $class = Jifty::Model::ModelClass->new();
+        my ( $val, $msg ) = $class->create( %{$table} );
+
+        # Now that we have a brand new model, let's find all its columns
+        my @cols = grep { $_->{model_class} = $table->{id} } values %$columns;
+        foreach my $col (@cols) {
+            my $col_obj = Jifty::Model::ModelClassColumn->new();
+            $col_obj->create(%$col);
+        }
+    }
+
+}
+
+
+
 sub dump {
     my $self = shift;
     my $content = {};

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 05:31:26 2007
@@ -2,6 +2,7 @@
 use warnings;
 use strict;
 use base 'Jifty::Bootstrap';
+
 sub run { 
 
     my $user = TestApp::DatabaseBackedModels::CurrentUser->new( _bootstrap => 1);


More information about the Jifty-commit mailing list