]>
iEval git - plack-app-gruntmaster.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 srem incr hmset hsetnx/) {
20 dynsub
uc $cmd, sub { say "Arguments to \U$cmd: ", join ', ', @_; $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 job_inmeta
(_
) { decode_json HGET cp
. "job.$_[0]", 'inmeta' }
36 sub set_job_inmeta
($+) { HSET cp
. "job.$_[0]", 'inmeta', encode_json
$_[1] }
37 sub problem_meta
(_
) { decode_json HGET cp
. "problem.$_[0]", 'meta' }
38 sub set_problem_meta
($+) { HSET cp
. "problem.$_[0]", 'meta', encode_json
$_[1] }
39 sub job_daemon
(_
) { HGET cp
. "job.$_[0]", 'daemon' }
40 sub set_job_daemon
($$) { HSETNX cp
. "job.$_[0]", 'daemon', $_[1] };
43 my ($name, @keys) = @_;
45 dynsub
"${name}_$key", sub (_
) { HGET cp
. "$name.$_[0]", $key };
46 dynsub
"set_${name}_$key", sub ($$) { HSET cp
. "$name.$_[0]", $key, $_[1] };
49 dynsub
"insert_$name", sub {
50 my ($key, %values) = @_;
51 SADD cp
. $name, $key or return;
52 HMSET cp
. "$name.$key", %values;
54 dynsub
"remove_$name", sub (_
) {
56 SREM cp
. $name, $key;
59 dynsub
"push_$name", sub {
60 my $nr = INCR cp
. $name;
61 HMSET cp
. "$name.$nr", @_;
66 defhash problem
=> qw
/name level statement/;
67 defhash contest
=> qw
/start end name owner/;
68 defhash job
=> qw
/date extension filesize private problem result result_text user/;
72 grep { $_ =~ /^[a-zA-Z]/ and exists &$_ } keys %{__PACKAGE__
. '::'};
This page took 0.052844 seconds and 4 git commands to generate.