X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=gruntmaster-problem;h=7e979cdc05164e6c8c4788efb6d19756e7ada04b;hb=ca77adce9ec73cdbb45cf3fe35fc04191b0f2b3d;hp=b942897ac41d12388c93b4427474dd0c34a94db0;hpb=30e287c3bec805e7d17eadc3cadf140f1da35a9c;p=gruntmaster-data.git diff --git a/gruntmaster-problem b/gruntmaster-problem index b942897..7e979cd 100755 --- a/gruntmaster-problem +++ b/gruntmaster-problem @@ -3,12 +3,21 @@ use v5.14; use Gruntmaster::Data; +use File::Temp qw/tempfile/; + use IO::Prompter [ -style => 'bold', '-stdio', '-verbatim' ]; -use File::Slurp qw/read_file/; +use File::Slurp qw/read_file write_file/; use JSON qw/encode_json/; use Term::ANSIColor qw/RED RESET/; use Getopt::Long qw/:config require_order/; +use constant LEVEL_VALUES => { + beginner => 100, + easy => 250, + medium => 500, + hard => 1000, +}; + ################################################## my $dsn = $ENV{GRUNTMASTER_DSN} // 'dbi:Pg:'; @@ -24,8 +33,10 @@ sub cmd_add{ my $private = prompt('Private?', '-yn') eq 'y'; my $contest = prompt 'Contest'; my $author = prompt 'Problem author (full name)'; + my $writer = prompt 'Problem statement writer (full name)'; my $owner = prompt 'Problem owner (username)'; my $level = prompt 'Problem level', -menu => "beginner\neasy\nmedium\nhard"; + my $value = LEVEL_VALUES->{$level}; my $statement = read_file prompt 'File with problem statement', -complete => 'filenames'; my $generator = prompt 'Generator', -menu => "File\nRun\nUndef"; my $runner = prompt 'Runner', -menu => "File\nVerifier\nInteractive"; @@ -58,8 +69,10 @@ sub cmd_add{ id => $id, name => $name, level => $level, + value => $value, statement => $statement, author => $author, + writer => $writer, owner => $owner, generator => $generator, runner => $runner, @@ -82,9 +95,9 @@ sub cmd_add{ sub cmd_set{ my $file; GetOptions ( 'file!' => \$file ); - my ($id, %values) = @_; + my ($id, %values) = @ARGV; %values = map { $_ => scalar read_file $values{$_} } keys %values if $file; - $db->problem($id)->update(\%values) + $db->problem($id)->update(\%values); } sub cmd_get{ @@ -92,13 +105,24 @@ sub cmd_get{ say $db->problem($id)->get_column($col) } +sub cmd_edit{ + my ($id, $col) = @_; + my ($fh, $file) = tempfile 'gruntmaster-problem-editXXXX', TMPDIR => 1, UNLINK => 1; + write_file $fh, $db->problem($id)->get_column($col); + close $fh; + my $editor = $ENV{EDITOR} // 'editor'; + system $editor, $file; + $db->problem($id)->update({$col => read_file $file}); +} + sub cmd_list{ local $, = "\n"; say map {$_->id} $db->problems->all } sub cmd_rm{ - $db->problem(shift)->delete + my ($id) = @_; + $db->problem($id)->delete; } sub cmd_show{ @@ -143,6 +167,7 @@ gruntmaster-problem - shell interface to Gruntmaster 6000 problems gruntmaster-problem show problem_id gruntmaster-problem set [--file] problem_id key value gruntmaster-problem get problem_id key + gruntmaster-problem edit problem_id key =head1 DESCRIPTION @@ -174,6 +199,10 @@ Sets the I configuration option of problem I to I. Get the value of the I configuration option of problem I +=item B I I + +Opens an editor with the value of the I configuration option. After the editor exits, the option is updated to the value of the file. + =item B --file I I I Sets the I configuration option of problem I to the contents of the file I.