App-TimeTracker

 view release on metacpan or  search on metacpan

Build.PL  view on Meta::CPAN

    "Carp" => 0,
    "Data::Dumper" => 0,
    "DateTime" => 0,
    "DateTime::Format::Duration" => 0,
    "DateTime::Format::ISO8601" => 0,
    "Exporter" => 0,
    "File::Copy" => 0,
    "File::Find::Rule" => 0,
    "File::HomeDir" => 0,
    "Hash::Merge" => 0,
    "JSON::XS" => 0,
    "Moose" => 0,
    "Moose::Role" => 0,
    "Moose::Util::TypeConstraints" => 0,
    "MooseX::Getopt" => 0,
    "MooseX::Storage" => 0,
    "MooseX::Storage::Format::JSONpm" => 0,
    "MooseX::Types::Path::Class" => 0,
    "Path::Class" => 0,
    "Path::Class::Iterator" => 0,
    "Scalar::Util" => 0,

META.json  view on Meta::CPAN

            "Carp" : "0",
            "Data::Dumper" : "0",
            "DateTime" : "0",
            "DateTime::Format::Duration" : "0",
            "DateTime::Format::ISO8601" : "0",
            "Exporter" : "0",
            "File::Copy" : "0",
            "File::Find::Rule" : "0",
            "File::HomeDir" : "0",
            "Hash::Merge" : "0",
            "JSON::XS" : "0",
            "Moose" : "0",
            "Moose::Role" : "0",
            "Moose::Util::TypeConstraints" : "0",
            "MooseX::Getopt" : "0",
            "MooseX::Storage" : "0",
            "MooseX::Storage::Format::JSONpm" : "0",
            "MooseX::Types::Path::Class" : "0",
            "Path::Class" : "0",
            "Path::Class::Iterator" : "0",
            "Scalar::Util" : "0",

META.json  view on Meta::CPAN

      },
      "homepage" : "http://timetracker.plix.at/",
      "repository" : {
         "type" : "git",
         "url" : "https://github.com/domm/App-TimeTracker.git",
         "web" : "https://github.com/domm/App-TimeTracker"
      }
   },
   "version" : "3.010",
   "x_generated_by_perl" : "v5.34.0",
   "x_serialization_backend" : "Cpanel::JSON::XS version 4.26",
   "x_spdx_expression" : "Artistic-1.0-Perl OR GPL-1.0-or-later"
}

cpanfile  view on Meta::CPAN

requires "Carp" => "0";
requires "Data::Dumper" => "0";
requires "DateTime" => "0";
requires "DateTime::Format::Duration" => "0";
requires "DateTime::Format::ISO8601" => "0";
requires "Exporter" => "0";
requires "File::Copy" => "0";
requires "File::Find::Rule" => "0";
requires "File::HomeDir" => "0";
requires "Hash::Merge" => "0";
requires "JSON::XS" => "0";
requires "Moose" => "0";
requires "Moose::Role" => "0";
requires "Moose::Util::TypeConstraints" => "0";
requires "MooseX::Getopt" => "0";
requires "MooseX::Storage" => "0";
requires "MooseX::Storage::Format::JSONpm" => "0";
requires "MooseX::Types::Path::Class" => "0";
requires "Path::Class" => "0";
requires "Path::Class::Iterator" => "0";
requires "Scalar::Util" => "0";

helper/convert_2_003_to_2_004.pl  view on Meta::CPAN

use warnings;
use 5.010;

use File::Find::Rule;
use Data::Dumper;
use App::TimeTracker::Data::Task;
use App::TimeTracker::Proto;
use DateTime;
use Path::Class;
use Try::Tiny;
use JSON::XS;
use Path::Class;

$|=1;
my $app = App::TimeTracker::Proto->new;
my @files = File::Find::Rule->file()->name(qr/\.trc$/)
    ->in( $app->home );

foreach my $old (@files) {
    print '.';
    my $json_old = Path::Class::File->new($old)->slurp;

lib/App/TimeTracker.pm  view on Meta::CPAN

use warnings;
use 5.010;

use App::TimeTracker::Data::Task;
use DateTime;
use Moose;
use Moose::Util::TypeConstraints;
use Path::Class qw();
use Path::Class::Iterator;
use MooseX::Storage::Format::JSONpm;
use JSON::XS;

our $HOUR_RE   = qr/(?<hour>[012]?\d)/;
our $MINUTE_RE = qr/(?<minute>[0-5]?\d)/;
our $DAY_RE    = qr/(?<day>[0123]?\d)/;
our $MONTH_RE  = qr/(?<month>[01]?\d)/;
our $YEAR_RE   = qr/(?<year>2\d{3})/;

with qw(
    MooseX::Getopt
);

lib/App/TimeTracker.pm  view on Meta::CPAN


        push( @found, $file );
    }
    return sort @found;
}

sub project_tree {
    my $self = shift;
    my $file = $self->home->file('projects.json');
    return unless -e $file && -s $file;
    my $decoder  = JSON::XS->new->utf8->pretty->relaxed;
    my $projects = $decoder->decode( scalar $file->slurp );

    my %tree;
    my $depth;
    while ( my ( $project, $location ) = each %$projects ) {
        $tree{$project} //= { parent => undef, children => {} };
        # check config file for parent
        if ( -e $location ) {
            my $this_config = $decoder->decode(
                scalar Path::Class::file($location)->slurp );

lib/App/TimeTracker/Command/Core.pm  view on Meta::CPAN

        $project = $dirs[-1];
    }
    my $fh      = $cwd->file('.tracker.json')->openw;
    say $fh <<EOCONFIG;
{
    "project":"$project"
}
EOCONFIG

    my $projects_file = $self->home->file('projects.json');
    my $coder         = JSON::XS->new->utf8->pretty->canonical->relaxed;
    if ( -e $projects_file ) {
        my $projects = $coder->decode( scalar $projects_file->slurp );
        $projects->{$project} =
            $cwd->file('.tracker.json')->absolute->stringify;
        $projects_file->spew( $coder->encode($projects) );
    }

    say "Set up this directory for time-tracking via file .tracker.json";
}

lib/App/TimeTracker/Proto.pm  view on Meta::CPAN

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,
);

lib/App/TimeTracker/Proto.pm  view on Meta::CPAN

        };
        return $decoded_json;
    }
    else {
        return {};
    }
}

has 'project' => ( is => 'rw', isa => 'Str', predicate => 'has_project' );

has 'json_decoder' => ( is => 'ro', isa => 'JSON::XS', lazy_build => 1 );

sub _build_json_decoder {
    my $self = shift;
    return JSON::XS->new->utf8->pretty->canonical->relaxed;
}

sub run {
    my $self = shift;

    try {
        my $config = $self->load_config;
        my $class  = $self->setup_class($config);
        $class->name->new_with_options( {
                home   => $self->home,



( run in 0.879 second using v1.01-cache-2.11-cpan-fd5d4e115d8 )