/usr/local/CPAN/Archer/Archer/Plugin.pm
package Archer::Plugin;
use strict;
use warnings;
use Archer;
use Template;
use String::CamelCase qw//;
use Path::Class;
use Carp;
sub new {
my ( $class, $args ) = @_;
bless { %$args }, $class;
}
sub log {
my $self = shift;
Archer->context->log( @_ );
}
sub templatize {
my ( $self, $cmd ) = @_;
my $vars = {
config => $self->{ config },
project => $self->{ project },
l_project => $self->l_project,
work_dir => Archer->context->{ config }->{ global }->{ work_dir },
dest_dir => Archer->context->{ config }->{ global }->{ dest_dir },
server => $self->{ server },
user => $ENV{ USER },
};
my $tt = Template->new;
$tt->process( \$cmd, $vars, \my $out )
or $self->log( 'error' => 'Template Error: ' . $tt->error );
$out;
}
sub detach {
my ( $self, $msg ) = @_;
croak "$msg\n";
}
# FIXME: so bad...following method...
sub l_project {
my ( $self, ) = @_;
my $work_dir = Archer->context->{ config }->{ global }->{ work_dir };
my $lc = String::CamelCase::decamelize( $self->{ project } );
if ( -e file( $work_dir, $self->{ project }, $lc )->stringify ) {
return $lc;
}
else {
return lc Archer->context->{ project };
}
}
sub check_recipe {
my ( $self, $recipe_name, $altern_path ) = @_;
my ( $f, $path );
$f = File::Util->new;
$path = File::Spec->catfile( $FindBin::Bin, 'assets', 'recipe',
$recipe_name );
# check first in assets
if ( $f->existent( $path ) ) {
return $f->load_file( $path );
}
# if there is another path for recipe in the config, check this one
$path = File::Spec->catfile( $altern_path, $recipe_name );
if ( $f->existent( $path ) ) {
return $f->load_file( $path );
}
# fail
return;
}
1;