=================================================================== RCS file: /cvs/todotxt/Text-Todo-REST-API/lib/Text/Todo/REST/API/Actions/GET.pm,v retrieving revision 1.1 retrieving revision 1.3 diff -u -r1.1 -r1.3 --- todotxt/Text-Todo-REST-API/lib/Text/Todo/REST/API/Actions/GET.pm 2010/01/26 04:30:13 1.1 +++ todotxt/Text-Todo-REST-API/lib/Text/Todo/REST/API/Actions/GET.pm 2010/02/13 21:48:28 1.3 @@ -1,6 +1,6 @@ package Text::Todo::REST::API::Actions::GET; -# $AFresh1: Representations.pm,v 1.2 2010/01/23 07:04:43 andrew Exp $ +# $AFresh1: GET.pm,v 1.2 2010/01/31 03:10:39 andrew Exp $ use warnings; use strict; @@ -31,27 +31,13 @@ } sub get_entry { - my ( $self, $todo, $key ) = @_; + my ( $self, $todo, $options) = @_; + my $entry = $self->_which_key($options, 'entry'); - if ( !$key ) { - return $self->fail("get_entry requires arguments"); - } - elsif ( ref $key eq 'ARRAY' ) { - return self->get_entry( $_->[0] ); - } - elsif ( ref $key eq 'HASH' ) { - if ( exists $key->{entry} ) { - $key = $key->{entry}; - } - else { - return $self->fail('get_entry requires key [entry]'); - } - } - my $list = $self->get_list($todo); - if ( $key =~ /^[[:xdigit:]]{32}$/xms ) { - my $search = lc $key; + if ( $entry =~ /^[[:xdigit:]]{32}$/xms ) { + my $search = lc $entry; foreach my $e ( @{$list} ) { if ( $search eq $e->{md5} ) { @@ -59,11 +45,11 @@ } } } - elsif ( $key =~ /^\d+$/xms ) { - return $list->[ $key - 1 ]; + elsif ( $entry =~ /^\d+$/xms ) { + return $list->[ $entry - 1 ]; } - return $self->fail("Unable to find entry!"); + return $self->_fail("Unable to find entry [$entry]!"); } sub get_list { @@ -84,7 +70,7 @@ my $dir = $todo->file('todo_dir'); if ( !$dir ) { - return $self->fail('Unable to find todo_dir'); + return $self->_fail('Unable to find todo_dir'); } my $file_regex = $options->{file_regex}; @@ -97,8 +83,30 @@ } sub get_tags { - my ( $self, $todo, $tag ) = @_; + my ( $self, $todo, $options) = @_; + my $tag = $self->_which_key($options, 'tags'); return [ $todo->listtag($tag) ]; + } + + sub _which_key { + my ($self, $key, $type) = @_; + + if ( !defined $key ) { + return $self->_fail(caller() . ' requires arguments'); + } + elsif ( ref $key eq 'ARRAY' ) { + $key = $key->[0]; + } + elsif ( ref $key eq 'HASH' ) { + if ( exists $key->{$type} ) { + $key = $key->{$type}; + } + else { + return $self->_fail(caller() . ' requires key [' . $type . ']'); + } + } + + return $key; } sub _fail {