Bump version and update Changes
[gruntmaster-data.git] / gruntmaster-contest
1 #!/usr/bin/perl -w
2 use v5.14;
3
4 use Gruntmaster::Data;
5
6 use IO::Prompter [ -style => 'bold', '-stdio', '-verbatim' ];
7 use POSIX qw/strftime/;
8 use Date::Parse qw/str2time/;
9
10 ##################################################
11
12 my $dsn = $ENV{GRUNTMASTER_DSN} // 'dbi:Pg:';
13 my $db = Gruntmaster::Data->connect($dsn);
14
15 sub cmd_help{
16 exec perldoc => $0
17 }
18
19 sub cmd_list{
20 local $, = "\n";
21 say map { $_->id } $db->contests->all;
22 }
23
24 sub cmd_show{
25 my %columns = $db->contest(shift)->get_columns;
26 $columns{$_} = strftime '%c', localtime $columns{$_} for qw/start stop/;
27 print <<END
28 Name: $columns{name}
29 Owner: $columns{owner}
30 Start: $columns{start}
31 Stop: $columns{stop}
32 END
33 }
34
35 sub cmd_add{
36 my ($id) = @_;
37 my $name = prompt 'Contest name';
38 my $owner = prompt 'Owner';
39 my $start = str2time prompt 'Start time' or die 'Cannot parse time';
40 my $stop = str2time prompt 'Stop time' or die 'Cannot parse time';
41
42 $db->contests->create({id => $id, name => $name, owner => $owner, start => $start, stop => $stop});
43 }
44
45 sub cmd_rm{
46 my ($id) = @_;
47 $db->contest(shift)->delete;
48 }
49
50 sub cmd_get{
51 my ($id, $col) = @_;
52 say $db->contest($id)->get_column($col)
53 }
54
55 sub cmd_set{
56 my ($id, %values) = @_;
57 $db->contest($id)->update(\%values);
58 }
59
60 ##################################################
61
62 no strict 'refs';
63 my $cmd = 'cmd_' . shift;
64 cmd_help unless exists $main::{$cmd};
65 $cmd->(@ARGV) if exists $main::{$cmd};
66
67 1;
68 __END__
69
70 =encoding utf-8
71
72 =head1 NAME
73
74 gruntmaster-contest - shell interface to Gruntmaster 6000 contests
75
76 =head1 SYNOPSIS
77
78 gruntmaster-contest list
79 gruntmaster-contest show id
80 gruntmaster-contest add id
81 gruntmaster-contest rm id
82 gruntmaster-contest get id key
83 gruntmaster-contest set id key value
84
85 =head1 DESCRIPTION
86
87 gruntmaster-contest is a tool for managing contests.
88
89 =over
90
91 =item B<list>
92
93 Prints the list of contests.
94
95 =item B<show> I<id>
96
97 Prints detailed information about the contest with id I<id>.
98
99 =item B<add> I<id>
100
101 Adds a new contest with id I<id>.
102
103 =item B<rm> I<id>
104
105 Removes the contest with id I<id>.
106
107 =item B<set> I<id> I<key> I<value>
108
109 Sets the I<key> configuration option of contest I<id> to I<value>.
110
111 =item B<get> I<id> I<key>
112
113 Get the value of the I<key> configuration option of contest I<id>.
114
115 =back
116
117 =head1 AUTHOR
118
119 Marius Gavrilescu E<lt>marius@ieval.roE<gt>
120
121 =head1 COPYRIGHT AND LICENSE
122
123 Copyright (C) 2014 by Marius Gavrilescu
124
125 This library is free software; you can redistribute it and/or modify
126 it under the same terms as Perl itself, either Perl version 5.18.1 or,
127 at your option, any later version of Perl 5 you may have available.
128
129
130 =cut
This page took 0.027011 seconds and 4 git commands to generate.