[Jifty-commit] r2714 - in jifty/branches/virtual-models: . lib/Jifty

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Mon Jan 29 05:30:04 EST 2007


Author: jesse
Date: Mon Jan 29 05:30:04 2007
New Revision: 2714

Modified:
   jifty/branches/virtual-models/   (props changed)
   jifty/branches/virtual-models/lib/Jifty/Record.pm
   jifty/branches/virtual-models/lib/Jifty/Script/Database.pm

Log:
 r21654 at hualien:  jesse | 2007-01-29 17:44:58 +0800
 * First cut at dump-db-to-file, load-db-from-file style "fixtures"
 


Modified: jifty/branches/virtual-models/lib/Jifty/Record.pm
==============================================================================
--- jifty/branches/virtual-models/lib/Jifty/Record.pm	(original)
+++ jifty/branches/virtual-models/lib/Jifty/Record.pm	Mon Jan 29 05:30:04 2007
@@ -16,6 +16,8 @@
 
 use base qw(Jifty::Object Jifty::DBI::Record Class::Accessor::Fast);
 __PACKAGE__->mk_accessors('_is_readable');
+use Jifty::DBI::SchemaGenerator;
+
 
 sub _init {
     my $self = shift;

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:30:04 2007
@@ -27,6 +27,8 @@
 sub options {
     (
      'dump'       => 'dump',
+     'load'       => 'load',
+     'replace'  => 'replace',
     )
 }
 
@@ -38,7 +40,64 @@
 sub run {
     my $self = shift;
     Jifty->new();
-    my %content = {};
+
+    if ($self->{dump}) { $self->dump(); }
+    elsif ($self->{load}) { $self->load(); }
+}
+
+sub load {
+    my $self = shift;
+    my @content = <STDIN>;
+    my $content = Jifty::YAML::Load(join('', at content));
+    print Jifty::YAML::Dump($content)."\n";
+    Jifty->handle->begin_transaction();
+    # First the core stuff
+    foreach my $class (grep { /^Jifty::Model/ } keys %$content) { 
+        next if ($class =~ /^Jifty::Model::ModelClass(?:Column)?/); 
+        $self->load_content($class => $content->{$class});
+    }
+    # Then the user stuff
+    foreach my $class (grep {! /^Jifty::Model/ } keys %$content) { 
+        $self->load_content($class => $content->{$class});
+    }
+}
+
+sub load_content {
+    my $self    = shift;
+    my $class   = shift;
+    my $content = shift;
+    Jifty::Util->require($class)
+        || Jifty->logger->log->fatal(
+        "There's no locally defined class called $class. Without that, we can't insert records into it"
+        );
+
+    my $current_user = Jifty::CurrentUser->new( _bootstrap => 1 );
+    foreach my $id ( sort keys %$content ) {
+        my $obj = $class->new( current_user => $current_user );
+        if ( $self->{'replace'} ) {
+            $obj->load_by_cols( id => $content->{$id}->{id} );
+            if ( $obj->id ) {
+                $obj->delete();
+            }
+        }
+
+        my ( $val, $msg ) = $class->create( %{ $content->{$id} } );
+        if ($val) {
+            Jifty->logger->log->info("Inserting $id into $class: $val");
+        } else {
+            Jifty->logger->log->fatal(
+                "Failed to insert $id into $class: $val");
+
+        }
+
+    }
+
+}
+
+
+sub dump {
+    my $self = shift;
+    my $content = {};
  foreach my $model (Jifty->class_loader->models, qw(Jifty::Model::Metadata Jifty::Model::ModelClass Jifty::Model::ModelClassColumn)) {
         next unless $model->isa('Jifty::Record');
         my $collection = $model."Collection";
@@ -50,14 +109,16 @@
             my $ds = {};
              for ($item->columns) {
                  next if $_->virtual;
-                $ds->{$_->name} = $item->__value($_->name);
+                my $value = $item->__value($_->name);
+                next unless defined $value;
+                $ds->{$_->name} = $value;
              }
-            $content{$model}->{$item->id} = $ds;
+            $content->{$model}->{$item->id} = $ds;
         }
         
 
     }
-    print Jifty::YAML::Dump(\%content)."\n";
+    print Jifty::YAML::Dump($content)."\n";
     
 }
 


More information about the Jifty-commit mailing list