fixed render_sharedir_file, we were passing $self twice
[catagits/Catalyst-Devel.git] / lib / Catalyst / Helper.pm
index c2ef31d..f8ffe9a 100644 (file)
@@ -15,6 +15,9 @@ use Catalyst::Utils;
 use Catalyst::Exception;
 use Path::Class qw/dir file/;
 use File::ShareDir qw/dist_dir/;
+use Moose;
+use aliased 'Path::Class::Dir';
+
 
 my %cache;
 
@@ -268,17 +271,30 @@ sub next_test {
 }
 
 # Do not touch this method, *EVER*, it is needed for back compat.
+## addendum: we had to split this method so we could have backwards
+## compatability.  otherwise, we'd have no way to pass stuff from __DATA__ 
 
 sub render_file {
     my ( $self, $file, $path, $vars ) = @_;
+    my $template = $self->get_file( ( caller(0) )[0], $file );
+    $self->render_file_contents($self, $template, $path, $vars);
+}
+
+sub render_sharedir_file {
+    my ( $self, $file, $path, $vars ) = @_;
+    my $template = $self->get_sharedir_file( $file );
+    $self->render_file_contents($template, $path, $vars);
+}
+
+sub render_file_contents {
+    my ( $self, $template, $path, $vars ) = @_;
     $vars ||= {};
     my $t = Template->new;
-    my $template = $self->get_sharedir_file( 'root', $file );
     return 0 unless $template;
     my $output;
     $t->process( \$template, { %{$self}, %$vars }, \$output )
       || Catalyst::Exception->throw(
-        message => qq/Couldn't process "$file", / . $t->error() );
+        message => qq/Couldn't process "$template", / . $t->error() );
     $self->mk_file( $path, $output );
 }
 
@@ -479,6 +495,42 @@ sub _deprecate_file {
     }
 }
 
+
+## this is so you don't have to do make install after every change to test
+sub _find_share_dir {
+  my ($self, $args) = @_;
+  my $share_name = $self->name;
+  if ($share_name =~ s!^/(.*?)/!!) {
+    my $dist = $1;
+    $args->{share_base_dir} = eval {
+        Dir->new(File::ShareDir::dist_dir($dist))
+           ->subdir('share');
+    };
+    if ($@) {
+        # not installed
+        my $file = __FILE__;
+        my $dir = Dir->new(dirname($file));
+        my $share_base;
+        while ($dir->parent) {
+            if (-d $dir->subdir('share') && -d $dir->subdir('share')->subdir('root')) {
+                $share_base = $dir->subdir('share')->subdir('root');
+                last;
+            }
+            $dir = $dir->parent;
+        }
+        confess "could not find sharebase by recursion. ended up at $dir, from $file"
+          unless $share_base;
+        $args->{share_base_dir} = $share_base; 
+    }
+  }
+  my $base = $args->{share_base_dir}->subdir($share_name);
+  confess "No such share base directory ${base}"
+    unless -d $base;
+  $self->share_dir($base);
+};
+
+
+
 =head1 DESCRIPTION
 
 This module is used by B<catalyst.pl> to create a set of scripts for a