App-Munner

 view release on metacpan or  search on metacpan

lib/App/Munner/Runner.pm  view on Meta::CPAN

    default => '.',
);

has app_config => (
    is  => "ro",
    isa => "HashRef",
);

has env => (
    is      => "ro",
    isa     => "HashRef",
    builder => "_build_env",
);

sub _build_env {
    my $self = shift;
    my $conf = $self->app_config;
    return {}
        if !$conf->{env};
    return {}
        if ref $conf->{env} ne "ARRAY";
    return { map { my ( $key, $value ) = %$_ } @{ $conf->{env} } };
}

has fork_mode => (
    is      => "ro",
    isa     => "Int",
    builder => "_build_fork_mode",
);

sub _build_fork_mode {
    my $self = shift;
    return ( $ENV{TERMINAL} // $self->env->{TERMINAL} )
        ? 1
        : ( $self->todo =~ /start|duck/ ? 2 : 1 );
}

has user => (
    is      => "ro",
    isa     => "Str",
    builder => "_build_user",
);

sub _build_user {
    my $self = shift;
    my $user = ( $self->env->{USER} || $ENV{USER} )
        or die "Environment USER is not set\n";
    return $user;
}

has sys_user_info => (
    is      => "ro",
    isa     => "HashRef",
    builder => "_build_sys_user_info",
);

sub _build_sys_user_info {
    my $self = shift;
    my $user = $self->user;
    my %info = ();
    @info{qw( username password uid gid )} = getpwnam( $self->user )
        or die "User ($user) is invalid\n";
    return \%info;
}

has sys_uid => (
    is      => "ro",
    isa     => "Int",
    builder => "_build_sys_uid",
);

sub _build_sys_uid {
    shift->sys_user_info->{uid};
}

has sys_gid => (
    is      => "ro",
    isa     => "Int",
    builder => "_build_sys_gid",
);

sub _build_sys_gid {
    shift->sys_user_info->{gid};
}

has log_dir => (
    is      => "ro",
    isa     => "Str",
    builder => "_build_log_dir",
);

sub _build_log_dir {
    my $self    = shift;
    my $env     = $self->env;
    my $log_dir = $ENV{LOG_DIR} || $env->{LOG_DIR}
        or return q{};
    if ( $log_dir !~ /^\// ) {
        my $base_dir = $self->base_dir || q{};
        $log_dir = "$base_dir/$log_dir";
    }
    die "LOG_DIR: $log_dir is not found\n"
        if !-d $log_dir;
    return $log_dir;
}

has pid_file => (
    is      => "ro",
    isa     => "Str",
    builder => "_build_pid_file",
);

sub _build_pid_file {
    my $self     = shift;
    my $base_dir = $self->log_dir || $self->base_dir || q{};
    my $app      = $self->name;
    my $file
        = $ENV{PID_FILE} || $self->env->{PID_FILE} || "$base_dir/$app.pid";
    return $self->_touch($file);
}

has error_log => (



( run in 0.831 second using v1.01-cache-2.11-cpan-99c4e6809bf )