Annotation of todotxt/Text-Todo-REST-API/lib/Text/Todo/REST/API/Actions/GET.pm, Revision 1.1
1.1 ! andrew 1: package Text::Todo::REST::API::Actions::GET;
! 2:
! 3: # $AFresh1: Representations.pm,v 1.2 2010/01/23 07:04:43 andrew Exp $
! 4:
! 5: use warnings;
! 6: use strict;
! 7: use Carp;
! 8:
! 9: use Class::Std::Utils;
! 10: use Digest::MD5 qw/ md5_hex /;
! 11:
! 12: use version; our $VERSION = qv('0.0.1');
! 13:
! 14: {
! 15: my @attr_refs = \();
! 16:
! 17: sub new {
! 18: my ( $class, $options ) = @_;
! 19:
! 20: my $self = bless anon_scalar(), $class;
! 21: my $ident = ident($self);
! 22:
! 23: return $self;
! 24: }
! 25:
! 26: sub get_entry_done {
! 27: my ( $self, $todo, $key ) = @_;
! 28: my $entry = $self->get_entry( $todo, $key );
! 29:
! 30: return $todo->list->[ $entry->{line} - 1 ]->done;
! 31: }
! 32:
! 33: sub get_entry {
! 34: my ( $self, $todo, $key ) = @_;
! 35:
! 36: if ( !$key ) {
! 37: return $self->fail("get_entry requires arguments");
! 38: }
! 39: elsif ( ref $key eq 'ARRAY' ) {
! 40: return self->get_entry( $_->[0] );
! 41: }
! 42: elsif ( ref $key eq 'HASH' ) {
! 43: if ( exists $key->{entry} ) {
! 44: $key = $key->{entry};
! 45: }
! 46: else {
! 47: return $self->fail('get_entry requires key [entry]');
! 48: }
! 49: }
! 50:
! 51: my $list = $self->get_list($todo);
! 52:
! 53: if ( $key =~ /^[[:xdigit:]]{32}$/xms ) {
! 54: my $search = lc $key;
! 55:
! 56: foreach my $e ( @{$list} ) {
! 57: if ( $search eq $e->{md5} ) {
! 58: return $e;
! 59: }
! 60: }
! 61: }
! 62: elsif ( $key =~ /^\d+$/xms ) {
! 63: return $list->[ $key - 1 ];
! 64: }
! 65:
! 66: return $self->fail("Unable to find entry!");
! 67: }
! 68:
! 69: sub get_list {
! 70: my ( $self, $todo ) = @_;
! 71:
! 72: my $line = 1;
! 73: my @list = map ( {
! 74: line => $line++,
! 75: md5 => md5_hex( $_->text ),
! 76: text => $_->text,
! 77: },
! 78: $todo->list );
! 79: return \@list;
! 80: }
! 81:
! 82: sub get_files {
! 83: my ( $self, $todo, $options ) = @_;
! 84: my $dir = $todo->file('todo_dir');
! 85:
! 86: if ( !$dir ) {
! 87: return $self->fail('Unable to find todo_dir');
! 88: }
! 89:
! 90: my $file_regex = $options->{file_regex};
! 91:
! 92: opendir my $dh, $dir or croak "Couldn't opendir: $!";
! 93: my @files = grep {m/$file_regex/xms} readdir $dh;
! 94: closedir $dh;
! 95:
! 96: return \@files;
! 97: }
! 98:
! 99: sub get_tags {
! 100: my ( $self, $todo, $tag ) = @_;
! 101: return [ $todo->listtag($tag) ];
! 102: }
! 103:
! 104: sub _fail {
! 105: my ( $self, @message ) = @_;
! 106: croak(@message);
! 107: }
! 108:
! 109: sub DESTROY {
! 110: my ($self) = @_;
! 111: my $ident = ident $self;
! 112: foreach my $attr_ref (@attr_refs) {
! 113: delete $attr_ref->{$ident};
! 114: }
! 115: }
! 116: }
! 117: 1; # Magic true value required at end of module
! 118: __END__
! 119:
! 120: =head1 NAME
! 121:
! 122: Text::Todo::REST::API - [One line description of module's purpose here]
! 123:
! 124:
! 125: =head1 VERSION
! 126:
! 127: This document describes Text::Todo::REST::API version 0.0.1
! 128:
! 129:
! 130: =head1 SYNOPSIS
! 131:
! 132: use Text::Todo::REST::API;
! 133:
! 134: =for author to fill in:
! 135: Brief code example(s) here showing commonest usage(s).
! 136: This section will be as far as many users bother reading
! 137: so make it as educational and exeplary as possible.
! 138:
! 139:
! 140: =head1 DESCRIPTION
! 141:
! 142: =for author to fill in:
! 143: Write a full description of the module and its features here.
! 144: Use subsections (=head2, =head3) as appropriate.
! 145:
! 146:
! 147: =head1 INTERFACE
! 148:
! 149: =for author to fill in:
! 150: Write a separate section listing the public components of the modules
! 151: interface. These normally consist of either subroutines that may be
! 152: exported, or methods that may be called on objects belonging to the
! 153: classes provided by the module.
! 154:
! 155:
! 156: =head1 DIAGNOSTICS
! 157:
! 158: =for author to fill in:
! 159: List every single error and warning message that the module can
! 160: generate (even the ones that will "never happen"), with a full
! 161: explanation of each problem, one or more likely causes, and any
! 162: suggested remedies.
! 163:
! 164: =over
! 165:
! 166: =item C<< Error message here, perhaps with %s placeholders >>
! 167:
! 168: [Description of error here]
! 169:
! 170: =item C<< Another error message here >>
! 171:
! 172: [Description of error here]
! 173:
! 174: [Et cetera, et cetera]
! 175:
! 176: =back
! 177:
! 178:
! 179: =head1 CONFIGURATION AND ENVIRONMENT
! 180:
! 181: =for author to fill in:
! 182: A full explanation of any configuration system(s) used by the
! 183: module, including the names and locations of any configuration
! 184: files, and the meaning of any environment variables or properties
! 185: that can be set. These descriptions must also include details of any
! 186: configuration language used.
! 187:
! 188: Text::Todo::REST::API requires no configuration files or environment variables.
! 189:
! 190:
! 191: =head1 DEPENDENCIES
! 192:
! 193: =for author to fill in:
! 194: A list of all the other modules that this module relies upon,
! 195: including any restrictions on versions, and an indication whether
! 196: the module is part of the standard Perl distribution, part of the
! 197: module's distribution, or must be installed separately. ]
! 198:
! 199: None.
! 200:
! 201:
! 202: =head1 INCOMPATIBILITIES
! 203:
! 204: =for author to fill in:
! 205: A list of any modules that this module cannot be used in conjunction
! 206: with. This may be due to name conflicts in the interface, or
! 207: competition for system or program resources, or due to internal
! 208: limitations of Perl (for example, many modules that use source code
! 209: filters are mutually incompatible).
! 210:
! 211: None reported.
! 212:
! 213:
! 214: =head1 BUGS AND LIMITATIONS
! 215:
! 216: =for author to fill in:
! 217: A list of known problems with the module, together with some
! 218: indication Whether they are likely to be fixed in an upcoming
! 219: release. Also a list of restrictions on the features the module
! 220: does provide: data types that cannot be handled, performance issues
! 221: and the circumstances in which they may arise, practical
! 222: limitations on the size of data sets, special cases that are not
! 223: (yet) handled, etc.
! 224:
! 225: No bugs have been reported.
! 226:
! 227: Please report any bugs or feature requests to
! 228: C<bug-text-todo-rest-api@rt.cpan.org>, or through the web interface at
! 229: L<http://rt.cpan.org>.
! 230:
! 231:
! 232: =head1 AUTHOR
! 233:
! 234: Andrew Fresh C<< <andrew@cpan.org> >>
! 235:
! 236:
! 237: =head1 LICENSE AND COPYRIGHT
! 238:
! 239: Copyright (c) 2010, Andrew Fresh C<< <andrew@cpan.org> >>. All rights reserved.
! 240:
! 241: This module is free software; you can redistribute it and/or
! 242: modify it under the same terms as Perl itself. See L<perlartistic>.
! 243:
! 244:
! 245: =head1 DISCLAIMER OF WARRANTY
! 246:
! 247: BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
! 248: FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
! 249: OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
! 250: PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
! 251: EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
! 252: WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
! 253: ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
! 254: YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
! 255: NECESSARY SERVICING, REPAIR, OR CORRECTION.
! 256:
! 257: IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
! 258: WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
! 259: REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE
! 260: LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL,
! 261: OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
! 262: THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
! 263: RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
! 264: FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
! 265: SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
! 266: SUCH DAMAGES.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>