App-Nag

 view release on metacpan or  search on metacpan

META.yml  view on Meta::CPAN

configure_requires:
  ExtUtils::MakeMaker: 6.31
dynamic_config: 0
generated_by: 'Dist::Zilla version 4.200004, CPAN::Meta::Converter version 2.110420'
license: perl
meta-spec:
  url: http://module-build.sourceforge.net/META-spec-v1.4.html
  version: 1.4
name: App-Nag
requires:
  DateTime: 0
  DateTime::TimeZone: 0
  File::Temp: 0
  Getopt::Long::Descriptive: 0
  Gtk2: 0
  Gtk2::Notify: 0
  Modern::Perl: 0
  constant: 0
version: 0.002

Makefile.PL  view on Meta::CPAN

    'ExtUtils::MakeMaker' => '6.31'
  },
  'DISTNAME' => 'App-Nag',
  'EXE_FILES' => [
    'bin/nag',
    'bin/nag'
  ],
  'LICENSE' => 'perl',
  'NAME' => 'App::Nag',
  'PREREQ_PM' => {
    'DateTime' => '0',
    'DateTime::TimeZone' => '0',
    'File::Temp' => '0',
    'Getopt::Long::Descriptive' => '0',
    'Gtk2' => '0',
    'Gtk2::Notify' => '0',
    'Modern::Perl' => '0',
    'constant' => '0'
  },
  'VERSION' => '0.002',
  'test' => {
    'TESTS' => 't/*.t'

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

                }
              )
        }
    }
    return ( $opt, $usage, $name );
}


sub validate_time {
    my ( undef, $opt, $usage, $time, @args ) = @_;
    require DateTime;
    require DateTime::TimeZone;

    # parse time
    $usage->die(
        {
            pre_text => "ERROR: could not understand time expression: $time\n\n"
        }
    ) unless my %props = _parse_time($time);
    my $tz = DateTime::TimeZone->new( name => 'local' );
    my $now = DateTime->now( time_zone => $tz );
    my $then = $now->clone;

    if ( $props{unit} ) {
        my $unit = $props{unit};
        given ($unit) {
            when ('h') { $unit = 'hours' }
            when ('m') { $unit = 'minutes' }
            when ('s') { $unit = 'seconds' }
        }
        $then->add( $unit => $props{time} );

t/arg_validation.t  view on Meta::CPAN

#!/usr/bin/perl

use Modern::Perl;
use App::Nag;
use DateTime;
use DateTime::TimeZone;

use Test::More;
use Test::Fatal;

# this all could be cleaned up a bit

my (
    $opt,      $usage,   $name, $verbosity, $text,
    $synopsis, $seconds, $time, $true_seconds
);

t/arg_validation.t  view on Meta::CPAN


subtest '1H delta' => sub {
    @ARGV = qw(--slap 1H this is the text);
    ( $opt, $usage, $name ) = App::Nag->validate_args;
    ( $verbosity, $text, $synopsis, $seconds ) =
      App::Nag->validate_time( $opt, $usage, @ARGV );
    ok( $verbosity == 3,     'right verbosity --slap' );
    ok( $seconds == 60 * 60, '1h' );
};

my $tz = DateTime::TimeZone->new( name => 'local' );

subtest '10am' => sub {
    $time         = '10am';
    $true_seconds = get_time( 10, 0, 'am' );
    @ARGV         = ( $time, qw(this is the text) );
    ( $opt, $usage, $name ) = App::Nag->validate_args;
    ( $verbosity, $text, $synopsis, $seconds ) =
      App::Nag->validate_time( $opt, $usage, @ARGV );
    ok( $seconds == $true_seconds, "time: $time" );
};

t/arg_validation.t  view on Meta::CPAN

        undef,
        "can't parse 24pm"
    );
};

done_testing();

# construct a test time
sub get_time {
    my ( $hours, $minutes, $suffix ) = @_;
    my $now = DateTime->now( time_zone => $tz );
    my $then = $now->clone->set(
        hour   => $hours,
        minute => $minutes,
        second => 0
    );
    if ( $hours < 13 ) {
        $then->add( hours => 12 ) while $then < $now;
        given ( $suffix || '' ) {
            when ('am') { $then->add( hours => 12 ) if $then->hour >= 12 }
            when ('pm') { $then->add( hours => 12 ) if $then->hour < 12 }



( run in 0.450 second using v1.01-cache-2.11-cpan-2b0bae70ee8 )