Pratt 1.6.8-x86-linux

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. data/.exrc +61 -0
  2. data/.gitignore +6 -0
  3. data/History.txt +6 -0
  4. data/Manifest.txt +46 -0
  5. data/Pratt.gemspec +173 -0
  6. data/Pratt.mm +1867 -0
  7. data/README.txt +67 -0
  8. data/Rakefile +96 -0
  9. data/TODO +56 -0
  10. data/VERSION +1 -0
  11. data/bin/pratt +13 -0
  12. data/config.rb +19 -0
  13. data/db/sqlite_databases_go_here +0 -0
  14. data/db/zips.csv.zip +0 -0
  15. data/lib/models.rb +8 -0
  16. data/lib/pratt.rb +308 -0
  17. data/lib/pratt/core_ext.rb +6 -0
  18. data/lib/pratt/core_ext/array.rb +20 -0
  19. data/lib/pratt/core_ext/float.rb +29 -0
  20. data/lib/pratt/core_ext/nil.rb +5 -0
  21. data/lib/pratt/core_ext/numeric.rb +9 -0
  22. data/lib/pratt/core_ext/string.rb +31 -0
  23. data/lib/pratt/core_ext/time.rb +20 -0
  24. data/lib/pratt/dialogs.rb +81 -0
  25. data/lib/pratt/formatting.rb +19 -0
  26. data/lib/pratt/project_actions.rb +25 -0
  27. data/lib/pratt/reports.rb +140 -0
  28. data/models/app.rb +39 -0
  29. data/models/customer.rb +50 -0
  30. data/models/invoice.rb +28 -0
  31. data/models/invoice_whence.rb +18 -0
  32. data/models/payment.rb +22 -0
  33. data/models/pratt.rb +15 -0
  34. data/models/project.rb +89 -0
  35. data/models/whence.rb +77 -0
  36. data/models/zip.rb +27 -0
  37. data/pratt.mm +1875 -0
  38. data/spec/app_spec.rb +48 -0
  39. data/spec/array_spec.rb +24 -0
  40. data/spec/customer_spec.rb +31 -0
  41. data/spec/fixtures/empty_graph.expectation +8 -0
  42. data/spec/fixtures/graph.expectation +13 -0
  43. data/spec/fixtures/proportions.expectation +4 -0
  44. data/spec/float_spec.rb +24 -0
  45. data/spec/formatting_spec.rb +7 -0
  46. data/spec/money_spec.rb +9 -0
  47. data/spec/nil_class_spec.rb +8 -0
  48. data/spec/numeric_spec.rb +30 -0
  49. data/spec/payment_spec.rb +19 -0
  50. data/spec/pratt_spec.rb +106 -0
  51. data/spec/project_spec.rb +182 -0
  52. data/spec/rcov.opts +0 -0
  53. data/spec/report_action_spec.rb +83 -0
  54. data/spec/report_spec.rb +205 -0
  55. data/spec/seed_data.rb +33 -0
  56. data/spec/spec.opts +1 -0
  57. data/spec/spec_helper.rb +24 -0
  58. data/spec/string_ext_spec.rb +33 -0
  59. data/spec/whence_spec.rb +54 -0
  60. data/tasks/pratt.rb +87 -0
  61. data/templates/model.eruby +12 -0
  62. data/templates/spec.eruby +8 -0
  63. data/views/current.eruby +5 -0
  64. data/views/general-invoice.eruby +538 -0
  65. data/views/graph.eruby +16 -0
  66. data/views/invoice.eruby +148 -0
  67. data/views/main.rb +90 -0
  68. data/views/pid.eruby +3 -0
  69. data/views/pop.rb +78 -0
  70. data/views/proportions.eruby +4 -0
  71. data/views/raw.eruby +11 -0
  72. metadata +275 -0
@@ -0,0 +1,16 @@
1
+ Project detail
2
+ <% if scale %>
3
+ by <%= scale.red %> from
4
+ <%= when_to.send("beginning_of_#{scale}").strftime(Pratt::FMT).blue %> to <%= when_to.send("end_of_#{scale}").strftime(Pratt::FMT).blue %>
5
+ <% end %>
6
+ <%= ' '.with_label('') << 'dys'.underline << ' '*5 << 'hrs'.underline << ' '*5 << 'min'.underline << ' '*3 << 'total'.underline %>
7
+ <%= ( '-'.or '·')*67 %>
8
+
9
+ <% @projects.each do |proj| %>
10
+ <% hour_spent = proj.time_spent(scale, when_to) %>
11
+ <% if show_all or ( !show_all and hour_spent != 0.0 ) %>
12
+ <%= ('|'.or '⋮').with_label(proj.name) %> <%= (hour_spent / 24).format_integer.cyan %> day <%= (hour_spent % 24).format_integer.yellow %> hour <%= (60*(hour_spent - hour_spent.to_i)).format_integer.green %> min <%= hour_spent.pretty_print.blue %>
13
+ <% end %>
14
+ <% end %>
15
+
16
+ <%= ( '-'.or '·' )*67 %>
@@ -0,0 +1,148 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2
+ <HTML>
3
+ <HEAD>
4
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
5
+ <TITLE></TITLE>
6
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.0 (Linux)">
7
+ <META NAME="AUTHOR" CONTENT=" ">
8
+ <META NAME="CREATED" CONTENT="20090930;9550000">
9
+ <META NAME="CHANGED" CONTENT="20091001;21332000">
10
+ <META NAME="Info 2" CONTENT="">
11
+ <META NAME="Info 3" CONTENT="">
12
+ <META NAME="Info 4" CONTENT="">
13
+ <META NAME="_TemplateID" CONTENT="TC100726791033">
14
+ <STYLE TYPE="text/css">
15
+ <!--
16
+ @page { margin-left: 0.5in; margin-right: 0.5in; margin-top: 0.5in; margin-bottom: 0.51in }
17
+ P { margin-bottom: 0.08in; direction: ltr; color: #000000; text-align: left; widows: 2; orphans: 2 }
18
+ P.western { font-family: "Calibri", sans-serif; font-size: 12pt; so-language: en-US }
19
+ P.cjk { font-family: "Times New Roman", serif; font-size: 12pt; so-language: zxx }
20
+ P.ctl { font-family: "Calibri", sans-serif; font-size: 12pt; so-language: ar-SA }
21
+ -->
22
+ </STYLE>
23
+ </HEAD>
24
+ <BODY LANG="en-US" TEXT="#000000" DIR="LTR">
25
+ <CENTER>
26
+ <TABLE WIDTH=720 BORDER=0 CELLPADDING=5 CELLSPACING=0 STYLE="page-break-before: always">
27
+ <COL WIDTH=351>
28
+ <COL WIDTH=349>
29
+ <TR VALIGN=TOP>
30
+ <TD ROWSPAN=2 WIDTH=351 HEIGHT=43>
31
+ <P STYLE="margin-top: 0.1in; margin-bottom: 0in"><B>QualitySmith LLC</B></P>
32
+ <P STYLE="margin-bottom: 0in"><FONT SIZE=2 STYLE="font-size: 9pt">106 N 2<SUP>nd</SUP> </FONT> </P>
33
+ <P STYLE="margin-bottom: 0in"><FONT SIZE=2 STYLE="font-size: 9pt">Walla Walla, WA 99362</FONT></P>
34
+ <P STYLE="margin-bottom: 0in"><FONT SIZE=2 STYLE="font-size: 9pt">Phone 509-522-0222</FONT></P>
35
+ <P><FONT SIZE=2 STYLE="font-size: 9pt">Fax </FONT> </P>
36
+ </TD>
37
+ <TD WIDTH=349>
38
+ <P ALIGN=RIGHT><FONT COLOR="#7f7f7f"><FONT SIZE=5 STYLE="font-size: 20pt"><B>INVOICE</B></FONT></FONT></P>
39
+ </TD>
40
+ </TR>
41
+ <TR>
42
+ <TD WIDTH=349 VALIGN=BOTTOM>
43
+ <P ALIGN=RIGHT><FONT SIZE=1 STYLE="font-size: 8pt">Date: <%= when_to.send("beginning_of_#{scale}").strftime(Pratt::INVOICE_FMT) %> to <%= when_to.send("end_of_#{scale}").strftime(Pratt::INVOICE_FMT) %></FONT></P>
44
+ </TD>
45
+ </TR>
46
+ </TABLE>
47
+ </CENTER>
48
+ <P CLASS="western" STYLE="margin-bottom: 0in"><BR>
49
+ </P>
50
+ <CENTER>
51
+ <TABLE WIDTH=720 BORDER=0 CELLPADDING=5 CELLSPACING=0>
52
+ <COL WIDTH=350>
53
+ <COL WIDTH=350>
54
+ <TR VALIGN=TOP>
55
+ <TD WIDTH=350 HEIGHT=86>
56
+ <P STYLE="margin-bottom: 0in"><FONT SIZE=1 STYLE="font-size: 8pt"><B>To:</B></FONT></P>
57
+ <P STYLE="margin-bottom: 0in"><FONT SIZE=2 STYLE="font-size: 9pt">Scott Noel-Hemming</FONT></P>
58
+ <P STYLE="margin-bottom: 0in"><FONT SIZE=2 STYLE="font-size: 9pt">Frogstarr78 Software</FONT></P>
59
+ <P STYLE="margin-bottom: 0in"><FONT SIZE=2 STYLE="font-size: 9pt">312 NW 7<SUP>th</SUP> </FONT> </P>
60
+ <P STYLE="margin-bottom: 0in"><FONT SIZE=2 STYLE="font-size: 9pt">Milton-Freewater, OR, 97862</FONT></P>
61
+ <P><FONT SIZE=2 STYLE="font-size: 9pt">509.200.9190</FONT></P>
62
+ </TD>
63
+ <TD WIDTH=350>
64
+ <P><BR>
65
+ </P>
66
+ </TD>
67
+ </TR>
68
+ </TABLE>
69
+ </CENTER>
70
+ <P CLASS="western" STYLE="margin-bottom: 0in"><BR>
71
+ </P>
72
+ <CENTER>
73
+ <TABLE WIDTH=722 BORDER=1 BORDERCOLOR="#000000" CELLPADDING=3 CELLSPACING=0 RULES=ROWS>
74
+ <COLGROUP>
75
+ <COL WIDTH=408>
76
+ <COL WIDTH=96>
77
+ </COLGROUP>
78
+ <COLGROUP>
79
+ <COL WIDTH=96>
80
+ </COLGROUP>
81
+ <COLGROUP>
82
+ <COL WIDTH=97>
83
+ </COLGROUP>
84
+ <TR>
85
+ <TD WIDTH=408 HEIGHT=12>
86
+ <P ALIGN=CENTER><FONT SIZE=1 STYLE="font-size: 8pt"><B>DESCRIPTION</B></FONT></P>
87
+ </TD>
88
+ <TD WIDTH=96>
89
+ <P ALIGN=CENTER><FONT SIZE=1 STYLE="font-size: 8pt"><B>HOURS</B></FONT></P>
90
+ </TD>
91
+ <TD WIDTH=96>
92
+ <P ALIGN=CENTER><FONT SIZE=1 STYLE="font-size: 8pt"><B>RATE</B></FONT></P>
93
+ </TD>
94
+ <TD WIDTH=97>
95
+ <P ALIGN=CENTER><FONT SIZE=1 STYLE="font-size: 8pt"><B>AMOUNT</B></FONT></P>
96
+ </TD>
97
+ </TR>
98
+ <% @projects.each do |project| %>
99
+ <TR>
100
+ <TD WIDTH=408 HEIGHT=13>
101
+ <P><%= project.name %></P>
102
+ </TD>
103
+ <TD WIDTH=96>
104
+ <P ALIGN=RIGHT><%= project.time_spent(scale, when_to).pretty_print %></P>
105
+ </TD>
106
+ <TD WIDTH=96>
107
+ <P ALIGN=RIGHT><%= project.payment.pretty_print %></P>
108
+ </TD>
109
+ <TD WIDTH=97>
110
+ <P ALIGN=RIGHT><FONT SIZE=2><%= project.amount( project.time_spent( scale, when_to ) ).pretty_print %></FONT></P>
111
+ </TD>
112
+ </TR>
113
+ <% end %>
114
+ <TR>
115
+ <TD WIDTH=408 HEIGHT=13 VALIGN=TOP>
116
+ <P CLASS="western"><BR>
117
+ </P>
118
+ </TD>
119
+ <TD COLSPAN=2 WIDTH=198>
120
+ <P ALIGN=RIGHT><FONT SIZE=1 STYLE="font-size: 8pt">TOTAL</FONT></P>
121
+ </TD>
122
+ <TD WIDTH=97>
123
+ <P ALIGN=RIGHT><FONT SIZE=2><%= @total.pretty_print %></FONT></P>
124
+ </TD>
125
+ </TR>
126
+ </TABLE>
127
+ </CENTER>
128
+ <P CLASS="western" STYLE="margin-bottom: 0in"><BR>
129
+ </P>
130
+ <CENTER>
131
+ <TABLE WIDTH=720 BORDER=0 CELLPADDING=8 CELLSPACING=0>
132
+ <COL WIDTH=704>
133
+ <TR>
134
+ <TD WIDTH=704 HEIGHT=90 VALIGN=TOP>
135
+ <P><FONT SIZE=2 STYLE="font-size: 9pt">Make all checks payable to Frogstarr78 Software</FONT></P>
136
+ </TD>
137
+ </TR>
138
+ <TR>
139
+ <TD WIDTH=704 HEIGHT=13>
140
+ <P ALIGN=CENTER><FONT SIZE=1 STYLE="font-size: 8pt"><B>Thank you for your business!</B></FONT></P>
141
+ </TD>
142
+ </TR>
143
+ </TABLE>
144
+ </CENTER>
145
+ <P CLASS="western" STYLE="margin-bottom: 0in"><BR>
146
+ </P>
147
+ </BODY>
148
+ </HTML>
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env ruby
2
+ require 'tk'
3
+ require 'tkextlib/tile'
4
+ require 'optparse'
5
+ require 'ostruct'
6
+
7
+ include Tk::Tile
8
+
9
+ opts = OpenStruct.new
10
+ opts.projects = []
11
+ opts.current = -1
12
+
13
+ ARGV.options do |opt|
14
+ opt.on('-p x,y,z', "--projects x,y,z", Array, "List of projects to display.") do |projs|
15
+ opts.projects = projs
16
+ end
17
+ opt.on('-c', '--current CURRENT', String, "Set the current task.") do |cur|
18
+ opts.current = opts.projects.index(cur)
19
+ end
20
+ opt.parse!
21
+ end
22
+
23
+ if opts.projects.empty?
24
+ raise 'No Projects' if ARGV.empty?
25
+ opts.projects = ARGV.split(',')
26
+ end
27
+
28
+ opts.current = opts.projects.index(opts.current) if opts.current == -1
29
+
30
+ root = TkRoot.new { title "Pratt Main" }
31
+
32
+ button_holder = Frame.new(root){ padding "5 5 5 5" }
33
+ button_holder_top = Frame.new(button_holder) { padding "5 5 5 5" }
34
+
35
+ project_combo = TCombobox.new(button_holder_top)
36
+ project_combo.values = opts.projects
37
+ project_combo.current = opts.current || 0
38
+ project_combo.pack('side' => 'bottom', 'fill' => 'y')
39
+
40
+ change = proc {
41
+ Process.detach(
42
+ fork { system("ruby bin/pratt --project '#{project_combo.get}' --change --begin --unlock") }
43
+ )
44
+ exit
45
+ }
46
+ quit = proc {
47
+ Process.detach(
48
+ fork { system("ruby bin/pratt --project '#{project_combo.get}' --end --unlock --quit") }
49
+ )
50
+ exit
51
+ }
52
+ start = proc {
53
+ Process.detach(
54
+ fork { system("ruby bin/pratt --project '#{project_combo.get}' --begin --unlock") }
55
+ )
56
+ exit
57
+ }
58
+
59
+ Label.new(button_holder_top) { text "What will you be working on?" }.pack('side' => 'top', :fill => 'y')
60
+
61
+ button_holder_bottom = Frame.new(button_holder) { padding "5 5 5 5" }
62
+ TkButton.new(button_holder_bottom) do
63
+ text 'Start'
64
+ command start
65
+ underline 0
66
+ end.pack :side => 'left', :fill => 'y'
67
+ root.bind("Alt-s", start)
68
+ #root.bind("Return", start)
69
+
70
+ TkButton.new(button_holder_bottom) do
71
+ text 'Change'
72
+ command change
73
+ underline 0
74
+ end.pack :side => 'left', :fill => 'y'
75
+ root.bind("Alt-c", change)
76
+
77
+ TkButton.new(button_holder_bottom) do
78
+ text 'Quit'
79
+ command quit
80
+ underline 0
81
+ end.pack :side => 'right', :fill => 'y'
82
+ root.bind("Alt-q", quit)
83
+ root.bind("Control-q", quit)
84
+ root.bind("Destroy", quit)
85
+
86
+ button_holder_top.pack( :side => 'top' , :fill => 'y')
87
+ button_holder_bottom.pack(:side => 'bottom', :fill => 'y')
88
+ button_holder.pack( :side => 'top', :fill => 'y')
89
+
90
+ Tk.mainloop
@@ -0,0 +1,3 @@
1
+ pid <%= cpid.cyan %> found running
2
+ expect <%= app.pid.to_s.magenta %> <%= ('-'.or '·')*20 %> <%= '|'.or '⌈' %><%= daemonized? ? 'OK'.green : 'Oops'.red %><%= '|'.or '⌋' %>
3
+
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env ruby
2
+ require 'tk'
3
+ require 'tkextlib/tile'
4
+ require 'optparse'
5
+ require 'ostruct'
6
+
7
+ include Tk::Tile
8
+
9
+ opts = OpenStruct.new
10
+ opts.project_name = ''
11
+ opts.start_time = ''
12
+ opts.project_time = ''
13
+
14
+ ARGV.options do |opt|
15
+ opt.on('-p', '--project PROJECT', String, "Set the current task.") do |proj|
16
+ opts.project_name = proj
17
+ end
18
+ opt.on('-s', '--start START_TIME', String, "Set the current task.") do |time|
19
+ opts.start_time = time
20
+ end
21
+ opt.on('-t', '--project_time PROJECT_TIME', String, "Set the current task.") do |time|
22
+ opts.project_time = time
23
+ end
24
+ opt.parse!
25
+ end
26
+
27
+ yes = proc {
28
+ c = fork { system("ruby bin/pratt --project '#{opts.project_name}' --restart --unlock") }
29
+ Process.detach(c)
30
+ exit
31
+ }
32
+ adjust = proc {
33
+ c = fork { system("ruby bin/pratt --project '#{opts.project_name}' --end --unlock --gui") }
34
+ Process.detach(c)
35
+ exit
36
+ }
37
+
38
+ root = TkRoot.new { title "Pratt Reminder" }
39
+
40
+ frm = Frame.new(root) { padding "5 5 5 5" }
41
+ top_frm = Frame.new(frm) { padding "5 5 5 5" }
42
+
43
+ Label.new(top_frm) do
44
+ text "Have you been working on: "
45
+ end.pack(:side => 'top', :fill => 'y')
46
+
47
+ Label.new(top_frm) do
48
+ text opts.project_name
49
+ end.pack(:side => 'top', :fill => 'y')
50
+
51
+ Label.new(top_frm) do
52
+ text "started:
53
+ #{opts.start_time}
54
+ total time:
55
+ #{opts.project_time.gsub(/\e\[[0-9]+m/, '')}."
56
+ end.pack(:side => 'bottom', :fill => 'y')
57
+
58
+ botm_frm = Frame.new(frm) { padding "5 5 5 5" }
59
+ TkButton.new(botm_frm) do
60
+ text "Yes"
61
+ command yes
62
+ underline 0
63
+ end.pack('side' => 'left', :fill => 'y')
64
+ root.bind("Alt-y", yes)
65
+ #root.bind("Return", yes)
66
+
67
+ TkButton.new(botm_frm) do
68
+ text "Adjust"
69
+ command adjust
70
+ underline 0
71
+ end.pack('side' => 'right', :fill => 'y')
72
+ root.bind("Alt-a", adjust)
73
+
74
+ top_frm.pack( :side => 'top', :fill => 'y')
75
+ botm_frm.pack(:side => 'bottom', :fill => 'y')
76
+ frm.pack( :side => 'top', :fill => 'y')
77
+
78
+ Tk.mainloop
@@ -0,0 +1,4 @@
1
+ <%= @scaled_total.to_f.pretty_print.underline.with_label("Total") %> hrs
2
+ <%= @primary.to_f.percentage( @scaled_total ).green.with_label(Project.primary.name) %>
3
+ <%= @off_total.to_f.percentage( @scaled_total).yellow.with_label(Project.off.name) %>
4
+ <%= @rest_total.to_f.percentage( @scaled_total ).red.with_label('Other') %>
@@ -0,0 +1,11 @@
1
+ <% colors = %w(red red_on_yellow red_on_white green green_on_blue yellow yellow_on_blue blue magenta magenta_on_blue cyan white white_on_green white_on_blue white_on_magenta black_on_yellow black_on_blue black_on_green black_on_magenta black_on_cyan black_on_red).sort
2
+ @whences.each do |whence|
3
+ color = colors[whence.project.id%colors.size]
4
+ %>
5
+ <%= ('|'.or '⌈').with_label whence.project.name %><%= whence.start_at.strftime(Pratt::FMT).send(color) -%>
6
+ <% if whence.end_at -%>
7
+ <%= '-'.or '­' %> <%= whence.end_at.strftime(Pratt::FMT).send(color) %><%= '|'.or '⌋' %> <%= "%6.2f"% [(whence.end_at-whence.start_at)/60] %> min
8
+ <% else %>
9
+ ...
10
+ <% end %>
11
+ <% end %>
metadata ADDED
@@ -0,0 +1,275 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: Pratt
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 6
8
+ - 8
9
+ version: 1.6.8
10
+ platform: x86-linux
11
+ authors:
12
+ - Scott Noel-Hemming
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-06-01 00:00:00 -07:00
18
+ default_executable: pratt
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rspec
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 2
30
+ - 6
31
+ version: 1.2.6
32
+ type: :development
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: mocha
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ - 9
44
+ - 5
45
+ version: 0.9.5
46
+ type: :development
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: activerecord
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 2
57
+ - 1
58
+ - 1
59
+ version: 2.1.1
60
+ type: :runtime
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: sqlite3-ruby
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "="
68
+ - !ruby/object:Gem::Version
69
+ segments:
70
+ - 1
71
+ - 2
72
+ - 4
73
+ version: 1.2.4
74
+ type: :runtime
75
+ version_requirements: *id004
76
+ - !ruby/object:Gem::Dependency
77
+ name: shifty_week
78
+ prerelease: false
79
+ requirement: &id005 !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ segments:
84
+ - 0
85
+ - 1
86
+ - 0
87
+ version: 0.1.0
88
+ type: :runtime
89
+ version_requirements: *id005
90
+ - !ruby/object:Gem::Dependency
91
+ name: erubis
92
+ prerelease: false
93
+ requirement: &id006 !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "="
96
+ - !ruby/object:Gem::Version
97
+ segments:
98
+ - 2
99
+ - 6
100
+ - 5
101
+ version: 2.6.5
102
+ type: :runtime
103
+ version_requirements: *id006
104
+ - !ruby/object:Gem::Dependency
105
+ name: chronic
106
+ prerelease: false
107
+ requirement: &id007 !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "="
110
+ - !ruby/object:Gem::Version
111
+ segments:
112
+ - 0
113
+ - 2
114
+ - 3
115
+ version: 0.2.3
116
+ type: :runtime
117
+ version_requirements: *id007
118
+ - !ruby/object:Gem::Dependency
119
+ name: colored
120
+ prerelease: false
121
+ requirement: &id008 !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "="
124
+ - !ruby/object:Gem::Version
125
+ segments:
126
+ - 1
127
+ - 2
128
+ version: "1.2"
129
+ type: :runtime
130
+ version_requirements: *id008
131
+ description: "\n\
132
+ \t Need a way to keep track of your time, but get caught up in work? Or constant interruptions?\n\
133
+ \t Yeah you know who I'm talking about. Those people from the [abc] department always \"NEEDING xyz FEATURE NOW!!!\".\n\
134
+ \t Seriously though. I'm usually just loose track of time. I wanted an app that I could start with a task I think \n\
135
+ \t I'll be working on, but that get's in my face constantly to ensure I'm still working on it. And if I'm not any longer,\n\
136
+ \t provides an easy way of changing to another task, or if I have changed tasks and not already updated the app, would \n\
137
+ \t provide an easy way of changing the task of the previously recorded interval. That's what this is intended to do.\n\n\
138
+ \t Time Tracking.\n\
139
+ \t Proactively set what you expect to work on.\n\
140
+ \t Reactively modify what you are no longer working on.\n "
141
+ email: frogstarr78@gmail.com
142
+ executables:
143
+ - pratt
144
+ extensions: []
145
+
146
+ extra_rdoc_files:
147
+ - README.txt
148
+ - TODO
149
+ files:
150
+ - .exrc
151
+ - .gitignore
152
+ - History.txt
153
+ - Manifest.txt
154
+ - Pratt.gemspec
155
+ - Pratt.mm
156
+ - README.txt
157
+ - Rakefile
158
+ - TODO
159
+ - VERSION
160
+ - bin/pratt
161
+ - config.rb
162
+ - db/sqlite_databases_go_here
163
+ - db/zips.csv.zip
164
+ - lib/models.rb
165
+ - lib/pratt.rb
166
+ - lib/pratt/core_ext.rb
167
+ - lib/pratt/core_ext/array.rb
168
+ - lib/pratt/core_ext/float.rb
169
+ - lib/pratt/core_ext/nil.rb
170
+ - lib/pratt/core_ext/numeric.rb
171
+ - lib/pratt/core_ext/string.rb
172
+ - lib/pratt/core_ext/time.rb
173
+ - lib/pratt/dialogs.rb
174
+ - lib/pratt/formatting.rb
175
+ - lib/pratt/project_actions.rb
176
+ - lib/pratt/reports.rb
177
+ - models/app.rb
178
+ - models/customer.rb
179
+ - models/invoice.rb
180
+ - models/invoice_whence.rb
181
+ - models/payment.rb
182
+ - models/pratt.rb
183
+ - models/project.rb
184
+ - models/whence.rb
185
+ - models/zip.rb
186
+ - pratt.mm
187
+ - reports/travel.log
188
+ - reports/travel.log.2009
189
+ - spec/app_spec.rb
190
+ - spec/array_spec.rb
191
+ - spec/customer_spec.rb
192
+ - spec/fixtures/empty_graph.expectation
193
+ - spec/fixtures/graph.expectation
194
+ - spec/fixtures/proportions.expectation
195
+ - spec/float_spec.rb
196
+ - spec/formatting_spec.rb
197
+ - spec/money_spec.rb
198
+ - spec/nil_class_spec.rb
199
+ - spec/numeric_spec.rb
200
+ - spec/payment_spec.rb
201
+ - spec/pratt_spec.rb
202
+ - spec/project_spec.rb
203
+ - spec/rcov.opts
204
+ - spec/report_action_spec.rb
205
+ - spec/report_spec.rb
206
+ - spec/seed_data.rb
207
+ - spec/spec.opts
208
+ - spec/spec_helper.rb
209
+ - spec/string_ext_spec.rb
210
+ - spec/whence_spec.rb
211
+ - tasks/pratt.rb
212
+ - templates/model.eruby
213
+ - templates/spec.eruby
214
+ - views/current.eruby
215
+ - views/general-invoice.eruby
216
+ - views/graph.eruby
217
+ - views/invoice.eruby
218
+ - views/main.rb
219
+ - views/pid.eruby
220
+ - views/pop.rb
221
+ - views/proportions.eruby
222
+ - views/raw.eruby
223
+ has_rdoc: true
224
+ homepage: http://github.com/frogstarr78/pratt
225
+ licenses: []
226
+
227
+ post_install_message:
228
+ rdoc_options:
229
+ - --charset=UTF-8
230
+ require_paths:
231
+ - lib
232
+ required_ruby_version: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ segments:
237
+ - 0
238
+ version: "0"
239
+ required_rubygems_version: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ segments:
244
+ - 0
245
+ version: "0"
246
+ requirements: []
247
+
248
+ rubyforge_project: Pratt
249
+ rubygems_version: 1.3.6
250
+ signing_key:
251
+ specification_version: 3
252
+ summary: Pro/Re-Active Time Tracker. Track time based on what you expect to be working on, with frequent prompts to ensure accuracy.
253
+ test_files:
254
+ - spec/nil_class_spec.rb
255
+ - spec/whence_spec.rb
256
+ - spec/array_spec.rb
257
+ - spec/spec_helper.rb
258
+ - spec/float_spec.rb
259
+ - spec/pratt_spec.rb
260
+ - spec/seed_data.rb
261
+ - spec/project_spec.rb
262
+ - spec/numeric_spec.rb
263
+ - spec/app_spec.rb
264
+ - spec/formatting_spec.rb
265
+ - spec/string_ext_spec.rb
266
+ - spec/customer_spec.rb
267
+ - spec/report_spec.rb
268
+ - spec/money_spec.rb
269
+ - spec/report_action_spec.rb
270
+ - spec/payment_spec.rb
271
+ - spec/rcov.opts
272
+ - spec/spec.opts
273
+ - spec/fixtures/empty_graph.expectation
274
+ - spec/fixtures/proportions.expectation
275
+ - spec/fixtures/graph.expectation