[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