]>
iEval git - gruntmaster-data.git/blob - lib/Gruntmaster/App/Command/Add.pm
04cc8d4d0a35c5f5307312805f493f559339cf7c
1 package Gruntmaster
::App
::Command
::Add
;
6 our $VERSION = '6000.001';
8 use Gruntmaster
::App
'-command';
11 use Date
::Parse qw
/str2time/;
12 use File
::Slurp qw
/read_file write_file/;
13 use IO
::Prompter
[ -style
=> 'bold', '-stdio', '-verbatim' ];
14 use JSON
::MaybeXS qw
/encode_json/;
16 use Term
::ANSIColor qw
/RED RESET/;
18 use constant LEVEL_VALUES
=> {
25 sub usage_desc
{ '%c [-cp] add id' }
28 contests
=> \
&add_contest
,
29 problems
=> \
&add_problem
,
33 my ($self, $opt, $args) = @_;
35 $self->usage_error('No table selected') unless $self->app->table;
36 $self->usage_error('Don\'t know how to add to this table') unless $TABLE{$self->app->table};
37 $self->usage_error('Wrong number of arguments') if @args != 1;
41 my ($self, $opt, $args) = @_;
43 $TABLE{$self->app->table}->($self, $id);
49 my $name = prompt
'Contest name';
50 my $owner = prompt
'Owner';
51 my $start = str2time prompt
'Start time' or die "Cannot parse time\n";
52 my $stop = str2time prompt
'Stop time' or die "Cannot parse time\n";
54 db
->insert(contests
=> {id
=> $id, name
=> $name, owner
=> $owner, start
=> $start, stop
=> $stop});
60 my $db = $self->app->db;
62 my $name = prompt
'Problem name';
63 my $private = prompt
('Private?', '-yn') eq 'y';
64 my $contest = prompt
'Contest';
65 my $author = prompt
'Problem author (full name)';
66 my $writer = prompt
'Problem statement writer (full name)';
67 my $owner = prompt
'Problem owner (username)';
68 my $level = prompt
'Problem level', -menu
=> "beginner\neasy\nmedium\nhard";
69 my $value = LEVEL_VALUES
->{$level};
70 my $statement = read_file prompt
'File with problem statement', -complete
=> 'filenames';
71 my $generator = prompt
'Generator', -menu
=> "File\nRun\nUndef";
72 my $runner = prompt
'Runner', -menu
=> "File\nVerifier\nInteractive";
73 my $judge = prompt
'Judge', -menu
=> "Absolute\nPoints";
74 my $testcnt = prompt
'Test count', '-i';
76 my $timeout = prompt
'Time limit (seconds)', '-n';
77 my $olimit = prompt
'Output limit (bytes)', '-i';
78 say 'Memory limits are broken, so I won\'t ask you for one';
80 my (@tests, $gensource, $genformat, $versource, $verformat);
82 if ($generator eq 'Run') {
83 $gensource = read_file prompt
'[Generator::Run] Generator file name', -complete
=> 'filenames';
84 $genformat = prompt
'[Generator::Run] Generator format', -menu
=> [qw
/C CPP MONO JAVA PASCAL PERL PYTHON/];
87 if ($runner eq 'File') {
88 my $default = $judge eq 'Points' ?
10 : 'Ok';
89 $tests[$_ - 1] = prompt
"[Runner::File] Score for test ${_} [$default]", -default => $default for 1 .. $testcnt;
92 if ($runner eq 'Verifier' || $runner eq 'Interactive') {
93 say RED
, 'WARNING: Runner::Interactive is experimental', RESET
if $runner eq 'Interactive';
94 $versource = read_file prompt
"[Runner::$runner] Verifier file name", -complete
=> 'filenames';
95 $verformat = prompt
"[Runner::$runner] Verifier format", -menu
=> [qw
/C CPP MONO JAVA PASCAL PERL PYTHON/];
103 statement
=> $statement,
107 generator
=> $generator,
111 maybe private
=> $private,
112 maybe timeout
=> $timeout,
113 maybe olimit
=> $olimit,
114 maybe gensource
=> $gensource,
115 maybe genformat
=> $genformat,
116 maybe versource
=> $versource,
117 maybe verformat
=> $verformat,
119 $options{tests
} = encode_json \
@tests if @tests;
120 db
->insert(problems
=> \
%options);
121 db
->insert(contest_problems
=> {problem
=> $id, contest
=> $contest}) if $contest;
132 Gruntmaster::App::Command::Add - add a problem or contest by answering a series of prompts
137 gm -c add test_contest
141 The add command creates a new problem or contest by prompting the user
142 for the properties of the new object. It takes a single argument, the
143 ID of the new object.
151 Marius Gavrilescu, E<lt>marius@ieval.roE<gt>
153 =head1 COPYRIGHT AND LICENSE
155 Copyright (C) 2014-2016 by Marius Gavrilescu
157 This library is free software; you can redistribute it and/or modify
158 it under the same terms as Perl itself, either Perl version 5.20.1 or,
159 at your option, any later version of Perl 5 you may have available.
This page took 0.065593 seconds and 4 git commands to generate.