Bio-Gonzales
view release on metacpan or search on metacpan
lib/Bio/Gonzales/Project.pm view on Meta::CPAN
package Bio::Gonzales::Project;
use Mouse;
use warnings;
use strict;
use Carp;
use FindBin;
use File::Spec;
use Bio::Gonzales::Util::File qw/slurpc/;
use Bio::Gonzales::Util::Cerial;
use Bio::Gonzales::Util::Development::File;
use Data::Visitor::Callback;
use Bio::Gonzales::Util::Log;
use Data::Printer;
use POSIX;
use 5.010;
our $VERSION = '0.0546'; # VERSION
has 'analysis_version' => ( is => 'rw', builder => '_build_analysis_version' );
has '_substitute_conf' => ( is => 'rw', lazy_build => 1 );
has 'config' => ( is => 'rw', lazy_build => 1 );
has 'log' => ( is => 'rw', builder => '_build_log' );
sub _build_analysis_version {
my ($self) = @_;
if ( $ENV{ANALYSIS_VERSION} ) {
return $ENV{ANALYSIS_VERSION};
} elsif ( -f 'av' ) {
return ( slurpc('av') )[0];
} else {
carp "using current dir as output dir";
return '.';
}
}
sub _build__substitute_conf {
my ($self) = @_;
my %subs = (
av => sub { return $self->analysis_version },
path_to => sub { return $self->path_to(@_) },
data => sub { return $self->path_to('data') },
);
return Data::Visitor::Callback->new(
plain_value => sub {
return unless defined $_;
$_ =~ s{ ^ ~ ( [^/]* ) }
{ $1
? (getpwnam($1))[7]
: ( $ENV{HOME} || (getpwuid($>))[7] )
}ex;
my $subsre = join "|", keys %subs;
s{__($subsre)(?:\((.+?)\))?__}{ $subs{ $1 }->( $2 ? split( /,/, $2 ) : () ) }eg;
}
);
}
sub _build_log {
my ($self) = @_;
return Bio::Gonzales::Util::Log->new(
path => $self->_nfi('gonz.log'),
level => 'info',
namespace => $FindBin::Script
);
}
sub _build_config {
my ($self) = @_;
my $data;
if ( -f 'gonz.conf.yml' ) {
$data = yslurp('gonz.conf.yml');
} elsif ( -f 'gonzconf.yml' ) {
$data = yslurp('gonzconf.yml');
} elsif ( -f 'iof.yml' ) {
$data = yslurp('iof.yml');
} elsif ( -f 'io_files.yml' ) {
$data = thaw_file('io_files.yml');
} elsif ( -f 'iof.json' ) {
$data = jslurp('iof.json');
} else {
confess "io file not found";
}
$self->_substitute_conf->visit($data);
return $data;
}
sub BUILD {
my ($self) = @_;
my $av = $self->analysis_version;
unless ( $av && $av =~ /^[-A-Za-z_.0-9]+$/ ) {
carp "analysis version not or not correctly specified, variable contains: " . ( $av // 'nothing' );
carp "using current dir as output dir";
$self->analysis_version('.');
} else {
mkdir $av unless ( -d $av );
}
$self->log->info("invoked") # if a script is run, log it
if ( !$ENV{GONZLOG_SILENT} );
}
sub av { shift->analysis_version(@_) }
sub c { shift->conf(@_) }
sub nfi {
( run in 1.753 second using v1.01-cache-2.11-cpan-99c4e6809bf )