File Coverage

blib/lib/Goo/Thing/task/TaskLister.pm
Criterion Covered Total %
statement 4 6 66.6
branch n/a
condition n/a
subroutine 2 2 100.0
pod n/a
total 6 8 75.0


line stmt bran cond sub pod time code
1             # -*- Mode: cperl; mode: folding; -*-
2              
3             package TaskLister;
4              
5             ###############################################################################
6             # Nigel Hamilton
7             #
8             # Copyright Nigel Hamilton 2005
9             # All Rights Reserved
10             #
11             # Author: Nigel Hamilton
12             # Filename: TaskLister.pm
13             # Description: Show a list of Tasks
14             #
15             # Date Change
16             # -----------------------------------------------------------------------------
17             #
18             ###############################################################################
19              
20 1     1   3238 use strict;
  1         2  
  1         37  
21              
22 1     1   359 use Object;
  0            
  0            
23             use Profile;
24             use Goo::Loader;
25             use Goo::Prompter;
26             use Goo::Database;
27             use Text::FormatTable;
28              
29             use base qw(Object);
30              
31             # the size of the mental buffer
32             our $BUFFER_SIZE = 7;
33              
34              
35             ###############################################################################
36             #
37             # get_tasks_table - return a table of things i care about
38             #
39             ###############################################################################
40              
41             sub get_tasks_table {
42              
43             my ($this, $profile) = @_;
44              
45             my $query = Goo::Database::execute_sql(<<EOSQL);
46            
47             select taskid, title, description, importance,
48             date_format(requestedon, '%d %b %Y') as 'requestedon'
49             from task
50             where status = 'pending'
51             order by importance desc, requestedon desc
52             limit $BUFFER_SIZE
53              
54             EOSQL
55              
56             my $full_text = "";
57              
58             # set up the table
59             my $table = Text::FormatTable->new('4l 60l 6l 11l 18l');
60              
61             # column headings
62             $table->head('[#]', 'Title', 'TaskID', 'Importance', 'Requested On');
63             $table->rule('-');
64              
65             while (my $row = Goo::Database::get_result_hash($query)) {
66              
67             my $index_key = $profile->get_next_index_key();
68              
69             $profile->add_option($index_key, "$row->{taskid}.task", "ThingProfileOption");
70              
71             # print "addin conter === $counter \n";
72             $table->row("[$index_key]", $row->{title}, $row->{taskid},
73             $row->{importance}, $row->{requestedon});
74              
75             $full_text .= $row->{title} . " " . $row->{description};
76              
77             }
78              
79             return ($table->render(), $full_text);
80              
81             }
82              
83              
84             ###############################################################################
85             #
86             # run - show the care-o-meter
87             #
88             ###############################################################################
89              
90             sub run {
91              
92             my ($this, $thing) = @_;
93              
94             my $profile = Profile->new(Goo::Loader::load("care.goo"));
95              
96             # show a profile of the Things I need to care about
97             while (1) {
98              
99             # profile clear
100             $profile->clear();
101              
102             Goo::Prompter::show_detailed_header("TaskList", "Current Tasks");
103              
104             my $full_text;
105              
106             # add the tasks I care about
107             my ($task_table, $task_text) = $this->get_tasks_table($profile);
108             $full_text .= $task_text;
109             $profile->add_rendered_table($task_table);
110              
111             # add a list of Things found in this Thing
112             $profile->add_things_table($full_text);
113              
114             # show the profile and all the rendered tables
115             $profile->display();
116              
117             # prompt the user for the next command
118             $profile->get_command();
119              
120             }
121              
122             }
123              
124             1;
125              
126              
127             __END__
128              
129             =head1 NAME
130              
131             TaskLister - Show a list of Tasks
132              
133             =head1 SYNOPSIS
134              
135             use TaskLister;
136              
137             =head1 DESCRIPTION
138              
139              
140              
141             =head1 METHODS
142              
143             =over
144              
145             =item get_tasks_table
146              
147             return a table of things i care about
148              
149             =item run
150              
151             show the care-o-meter
152              
153              
154             =back
155              
156             =head1 AUTHOR
157              
158             Nigel Hamilton <nigel@turbo10.com>
159              
160             =head1 SEE ALSO
161