AlignDB-Stopwatch

 view release on metacpan or  search on metacpan

lib/AlignDB/Stopwatch.pm  view on Meta::CPAN

package AlignDB::Stopwatch;
use Moose;

use Time::Duration;
use Data::UUID;
use File::Spec;
use YAML::Syck;

our $VERSION = '1.1.0';

has program_name     => ( is => 'ro', isa => 'Str' );
has program_argv     => ( is => 'ro', isa => 'ArrayRef', default => sub { [] } );
has program_conf     => ( is => 'ro', isa => 'Object' );
has 'start_time'     => ( is => 'rw', isa => 'Value' );
has 'div_char'       => ( is => 'rw', isa => 'Str', default => sub {"="}, );
has 'div_length'     => ( is => 'rw', isa => 'Int', default => sub {30}, );
has 'min_div_length' => ( is => 'rw', isa => 'Int', default => sub {5} );
has uuid             => ( is => 'ro', isa => 'Str' );

sub BUILD {
    my $self = shift;

    $self->{start_time} = time;
    $self->{uuid}       = Data::UUID->new->create_str;

    return;
}

#@returns AlignDB::Stopwatch
sub record {
    my $self = shift;

    $self->{program_name} = $main::0;

    $self->{program_argv} = [@main::ARGV];

    return $self;
}

#@returns AlignDB::Stopwatch
sub record_conf {
    my $self = shift;
    my $conf = shift;

    $self->{program_conf} = $conf;

    return $self;
}

sub _divider {
    my $self  = shift;
    my $title = shift;

    my $title_length = $title ? length $title : 0;

    my $div_char       = $self->div_char;
    my $div_length     = $self->div_length;
    my $min_div_length = $self->min_div_length;

    my $divider_str;

    if ( !$title_length ) {
        $divider_str .= $div_char x $div_length;
        $divider_str .= "\n";
    }
    elsif ( $title_length > $div_length - 2 * $min_div_length ) {
        $divider_str .= $div_char x $min_div_length;
        $divider_str .= $title;
        $divider_str .= $div_char x $min_div_length;
        $divider_str .= "\n";
    }
    else {



( run in 0.770 second using v1.01-cache-2.11-cpan-524268b4103 )