[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