timetrap 1.7.4 → 1.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +5 -0
- data/Rakefile +2 -3
- data/VERSION.yml +1 -1
- data/lib/timetrap/cli.rb +3 -2
- data/lib/timetrap/models.rb +6 -0
- data/lib/timetrap/timer.rb +1 -1
- data/spec/timetrap_spec.rb +38 -0
- data/timetrap.gemspec +53 -34
- metadata +142 -20
- data/.gitignore +0 -5
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'rake/rdoctask'
|
2
|
-
require '
|
2
|
+
require 'rubygems/package_task'
|
3
3
|
require 'rspec/core/rake_task'
|
4
4
|
|
5
5
|
desc 'Default: run specs.'
|
@@ -24,7 +24,6 @@ begin
|
|
24
24
|
|
25
25
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
26
26
|
s.authors = ["Sam Goldstein"]
|
27
|
-
s.date = %q{2009-04-14}
|
28
27
|
s.description = %q{Command line time tracker}
|
29
28
|
s.email = %q{sgrock@gmail.com}
|
30
29
|
s.has_rdoc = true
|
@@ -40,6 +39,6 @@ begin
|
|
40
39
|
s.add_dependency("getopt-declare", ">= 1.28")
|
41
40
|
end
|
42
41
|
rescue LoadError
|
43
|
-
puts "Jeweler not available.
|
42
|
+
puts "Jeweler not available."
|
44
43
|
end
|
45
44
|
|
data/VERSION.yml
CHANGED
data/lib/timetrap/cli.rb
CHANGED
@@ -306,6 +306,7 @@ COMMAND is one of:
|
|
306
306
|
end
|
307
307
|
end.sort_by{|sheet| sheet[:name].downcase}
|
308
308
|
width = sheets.sort_by{|h|h[:name].length }.last[:name].length + 4
|
309
|
+
width = 10 if width < 10
|
309
310
|
puts " %-#{width}s%-12s%-12s%s" % ["Timesheet", "Running", "Today", "Total Time"]
|
310
311
|
sheets.each do |sheet|
|
311
312
|
star = sheet[:name] == Timer.current_sheet ? '*' : ' '
|
@@ -322,9 +323,9 @@ COMMAND is one of:
|
|
322
323
|
puts "*#{Timer.current_sheet}: not running"
|
323
324
|
end
|
324
325
|
Timer.running_entries.each do |entry|
|
325
|
-
current = entry
|
326
|
+
current = entry.sheet == Timer.current_sheet
|
326
327
|
out = current ? '*' : ' '
|
327
|
-
out << "#{entry
|
328
|
+
out << "#{entry.sheet}: #{format_duration(entry.duration)}".gsub(/ /, ' ')
|
328
329
|
out << " (#{entry.note})" if entry.note =~ /.+/
|
329
330
|
puts out
|
330
331
|
end
|
data/lib/timetrap/models.rb
CHANGED
@@ -29,6 +29,12 @@ module Timetrap
|
|
29
29
|
round? ? rounded_end : self[:end]
|
30
30
|
end
|
31
31
|
|
32
|
+
# work around sequel's behavior of returning numeric values in string
|
33
|
+
# fields as integers
|
34
|
+
def sheet
|
35
|
+
self[:sheet].to_s
|
36
|
+
end
|
37
|
+
|
32
38
|
def duration
|
33
39
|
@duration ||= self.end_or_now.to_i - self.start.to_i
|
34
40
|
end
|
data/lib/timetrap/timer.rb
CHANGED
data/spec/timetrap_spec.rb
CHANGED
@@ -561,6 +561,20 @@ END:VCALENDAR
|
|
561
561
|
invoke "kill --id #{entry.id} --yes"
|
562
562
|
end.should change(Timetrap::Entry, :count).by(-1)
|
563
563
|
end
|
564
|
+
|
565
|
+
describe "with a numeric sheet name" do
|
566
|
+
before do
|
567
|
+
Time.stub!(:now).and_return local_time("2008-10-05 18:00:00")
|
568
|
+
create_entry( :sheet => 1234, :start => local_time_cli('2008-10-03 12:00:00'),
|
569
|
+
:end => local_time_cli('2008-10-03 14:00:00'))
|
570
|
+
end
|
571
|
+
|
572
|
+
it "should kill the sheet" do
|
573
|
+
lambda do
|
574
|
+
invoke 'kill -y 1234'
|
575
|
+
end.should change(Timetrap::Entry, :count).by(-1)
|
576
|
+
end
|
577
|
+
end
|
564
578
|
end
|
565
579
|
|
566
580
|
describe "list" do
|
@@ -571,6 +585,30 @@ END:VCALENDAR
|
|
571
585
|
end
|
572
586
|
end
|
573
587
|
|
588
|
+
describe "with a numeric sheet name" do
|
589
|
+
before do
|
590
|
+
Time.stub!(:now).and_return local_time("2008-10-05 18:00:00")
|
591
|
+
create_entry( :sheet => '1234', :start => local_time_cli('2008-10-03 12:00:00'),
|
592
|
+
:end => local_time_cli('2008-10-03 14:00:00'))
|
593
|
+
end
|
594
|
+
|
595
|
+
it "should list the sheet" do
|
596
|
+
invoke 'list'
|
597
|
+
$stdout.string.should == " Timesheet Running Today Total Time\n 1234 0:00:00 0:00:00 2:00:00\n*default 0:00:00 0:00:00 0:00:00\n"
|
598
|
+
end
|
599
|
+
end
|
600
|
+
|
601
|
+
describe "with a numeric current_sheet" do
|
602
|
+
before do
|
603
|
+
Timetrap::Timer.current_sheet = '1234'
|
604
|
+
end
|
605
|
+
|
606
|
+
it "should list the sheet" do
|
607
|
+
invoke 'list'
|
608
|
+
$stdout.string.should == " Timesheet Running Today Total Time\n*1234 0:00:00 0:00:00 0:00:00\n"
|
609
|
+
end
|
610
|
+
end
|
611
|
+
|
574
612
|
describe "with sheets defined" do
|
575
613
|
before do
|
576
614
|
Time.stub!(:now).and_return local_time("2008-10-05 18:00:00")
|
data/timetrap.gemspec
CHANGED
@@ -1,61 +1,56 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{timetrap}
|
8
|
-
s.version = "1.7.
|
8
|
+
s.version = "1.7.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Sam Goldstein"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-06-17}
|
13
13
|
s.default_executable = %q{t}
|
14
14
|
s.description = %q{Command line time tracker}
|
15
15
|
s.email = %q{sgrock@gmail.com}
|
16
16
|
s.executables = ["t"]
|
17
17
|
s.extra_rdoc_files = [
|
18
18
|
"LICENSE.txt",
|
19
|
-
|
19
|
+
"README.md"
|
20
20
|
]
|
21
21
|
s.files = [
|
22
|
-
".
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
"timetrap.gemspec"
|
22
|
+
".rspec",
|
23
|
+
"CONTRIBUTORS",
|
24
|
+
"Gemfile",
|
25
|
+
"LICENSE.txt",
|
26
|
+
"README.md",
|
27
|
+
"Rakefile",
|
28
|
+
"VERSION.yml",
|
29
|
+
"bin/dev_t",
|
30
|
+
"bin/t",
|
31
|
+
"lib/timetrap.rb",
|
32
|
+
"lib/timetrap/cli.rb",
|
33
|
+
"lib/timetrap/config.rb",
|
34
|
+
"lib/timetrap/formatters.rb",
|
35
|
+
"lib/timetrap/formatters/csv.rb",
|
36
|
+
"lib/timetrap/formatters/factor.rb",
|
37
|
+
"lib/timetrap/formatters/ical.rb",
|
38
|
+
"lib/timetrap/formatters/ids.rb",
|
39
|
+
"lib/timetrap/formatters/json.rb",
|
40
|
+
"lib/timetrap/formatters/text.rb",
|
41
|
+
"lib/timetrap/helpers.rb",
|
42
|
+
"lib/timetrap/models.rb",
|
43
|
+
"lib/timetrap/timer.rb",
|
44
|
+
"spec/timetrap_spec.rb",
|
45
|
+
"timetrap.gemspec"
|
47
46
|
]
|
48
47
|
s.homepage = %q{http://github.com/samg/timetrap/tree/master}
|
49
48
|
s.rdoc_options = ["--inline-source", "--charset=UTF-8"]
|
50
49
|
s.require_paths = ["lib"]
|
51
|
-
s.rubygems_version = %q{1.3
|
50
|
+
s.rubygems_version = %q{1.5.3}
|
52
51
|
s.summary = %q{Command line time tracker}
|
53
|
-
s.test_files = [
|
54
|
-
"spec/timetrap_spec.rb"
|
55
|
-
]
|
56
52
|
|
57
53
|
if s.respond_to? :specification_version then
|
58
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
59
54
|
s.specification_version = 3
|
60
55
|
|
61
56
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
@@ -63,17 +58,41 @@ Gem::Specification.new do |s|
|
|
63
58
|
s.add_runtime_dependency(%q<sqlite3>, ["~> 1.3.3"])
|
64
59
|
s.add_runtime_dependency(%q<chronic>, ["~> 0.3.0"])
|
65
60
|
s.add_runtime_dependency(%q<getopt-declare>, [">= 1.28"])
|
61
|
+
s.add_runtime_dependency(%q<json>, ["~> 1.4.6"])
|
62
|
+
s.add_runtime_dependency(%q<icalendar>, ["~> 1.1.5"])
|
63
|
+
s.add_runtime_dependency(%q<rake>, [">= 0"])
|
64
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
65
|
+
s.add_runtime_dependency(%q<sequel>, [">= 3.9.0"])
|
66
|
+
s.add_runtime_dependency(%q<sqlite3>, ["~> 1.3.3"])
|
67
|
+
s.add_runtime_dependency(%q<chronic>, ["~> 0.3.0"])
|
68
|
+
s.add_runtime_dependency(%q<getopt-declare>, [">= 1.28"])
|
66
69
|
else
|
67
70
|
s.add_dependency(%q<sequel>, [">= 3.9.0"])
|
68
71
|
s.add_dependency(%q<sqlite3>, ["~> 1.3.3"])
|
69
72
|
s.add_dependency(%q<chronic>, ["~> 0.3.0"])
|
70
73
|
s.add_dependency(%q<getopt-declare>, [">= 1.28"])
|
74
|
+
s.add_dependency(%q<json>, ["~> 1.4.6"])
|
75
|
+
s.add_dependency(%q<icalendar>, ["~> 1.1.5"])
|
76
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
77
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
78
|
+
s.add_dependency(%q<sequel>, [">= 3.9.0"])
|
79
|
+
s.add_dependency(%q<sqlite3>, ["~> 1.3.3"])
|
80
|
+
s.add_dependency(%q<chronic>, ["~> 0.3.0"])
|
81
|
+
s.add_dependency(%q<getopt-declare>, [">= 1.28"])
|
71
82
|
end
|
72
83
|
else
|
73
84
|
s.add_dependency(%q<sequel>, [">= 3.9.0"])
|
74
85
|
s.add_dependency(%q<sqlite3>, ["~> 1.3.3"])
|
75
86
|
s.add_dependency(%q<chronic>, ["~> 0.3.0"])
|
76
87
|
s.add_dependency(%q<getopt-declare>, [">= 1.28"])
|
88
|
+
s.add_dependency(%q<json>, ["~> 1.4.6"])
|
89
|
+
s.add_dependency(%q<icalendar>, ["~> 1.1.5"])
|
90
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
91
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
92
|
+
s.add_dependency(%q<sequel>, [">= 3.9.0"])
|
93
|
+
s.add_dependency(%q<sqlite3>, ["~> 1.3.3"])
|
94
|
+
s.add_dependency(%q<chronic>, ["~> 0.3.0"])
|
95
|
+
s.add_dependency(%q<getopt-declare>, [">= 1.28"])
|
77
96
|
end
|
78
97
|
end
|
79
98
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: timetrap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 1
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 7
|
9
|
-
-
|
10
|
-
version: 1.7.
|
9
|
+
- 5
|
10
|
+
version: 1.7.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sam Goldstein
|
@@ -15,13 +15,12 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-06-17 00:00:00 -07:00
|
19
19
|
default_executable: t
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: sequel
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
23
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
25
24
|
none: false
|
26
25
|
requirements:
|
27
26
|
- - ">="
|
@@ -32,12 +31,12 @@ dependencies:
|
|
32
31
|
- 9
|
33
32
|
- 0
|
34
33
|
version: 3.9.0
|
34
|
+
prerelease: false
|
35
35
|
type: :runtime
|
36
|
-
|
36
|
+
requirement: *id001
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: sqlite3
|
39
|
-
|
40
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
41
40
|
none: false
|
42
41
|
requirements:
|
43
42
|
- - ~>
|
@@ -48,12 +47,12 @@ dependencies:
|
|
48
47
|
- 3
|
49
48
|
- 3
|
50
49
|
version: 1.3.3
|
50
|
+
prerelease: false
|
51
51
|
type: :runtime
|
52
|
-
|
52
|
+
requirement: *id002
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: chronic
|
55
|
-
|
56
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
57
56
|
none: false
|
58
57
|
requirements:
|
59
58
|
- - ~>
|
@@ -64,12 +63,135 @@ dependencies:
|
|
64
63
|
- 3
|
65
64
|
- 0
|
66
65
|
version: 0.3.0
|
66
|
+
prerelease: false
|
67
67
|
type: :runtime
|
68
|
-
|
68
|
+
requirement: *id003
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: getopt-declare
|
71
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
hash: 55
|
77
|
+
segments:
|
78
|
+
- 1
|
79
|
+
- 28
|
80
|
+
version: "1.28"
|
81
|
+
prerelease: false
|
82
|
+
type: :runtime
|
83
|
+
requirement: *id004
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: json
|
86
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
88
|
+
requirements:
|
89
|
+
- - ~>
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
hash: 11
|
92
|
+
segments:
|
93
|
+
- 1
|
94
|
+
- 4
|
95
|
+
- 6
|
96
|
+
version: 1.4.6
|
97
|
+
prerelease: false
|
98
|
+
type: :runtime
|
99
|
+
requirement: *id005
|
100
|
+
- !ruby/object:Gem::Dependency
|
101
|
+
name: icalendar
|
102
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
103
|
+
none: false
|
104
|
+
requirements:
|
105
|
+
- - ~>
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
hash: 25
|
108
|
+
segments:
|
109
|
+
- 1
|
110
|
+
- 1
|
111
|
+
- 5
|
112
|
+
version: 1.1.5
|
113
|
+
prerelease: false
|
114
|
+
type: :runtime
|
115
|
+
requirement: *id006
|
116
|
+
- !ruby/object:Gem::Dependency
|
117
|
+
name: rake
|
118
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
119
|
+
none: false
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
hash: 3
|
124
|
+
segments:
|
125
|
+
- 0
|
126
|
+
version: "0"
|
127
|
+
prerelease: false
|
128
|
+
type: :runtime
|
129
|
+
requirement: *id007
|
130
|
+
- !ruby/object:Gem::Dependency
|
131
|
+
name: jeweler
|
132
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
133
|
+
none: false
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
hash: 3
|
138
|
+
segments:
|
139
|
+
- 0
|
140
|
+
version: "0"
|
141
|
+
prerelease: false
|
142
|
+
type: :development
|
143
|
+
requirement: *id008
|
144
|
+
- !ruby/object:Gem::Dependency
|
145
|
+
name: sequel
|
146
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
147
|
+
none: false
|
148
|
+
requirements:
|
149
|
+
- - ">="
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
hash: 35
|
152
|
+
segments:
|
153
|
+
- 3
|
154
|
+
- 9
|
155
|
+
- 0
|
156
|
+
version: 3.9.0
|
157
|
+
prerelease: false
|
158
|
+
type: :runtime
|
159
|
+
requirement: *id009
|
160
|
+
- !ruby/object:Gem::Dependency
|
161
|
+
name: sqlite3
|
162
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
163
|
+
none: false
|
164
|
+
requirements:
|
165
|
+
- - ~>
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
hash: 29
|
168
|
+
segments:
|
169
|
+
- 1
|
170
|
+
- 3
|
171
|
+
- 3
|
172
|
+
version: 1.3.3
|
71
173
|
prerelease: false
|
72
|
-
|
174
|
+
type: :runtime
|
175
|
+
requirement: *id010
|
176
|
+
- !ruby/object:Gem::Dependency
|
177
|
+
name: chronic
|
178
|
+
version_requirements: &id011 !ruby/object:Gem::Requirement
|
179
|
+
none: false
|
180
|
+
requirements:
|
181
|
+
- - ~>
|
182
|
+
- !ruby/object:Gem::Version
|
183
|
+
hash: 19
|
184
|
+
segments:
|
185
|
+
- 0
|
186
|
+
- 3
|
187
|
+
- 0
|
188
|
+
version: 0.3.0
|
189
|
+
prerelease: false
|
190
|
+
type: :runtime
|
191
|
+
requirement: *id011
|
192
|
+
- !ruby/object:Gem::Dependency
|
193
|
+
name: getopt-declare
|
194
|
+
version_requirements: &id012 !ruby/object:Gem::Requirement
|
73
195
|
none: false
|
74
196
|
requirements:
|
75
197
|
- - ">="
|
@@ -79,8 +201,9 @@ dependencies:
|
|
79
201
|
- 1
|
80
202
|
- 28
|
81
203
|
version: "1.28"
|
204
|
+
prerelease: false
|
82
205
|
type: :runtime
|
83
|
-
|
206
|
+
requirement: *id012
|
84
207
|
description: Command line time tracker
|
85
208
|
email: sgrock@gmail.com
|
86
209
|
executables:
|
@@ -91,7 +214,6 @@ extra_rdoc_files:
|
|
91
214
|
- LICENSE.txt
|
92
215
|
- README.md
|
93
216
|
files:
|
94
|
-
- .gitignore
|
95
217
|
- .rspec
|
96
218
|
- CONTRIBUTORS
|
97
219
|
- Gemfile
|
@@ -147,9 +269,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
147
269
|
requirements: []
|
148
270
|
|
149
271
|
rubyforge_project:
|
150
|
-
rubygems_version: 1.3
|
272
|
+
rubygems_version: 1.5.3
|
151
273
|
signing_key:
|
152
274
|
specification_version: 3
|
153
275
|
summary: Command line time tracker
|
154
|
-
test_files:
|
155
|
-
|
276
|
+
test_files: []
|
277
|
+
|