change passing of preversion to be a parameter
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Admin.pm
index 9e2f90d..f078f33 100644 (file)
@@ -157,6 +157,11 @@ has force => (
        isa                     => 'Bool',
 );
 
+has quiet => (
+       is                      => 'rw',
+       isa                     => 'Bool',
+);
+
 has '_confirm' => (
        is              => 'ro',
        isa             => 'Bool',
@@ -181,7 +186,8 @@ sub upgrade {
                # schema is unversioned
                die "could not determin current schema version, please either install or deploy";
        } else {
-               $schema->upgrade();
+               my $ret = $schema->upgrade();
+               return $ret;
        }
 }
 
@@ -200,7 +206,6 @@ sub install {
                warn "forcing install may not be a good idea";
                if($self->confirm() ) {
                        # FIXME private api
-                       warn $version;
                        $self->schema->_set_db_version({ version => $version});
                }
        }
@@ -240,92 +245,71 @@ sub find_stanza {
 #die('Do not use the where option with the insert op') if ($where);
 #die('Do not use the attrs option with the insert op') if ($attrs);
 sub insert_data {
-       my ($self, $resultset, $set) = @_;
+       my ($self, $rs, $set) = @_;
+       my $resultset = $self->schema->resultset($rs);
        my $obj = $resultset->create( $set );
     print ''.ref($resultset).' ID: '.join(',',$obj->id())."\n" if (!$self->quiet);
 }
 
 sub update_data {
-       my ($self, $resultset, $set, $where) = @_;
-    $resultset = $resultset->search( ($where||{}) );
-    my $count = $resultset->count();
-    print "This action will modify $count ".ref($resultset)." records.\n" if (!$self->quiet);
-    if ( $self->force || $self->confirm() ) {
-        $resultset->update_all( $set );
-    }
+       my ($self, $rs, $set, $where) = @_;
+
+       my $resultset = $self->schema->resultset($rs);
+       $resultset = $resultset->search( ($where||{}) );
+
+       my $count = $resultset->count();
+       print "This action will modify $count ".ref($resultset)." records.\n" if (!$self->quiet);
+
+       if ( $self->force || $self->confirm() ) {
+               $resultset->update_all( $set );
+       }
 }
 
 # FIXME
 #die('Do not use the set option with the delete op') if ($set);
 sub delete_data {
-       my ($self, $resultset, $where, $attrs) = @_;
-
-    $resultset = $resultset->search( ($where||{}), ($attrs||()) );
-    my $count = $resultset->count();
-    print "This action will delete $count ".ref($resultset)." records.\n" if (!$self->quiet);
-    if ( $self->force || $self->confirm() ) {
-        $resultset->delete_all();
-    }
-}
+       my ($self, $rs, $where, $attrs) = @_;
 
+       my $resultset = $self->schema->resultset($rs);
+       $resultset = $resultset->search( ($where||{}), ($attrs||()) );
 
-#FIXME
-# die('Do not use the set option with the select op') if ($set);
-sub select_data {
-       my ($self, $resultset, $where, $attrs) = @_;
+       my $count = $resultset->count();
+       print "This action will delete $count ".ref($resultset)." records.\n" if (!$self->quiet);
 
-       
-    $resultset = $resultset->search( ($where||{}), ($attrs||()) );
+       if ( $self->force || $self->confirm() ) {
+               $resultset->delete_all();
+       }
 }
 
-# TODO, make this more generic, for different data formats
-sub output_data {
-       my ($self, $resultset) = @_;
-
-#      eval {
-#              ensure_class_loaded 'Data::Tabular::Dumper';
-#      };
-#      if($@) {
-#              die "Data::Tabular::Dumper is needed for outputing data";
-#      }
-       my $csv_class;
-       # load compatible CSV generators
-       foreach $csv_class (qw(Text::CSV_XS Text::CSV_PP)) {
-               eval { ensure_class_loaded $csv_class};
-               if($@) {
-                       $csv_class = undef;
-                       next;
-               } 
-       }
-       if (not defined $csv_class) {
-               die ('The select op requires either the Text::CSV_XS or the Text::CSV_PP module');
+sub select_data {
+       my ($self, $rs, $where, $attrs) = @_;
+
+       my $resultset = $self->schema->resultset($rs);
+       $resultset = $resultset->search( ($where||{}), ($attrs||()) );
+
+       my @data;
+       my @columns = $resultset->result_source->columns();
+       push @data, [@columns];# 
+
+       while (my $row = $resultset->next()) {
+               my @fields;
+               foreach my $column (@columns) {
+                       push( @fields, $row->get_column($column) );
+               }
+               push @data, [@fields];
        }
 
-    my $csv = $csv_class->new({
-       sep_char => ( $self->csv_format eq 'tsv' ? "\t" : ',' ),
-    });
-
-    my @columns = $resultset->result_source->columns();
-    $csv->combine( @columns );
-    print $csv->string()."\n";
-    while (my $row = $resultset->next()) {
-        my @fields;
-        foreach my $column (@columns) {
-            push( @fields, $row->get_column($column) );
-        }
-        $csv->combine( @fields );
-        print $csv->string()."\n";
-    }
+       return \@data;
 }
 
 sub confirm {
-    my ($self) = @_;
-       print "Are you sure you want to do this? (type YES to confirm) ";
+       my ($self) = @_;
+       print "Are you sure you want to do this? (type YES to confirm) \n";
        # mainly here for testing
        return 1 if ($self->_confirm());
        my $response = <STDIN>;
-    return 1 if ($response=~/^YES/);
-    return;
+       return 1 if ($response=~/^YES/);
+       return;
 }
 
 1;