use coderef instead of run method
Arthur Axel 'fREW' Schmidt [Sat, 8 May 2010 18:18:45 +0000 (13:18 -0500)]
lib/DBIx/Class/DeploymentHandler/DeployMethod/SQL/Translator.pm
t/deploy_methods/sql_translator.t

index e64dd2c..7adfa61 100644 (file)
@@ -170,19 +170,18 @@ method _run_sql_and_perl($filenames) {
         $storage->_query_end($line);
       }
     } elsif ( $filename =~ /^(.+)\.pl$/ ) {
-      my $package = $1;
       my $filedata = do { local( @ARGV, $/ ) = $filename; <> };
-      # make the package name more palateable to perl
-      $package =~ s/\W/_/g;
 
       no warnings 'redefine';
-      eval "package $package;\n\n$filedata";
+      my $fn = eval "$filedata";
       use warnings;
 
-      if (my $fn = $package->can('run')) {
-        $fn->($self->schema);
+               if ($@) {
+        carp "$filename failed to compile: $@";
+               } elsif (ref $fn eq 'CODE') {
+        $fn->($self->schema)
       } else {
-        carp "$filename should define a run method that takes a schema but it didn't!";
+        carp "$filename should define an anonymouse sub that takes a schema but it didn't!";
       }
     } else {
       croak "A file ($filename) got to deploy that wasn't sql or perl!";
@@ -216,20 +215,18 @@ sub preinstall_scripts {
   for my $filename (@files) {
     # We ignore sql for now (till I figure out what to do with it)
     if ( $filename =~ /^(.+)\.pl$/ ) {
-      my $package = $1;
       my $filedata = do { local( @ARGV, $/ ) = $filename; <> };
-      # make the package name more palateable to perl
-      $package =~ s/\W/_/g;
 
-      no warnings 'redefine';
-      eval "package $package;\n\n$filedata";
+               no warnings 'redefine';
+      my $fn = eval "$filedata";
       use warnings;
+
                if ($@) {
         carp "$filename failed to compile: $@";
-               } elsif (my $fn = $package->can('run')) {
+               } elsif (ref $fn eq 'CODE') {
         $fn->()
       } else {
-        carp "$filename should define a run sub but it didn't!";
+        carp "$filename should define an anonymous sub but it didn't!";
       }
     } else {
       croak "A file ($filename) got to preinstall_scripts that wasn't sql or perl!";
index 2d5607d..ad95bab 100644 (file)
@@ -32,7 +32,7 @@ VERSION1: {
    mkpath(catfile(qw( t sql SQLite preinstall 1.0 )));
    open my $prerun, '>',
       catfile(qw( t sql SQLite preinstall 1.0 003-semiautomatic.pl ));
-   print {$prerun} "sub run {use File::Touch; touch(q(foobar));}";
+   print {$prerun} "sub {use File::Touch; touch(q(foobar));}";
    close $prerun;
    $dm->preinstall_scripts('1.0');
 
@@ -140,7 +140,7 @@ VERSION2: {
    open my $common_pl, '>',
       catfile(qw( t sql _common up 1.0-2.0 003-semiautomatic.pl ));
    print {$common_pl} q|
-      sub run {
+      sub {
          my $schema = shift;
          $schema->resultset('Foo')->create({
             bar => 'goodbye',