App-TimeTracker
view release on metacpan or search on metacpan
lib/App/TimeTracker/Proto.pm view on Meta::CPAN
package App::TimeTracker::Proto;
# ABSTRACT: App::TimeTracker Proto Class
our $VERSION = '3.010'; # VERSION
use strict;
use warnings;
use 5.010;
use App::TimeTracker::Utils qw(error_message);
use Moose;
use MooseX::Types::Path::Class;
use File::HomeDir ();
use Path::Class;
use Hash::Merge qw(merge);
use JSON::XS;
use Carp;
use Try::Tiny;
use App::TimeTracker::Data::Task;
use App::TimeTracker::Constants qw(MISSING_PROJECT_HELP_MSG);
has 'home' => (
is => 'ro',
isa => 'Path::Class::Dir',
lazy_build => 1,
);
sub _build_home {
my ( $self, $home ) = @_;
$home ||=
Path::Class::Dir->new( $ENV{TRACKER_HOME} || (File::HomeDir->my_home, '.TimeTracker' ));
unless (-d $home) {
$home->mkpath;
$self->_write_config_file_locations( {} );
my $fh = $self->global_config_file->openw;
print $fh $self->json_decoder->encode( {} );
close $fh;
}
return $home;
}
has 'global_config_file' => (
is => 'ro',
isa => 'Path::Class::File',
lazy_build => 1,
);
sub _build_global_config_file {
my $self = shift;
return $self->home->file('tracker.json');
}
has 'config_file_locations' => (
is => 'ro',
isa => 'HashRef',
lazy_build => 1,
);
sub _build_config_file_locations {
my $self = shift;
my $file = $self->home->file('projects.json');
if ( -e $file && -s $file ) {
my $decoded_json;
try {
$decoded_json = decode_json( $file->slurp );
}
catch {
error_message( "Could not json decode '%s'.\nError: '%s'", $file, $_ );
exit 1;
};
return $decoded_json;
}
else {
return {};
}
}
( run in 1.366 second using v1.01-cache-2.11-cpan-39bf76dae61 )