App-Ordo
view release on metacpan or search on metacpan
lib/App/Ordo/Command/Cal/Show.pm view on Meta::CPAN
package App::Ordo::Command::Cal::Show;
use Moo;
extends 'App::Ordo::Command::Base';
use feature qw(say);
use POSIX qw(strftime);
use Term::ANSIColor qw(colored);
use Text::Table::Tiny 1.02 qw(generate_table);
sub name { "cal show" }
sub summary { "Show detailed information about a calendar" }
sub usage { "<calendar-name>" }
sub option_spec { {} }
sub execute {
my ($self, $opt, $cal_name) = @_;
unless ($cal_name) {
say colored(["bold red"], "Usage: cal show <calendar-name>");
return;
}
my $res = $self->api->call('find_cal', { name => $cal_name });
unless ($res->{success}) {
say colored(["bold red"], "Calendar not found: $cal_name");
say " " . ($res->{message} || '');
return;
}
my ($cal) = grep { ($_->{name} || '') eq $cal_name } @{$res->{cals} || []};
unless ($cal) {
say colored(["bold red"], "Calendar '$cal_name' not found");
return;
}
my $name = $cal->{name} || colored(["yellow"], "(unnamed id:$cal->{id})");
my $tz = $cal->{tz} ? "$cal->{tz}" : "";
my $desc = $cal->{description} ? " - $cal->{description}" : "";
my $attached = $cal->{cluster_ids} && @{$cal->{cluster_ids}}
? join(", ", @{$cal->{cluster_ids}})
: "(not attached)";
say colored(["bold cyan"], "Calendar: $name$desc");
say colored(["bold cyan"], "TimeZone: $tz");
say colored(["bold cyan"], "Attached: $attached\n");
my $crons = $cal->{crons} || [];
if (@$crons) {
my $rows = [ [qw(ID CRON NEXT_START DESCRIPTION)] ];
for my $cron (@$crons) {
my $next = $cron->{next_start}
? strftime("%Y-%m-%d %H:%M", localtime($cron->{next_start}))
: '-';
my $desc = $cron->{description} || $cron->{english} || '';
push @$rows, [ $cron->{id}, $cron->{name}, $next, $desc ];
}
say generate_table(rows => $rows, header_row => 1, style => 'boxrule');
} else {
say colored(["yellow"], " (no cron expressions defined)");
}
}
1;
( run in 0.691 second using v1.01-cache-2.11-cpan-9581c071862 )