version 1.13, 2010/01/26 04:30:13 |
version 1.19, 2010/02/16 06:12:26 |
|
|
package Text::Todo::REST::API; |
package Text::Todo::REST::API; |
|
|
# $AFresh1: API.pm,v 1.12 2010/01/26 03:51:49 andrew Exp $ |
# $AFresh1: API.pm,v 1.18 2010/02/13 21:48:28 andrew Exp $ |
|
|
use warnings; |
use warnings; |
use strict; |
use strict; |
|
|
} |
} |
|
|
sub _parse_options { |
sub _parse_options { |
my ( $self, $method, @args ) = @_; |
my ( $self, $method, @options) = @_; |
|
|
my %options = ( |
my %options = ( |
method => lc $method, |
method => lc $method, |
list => '', |
list => '', |
action => 'files', |
action => 'files', |
args => [], |
args => {}, |
|
|
suffix => $self->_suffix, |
suffix => $self->_suffix, |
file_regex => $self->_file_regex, |
file_regex => $self->_file_regex, |
format => $self->_format, |
format => $self->_format, |
); |
); |
|
|
if (@args) { |
if (@options) { |
if ( !ref $args[0] ) { |
if ( !ref $options[0] ) { |
$options{path} = shift @args; |
$options{path} = shift @options; |
} |
} |
|
|
if ( ref $args[0] eq 'HASH' ) { |
if ( ref $options[0] eq 'HASH' ) { |
my $opts = shift @args; |
my $opts = shift @options; |
foreach my $o ( keys %{$opts} ) { |
foreach my $o ( keys %{$opts} ) { |
$options{$o} = $opts->{$o}; |
$options{$o} = $opts->{$o}; |
} |
} |
|
|
} |
} |
} |
} |
|
|
if ( $options{action} eq 'entry' && @{ $options{args} } ) { |
if ( $options{action} eq 'entry' && @{ $options{extra} } ) { |
$options{entry} = shift @{ $options{args} }; |
$options{action} .= q{_} . lc shift @{ $options{extra} }; |
if ( @{ $options{args} } ) { |
|
$options{action} .= q{_} . lc shift @{ $options{args} }; |
|
} |
|
} |
} |
|
|
|
push @{ $options{extra} }, @options; |
|
|
push @{ $options{args} }, @args; |
my $list = $self->_todo->file( $options{list} ); |
|
|
$options{list} |
my $suffix = $self->_suffix || q{}; |
= defined $options{list} ? $options{list} : 'todo_file'; |
if ( $list !~ / \Q$suffix\E $/ixms ) { |
|
$list .= $suffix; |
|
} |
|
|
|
$options{list} = $list; |
|
|
if ( $options{format} ) { |
if ( $options{format} ) { |
$format_of{ ident $self } = $options{format}; |
$format_of{ ident $self } = $options{format}; |
delete $options{format}; |
delete $options{format}; |
|
|
my ( $self, $path ) = @_; |
my ( $self, $path ) = @_; |
|
|
my %options = ( |
my %options = ( |
list => undef, |
|
action => undef, |
action => undef, |
args => [], |
list => undef, |
|
entry => undef, |
|
extra => [], |
); |
); |
|
|
$path = defined $path ? $path : q{}; |
$path = defined $path ? $path : q{}; |
|
|
$options{format} = $1; |
$options{format} = $1; |
} |
} |
|
|
( $options{list}, $options{action}, @{ $options{args} } ) = split '/', |
( $options{list}, $options{action}, |
$path; |
@{ $options{extra} } ) = split '/', $path; |
|
|
if ( $options{list} ) { |
if (!defined $options{action}) { |
$options{action} ||= 'list'; |
if ( $options{list} ) { |
|
$options{action} = 'list'; |
my $suffix = $self->_suffix; |
|
|
|
if ( ( lc $options{list} ) eq 'files' ) { |
|
$options{action} = lc $options{list}; |
|
$options{list} = q{}; |
|
} |
} |
elsif ( $self->_todo->file( $options{list} ) ) { |
else { |
$options{list} = $self->_todo->file( $options{list} ); |
$options{action} = 'files'; |
} |
} |
} |
} |
|
|
if ( @{ $options{args} } && ( lc $options{args}[0] ) eq 'entry' ) { |
$options{action} = lc( $options{action} ); |
$options{action} = lc shift @{ $options{args} }; |
|
|
if ($options{action} eq 'entry' |
|
|| $options{action} eq 'tags' |
|
) { |
|
$options{ $options{action} } = shift @{ $options{extra} }; |
} |
} |
|
|
return %options; |
return %options; |