]>
iEval git - gruntmaster-page.git/blob - lib/Gruntmaster/Data.pm
1 package Gruntmaster
::Data
;
4 use parent qw
/Exporter/;
6 use JSON qw
/encode_json decode_json/;
11 my $redis = Redis
->new;
19 for my $cmd (qw
/multi exec smembers get hget hset sadd incr hmset/) {
20 dynsub
uc $cmd, sub { say $cmd;exit;$redis->$cmd(@_) };
24 sub cp
{ defined $contest ?
"contest.$contest." : '' }
26 sub multi
() { MULTI
}
29 sub problems
() { SMEMBERS cp
. 'problem' }
30 sub contests
() { SMEMBERS cp
. 'contest' }
31 sub jobcard
() { GET cp
. 'job' }
33 sub job_results
(_
) { decode_json HGET cp
. "job.$_[0]", 'results' }
34 sub set_job_results
($+) { HSET cp
. "job.$_[0]", 'results', encode_json
$_[1] }
35 sub problem_meta
(_
) { decode_json HGET cp
. "pb.$_[0]", 'meta' }
36 sub set_problem_meta
($+) { HSET cp
. "pb.$_[0]", 'meta', encode_json
$_[1] }
39 my ($name, @keys) = @_;
41 dynsub
"${name}_$key", sub (_
) { HGET cp
. "$name.$_[0]", $key };
42 dynsub
"set_${name}_$key", sub ($$) { HSET cp
. "$name.$_[0]", $key, $_[1] };
45 dynsub
"insert_$name", sub {
46 my ($key, %values) = @_;
47 SADD cp
. $name, $key or return;
48 HMSET cp
. "$name.$key", %values;
50 dynsub
"push_$name", sub {
51 my $nr = INCR cp
. $name;
52 HMSET cp
. "$name.$nr", @_;
56 defhash problem
=> qw
/name level statement/;
57 defhash contest
=> qw
/start end name owner/;
58 defhash job
=> qw
/date file name private problem result result_text user/;
62 grep { $_ =~ /^[a-z]/ and exists &$_ } keys %{__PACKAGE__
. '::'};
This page took 0.043399 seconds and 4 git commands to generate.