diff options
author | Yorhel <git@yorhel.nl> | 2009-11-13 16:36:04 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2009-11-13 16:36:04 +0100 |
commit | 8578b87b8367a2f297a369cb3143627a4b37a4b0 (patch) | |
tree | 2c7e7e5968aaef16e577c903bcf63927c62a9523 /lib/POE | |
parent | 997d1752ff1b1d2b1cf425b2c05dc180abc2243a (diff) |
API: Added sorting and pagination
Diffstat (limited to 'lib/POE')
-rw-r--r-- | lib/POE/Filter/VNDBAPI.pm | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/lib/POE/Filter/VNDBAPI.pm b/lib/POE/Filter/VNDBAPI.pm index 0eca3eb2..24188a2f 100644 --- a/lib/POE/Filter/VNDBAPI.pm +++ b/lib/POE/Filter/VNDBAPI.pm @@ -6,10 +6,11 @@ # C: login <json-object> # [ 'login', {object} ] # -# C: get <type> <info> <filters> -# [ 'get', <type>, <info>[ split ',', $2 ], [ filters ] ] +# C: get <type> <info> <filters> <options> +# [ 'get', <type>, <info>[ split ',', $2 ], [ filters ], { options } ] # <type> must match /[a-z\/_]+/ # <info> as string: /[a-z_]+(,[a-z_]+)*/, in perl: [ /[a-z_]+/, .. ] +# <options> is optional, must be JSON-object otherwise # # S: ok # [ 'ok' ] @@ -129,7 +130,7 @@ sub get_one { if(!defined $json) { my $err = $@; $err =~ s/,? at .+ line [0-9]+[\.\r\n ]*$//; - return _err "JSON-decode: $err" if !defined $json; + return _err "JSON-decode: $err"; } return _err qq|"$cmd" command requires a JSON object| if ref($json) ne 'HASH'; return [[ $cmd, $json ]]; @@ -137,11 +138,19 @@ sub get_one { # C: get if($self->{type} eq 'server' && $str =~ /^$WS*get$WS+($GET_TYPE)$WS+($GET_INFO)$WS+(.+)$/s) { - my($type, $info) = ($1, $2); + my($type, $info, $options) = ($1, $2, {}); my($filters, $rest) = decode_filters($3); return _err $filters if !ref $filters; - return _err 'Leading characters' if length $rest && $rest !~ /^$WS+$/; - return [[ 'get', $type, [ split /,/, $info ], $filters ]]; + if($rest !~ /^$WS*$/) { + $options = eval { JSON::XS->new->decode($rest) }; + if(!defined $options) { + my $err = $@; + $err =~ s/,? at .+ line [0-9]+[\.\r\n ]*$//; + return _err "JSON-decode: $err"; + } + return _err 'options argument must be a JSON object' if ref($options) ne 'HASH'; + } + return [[ 'get', $type, [ split /,/, $info ], $filters, $options ]]; } # S: ok |