version 1.9, 2010/04/30 18:30:57 |
version 1.11, 2010/05/01 21:26:17 |
|
|
|
|
package Dudelicious; |
package Dudelicious; |
|
|
|
use 5.010; |
use Data::Dumper; |
use Data::Dumper; |
use version; our $VERSION = qv('0.1.0'); |
use version; our $VERSION = qv('0.1.0'); |
|
|
|
|
default => { todo_dir => $ENV{DUDELICIOUS_HOME} || '.', }, |
default => { todo_dir => $ENV{DUDELICIOUS_HOME} || '.', }, |
}; |
}; |
|
|
|
app->renderer->add_helper( |
|
todo => sub { |
|
state $todo = Text::Todo->new( shift->stash('config') ); |
|
return $todo; |
|
} |
|
); |
|
|
|
app->renderer->add_helper( |
|
get_list => sub { |
|
my ( $self, $file ) = @_; |
|
|
|
$self->helper('todo')->load($file) if $file; |
|
|
|
my $line = 1; |
|
return [ |
|
map { |
|
line => $line++, |
|
md5 => md5_hex( $_->text ), |
|
text => $_->text, |
|
done => $_->done, |
|
}, |
|
$self->helper('todo')->list |
|
]; |
|
} |
|
); |
|
|
get '/' => sub { |
get '/' => sub { |
my $self = shift; |
my $self = shift; |
|
|
my $dir = _todo($self)->file('todo_dir'); |
my $dir = $self->helper('todo')->file('todo_dir'); |
opendir my $dh, $dir or croak "Unable to opendir $dir: $!"; |
opendir my $dh, $dir or croak "Unable to opendir $dir: $!"; |
my @files = grep {/\.te?xt$/ixms} readdir $dh; |
my @files = grep {/\.te?xt$/ixms} readdir $dh; |
closedir $dh; |
closedir $dh; |
|
|
my $self = shift; |
my $self = shift; |
my $file = $self->stash('file') . '.txt'; |
my $file = $self->stash('file') . '.txt'; |
my $format = $self->stash('format') || 'html'; |
my $format = $self->stash('format') || 'html'; |
my $list = _get_list( $self, $file ); |
my $list = $self->helper( 'get_list' => $file ); |
|
|
if ( $format eq 'json' ) { |
if ( $format eq 'json' ) { |
$self->render_json($list); |
$self->render_json($list); |
|
|
my $self = shift; |
my $self = shift; |
my $file = $self->stash('file') . '.txt'; |
my $file = $self->stash('file') . '.txt'; |
my $format = $self->stash('format') || 'html'; |
my $format = $self->stash('format') || 'html'; |
my $entry = _get_list( $self, $file )->[ $self->stash('line') - 1 ]; |
my $entry |
|
= $self->helper( 'get_list' => $file )->[ $self->stash('line') - 1 ]; |
|
|
if ( $format eq 'json' ) { |
if ( $format eq 'json' ) { |
$self->render_json($entry); |
$self->render_json($entry); |
|
|
} |
} |
} => 'entry'; |
} => 'entry'; |
|
|
app->start unless caller(); |
app->start if !caller(); |
|
|
sub _todo { |
|
my ($c) = @_; |
|
|
|
if ( !$c->stash('todo') ) { |
|
my $todo = Text::Todo->new( $c->stash('config') ); |
|
$c->stash( 'todo' => $todo ); |
|
} |
|
|
|
return $c->stash('todo'); |
|
} |
|
|
|
sub _get_list { |
|
my ( $c, $file ) = @_; |
|
|
|
my $line = 1; |
|
return [ |
|
map ( { line => $line++, |
|
md5 => md5_hex( $_->text ), |
|
text => $_->text, |
|
done => $_->done, |
|
}, |
|
_todo($c)->listfile($file), |
|
) |
|
]; |
|
} |
|
|
|
__DATA__ |
__DATA__ |
|
|