tempo-cli 0.1.6 → 0.2.1
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.
- checksums.yaml +7 -0
- data/Gemfile.lock +3 -3
- data/README.md +9 -3
- data/bin/tempo +20 -2
- data/features/arrange.feature +1 -1
- data/features/directory.feature +108 -0
- data/features/project.feature +2 -2
- data/features/report.feature +3 -2
- data/features/start.feature +0 -1
- data/features/step_definitions/tempo_steps.rb +99 -20
- data/features/update.feature +7 -1
- data/lib/file_record/directory.rb +19 -3
- data/lib/file_record/file_utility.rb +122 -0
- data/lib/file_record/record.rb +36 -83
- data/lib/tempo/controllers/arrange_controller.rb +5 -5
- data/lib/tempo/controllers/base.rb +8 -8
- data/lib/tempo/controllers/checkout_controller.rb +4 -4
- data/lib/tempo/controllers/end_controller.rb +4 -5
- data/lib/tempo/controllers/projects_controller.rb +13 -10
- data/lib/tempo/controllers/records_controller.rb +8 -5
- data/lib/tempo/controllers/report_controller.rb +4 -4
- data/lib/tempo/controllers/start_controller.rb +4 -3
- data/lib/tempo/controllers/update_controller.rb +22 -8
- data/lib/tempo/exceptions.rb +2 -2
- data/lib/tempo/models/base.rb +26 -18
- data/lib/tempo/models/composite.rb +5 -3
- data/lib/tempo/models/log.rb +61 -38
- data/lib/tempo/models/project.rb +9 -6
- data/lib/tempo/models/time_record.rb +14 -14
- data/lib/tempo/version.rb +1 -1
- data/lib/tempo/views/arrange_view.rb +4 -4
- data/lib/tempo/views/base.rb +10 -23
- data/lib/tempo/views/formatters/base.rb +2 -2
- data/lib/tempo/views/formatters/screen.rb +7 -7
- data/lib/tempo/views/projects_view.rb +8 -8
- data/lib/tempo/views/report_view.rb +5 -5
- data/lib/tempo/views/reporter.rb +4 -4
- data/lib/tempo/views/time_record_view.rb +5 -5
- data/lib/tempo/views/view_records/base.rb +8 -8
- data/lib/tempo/views/view_records/composite.rb +4 -4
- data/lib/tempo/views/view_records/log.rb +3 -3
- data/lib/tempo/views/view_records/project.rb +3 -3
- data/lib/tempo/views/view_records/time_record.rb +5 -5
- data/lib/tempo.rb +3 -0
- data/lib/time_utilities.rb +4 -4
- data/tempo-cli.gemspec +8 -7
- data/test/lib/file_record/directory_test.rb +14 -1
- data/test/lib/file_record/record_test.rb +40 -75
- data/test/lib/tempo/models/base_test.rb +2 -2
- data/test/lib/tempo/models/composite_test.rb +9 -9
- data/test/lib/tempo/models/log_test.rb +31 -16
- data/test/lib/tempo/models/time_record_test.rb +29 -19
- data/test/support/factories.rb +5 -0
- data/test/support/helpers.rb +7 -7
- metadata +40 -53
@@ -17,11 +17,12 @@ describe Tempo do
|
|
17
17
|
it "inherits the freeze-dry method" do
|
18
18
|
log_factory
|
19
19
|
frozen = @log_4.freeze_dry
|
20
|
+
binding.pry if @log_4.id != 1
|
20
21
|
frozen.must_equal({ :start_time=>Time.new(2014, 01, 02, 07, 15),
|
21
22
|
:id=>1, :message=>"day 2 pet the sheep"})
|
22
23
|
end
|
23
24
|
|
24
|
-
it "inherits the
|
25
|
+
it "inherits the base indexing method" do
|
25
26
|
log_factory
|
26
27
|
Tempo::Model::MessageLog.index.length.must_equal 6
|
27
28
|
end
|
@@ -33,7 +34,12 @@ describe Tempo do
|
|
33
34
|
Tempo::Model::MessageLog.days_index[:"20140102"].length.must_equal 3
|
34
35
|
end
|
35
36
|
|
36
|
-
it "
|
37
|
+
it "knows which directory to save to" do
|
38
|
+
log_factory
|
39
|
+
Tempo::Model::MessageLog.dir.must_equal "tempo_message_logs"
|
40
|
+
end
|
41
|
+
|
42
|
+
it "knows which file name to save to" do
|
37
43
|
log_factory
|
38
44
|
date = Time.new(2014,1,1)
|
39
45
|
Tempo::Model::MessageLog.file(date).must_equal "20140101.yaml"
|
@@ -42,25 +48,34 @@ describe Tempo do
|
|
42
48
|
it "grants children the ability to write to a file" do
|
43
49
|
log_factory
|
44
50
|
test_dir = File.join(ENV['HOME'],'tempo','tempo_message_logs')
|
45
|
-
|
51
|
+
FileUtils.rm_r test_dir if File.exists?(test_dir)
|
46
52
|
Tempo::Model::MessageLog.save_to_file
|
47
53
|
test_file_1 = File.join(test_dir, "20140101.yaml")
|
48
54
|
test_file_2 = File.join(test_dir, "20140102.yaml")
|
49
55
|
contents = eval_file_as_array( test_file_1 )
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
+
# testing with regex because time zone will be different on different computers,
|
57
|
+
# ex: ":start_time: 2014-01-02 07:15:00.000000000 -05:00"
|
58
|
+
eval = [ /---/, /:start_time: 2014-01-01 07:00:00.000000000/,
|
59
|
+
/:id: 1/, /:message: day 1 pet the sheep/,
|
60
|
+
/---/, /:start_time: 2014-01-01 07:30:00.000000000/,
|
61
|
+
/:id: 2/, /:message: day 1 drinking coffee, check on the mushrooms/,
|
62
|
+
/---/, /:start_time: 2014-01-01 12:30:00.000000000/,
|
63
|
+
/:id: 3/, /:message: day 1 water the bonsai/]
|
64
|
+
contents.each_with_index do |c, i|
|
65
|
+
c.must_match eval[i]
|
66
|
+
end
|
67
|
+
|
56
68
|
contents = eval_file_as_array( test_file_2 )
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
69
|
+
eval = [ /---/, /:start_time: 2014-01-02 07:15:00.000000000/,
|
70
|
+
/:id: 1/, /:message: day 2 pet the sheep/,
|
71
|
+
/---/, /:start_time: 2014-01-02 07:45:00.000000000/,
|
72
|
+
/:id: 2/, /:message: day 2 drinking coffee, check on the mushrooms/,
|
73
|
+
/---/, /:start_time: 2014-01-02 12:00:00.000000000/,
|
74
|
+
/:id: 3/, /:message: day 2 water the bonsai/]
|
75
|
+
contents.each_with_index do |c, i|
|
76
|
+
c.must_match eval[i]
|
77
|
+
end
|
78
|
+
end
|
64
79
|
|
65
80
|
it "grants children ability to read from a file" do
|
66
81
|
log_record_factory
|
@@ -265,26 +265,36 @@ describe Tempo do
|
|
265
265
|
test_file_1 = File.join(ENV['HOME'],'tempo/tempo_time_records/20140101.yaml')
|
266
266
|
test_file_2 = File.join(ENV['HOME'],'tempo/tempo_time_records/20140102.yaml')
|
267
267
|
contents = eval_file_as_array( test_file_1 )
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
268
|
+
|
269
|
+
# testing with regex because time zone will be different on different computers,
|
270
|
+
# ex: ":start_time: 2014-01-02 07:15:00.000000000 -05:00"
|
271
|
+
eval = [ /---/, /:project_title: sheep herding/, /:description: day 1 pet the sheep/,
|
272
|
+
/:start_time: 2014-01-01 07:00:00.000000000/, /:end_time: 2014-01-01 07:30:00.000000000/,
|
273
|
+
/:id: 1/, /:project: 1/, /:tags: \[\]/,
|
274
|
+
/---/, /:project_title: horticulture - basement mushrooms/, /:description: day 1 drinking coffee, check on the mushrooms/,
|
275
|
+
/:start_time: 2014-01-01 07:30:00.000000000/, /:end_time: 2014-01-01 17:30:00.000000000/,
|
276
|
+
/:id: 2/, /:project: 2/, /:tags: \[\]/,
|
277
|
+
/---/, /:project_title: horticulture - backyard bonsai/, /:description: day 1 water the bonsai/,
|
278
|
+
/:start_time: 2014-01-01 17:30:00.000000000/, /:end_time: 2014-01-01 23:59:00.000000000/,
|
279
|
+
/:id: 3/, /:project: 3/, /:tags:/, /- horticulture/, /- trees/ ]
|
280
|
+
contents.each_with_index do |c, i|
|
281
|
+
c.must_match eval[i]
|
282
|
+
end
|
283
|
+
|
277
284
|
contents = eval_file_as_array( test_file_2 )
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
285
|
+
eval = [/---/, /:project_title: sheep herding/, /:description: day 2 pet the sheep/,
|
286
|
+
/:start_time: 2014-01-02 07:15:00.000000000/, /:end_time: 2014-01-02 07:45:00.000000000/,
|
287
|
+
/:id: 1/, /:project: 1/, /:tags: \[\]/,
|
288
|
+
/---/, /:project_title: horticulture - basement mushrooms/, /:description: day 2 drinking coffee, check on the mushrooms/,
|
289
|
+
/:start_time: 2014-01-02 07:45:00.000000000/, /:end_time: 2014-01-02 17:00:00.000000000/,
|
290
|
+
/:id: 2/, /:project: 2/, /:tags: \[\]/,
|
291
|
+
/---/, /:project_title: horticulture - backyard bonsai/, /:description: day 2 water the bonsai/,
|
292
|
+
/:start_time: 2014-01-02 17:00:00.000000000/, /:end_time: :running/,
|
293
|
+
/:id: 3/, /:project: 3/, /:tags: \[\]/]
|
294
|
+
|
295
|
+
contents.each_with_index do |c, i|
|
296
|
+
c.must_match eval[i]
|
297
|
+
end
|
288
298
|
end
|
289
299
|
end
|
290
300
|
end
|
data/test/support/factories.rb
CHANGED
@@ -106,6 +106,11 @@ def project_factory
|
|
106
106
|
end
|
107
107
|
|
108
108
|
def log_factory
|
109
|
+
|
110
|
+
# delete all records so they aren't loaded when new logs are created
|
111
|
+
test_dir = File.join(ENV['HOME'],'tempo','tempo_message_logs')
|
112
|
+
FileUtils.rm_r test_dir if File.exists?(test_dir)
|
113
|
+
|
109
114
|
Tempo::Model::MessageLog.clear_all
|
110
115
|
@log_1 = Tempo::Model::MessageLog.new({ message: "day 1 pet the sheep", start_time: Time.new(2014, 1, 1, 7 ) })
|
111
116
|
@log_2 = Tempo::Model::MessageLog.new({ message: "day 1 drinking coffee, check on the mushrooms", start_time: Time.new(2014, 1, 1, 7, 30 ) })
|
data/test/support/helpers.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
def eval_file_as_array(
|
1
|
+
def eval_file_as_array(file)
|
2
2
|
contents = []
|
3
3
|
File.open(file, "r") do |f|
|
4
4
|
f.readlines.each do |line|
|
@@ -13,15 +13,15 @@ def has_attr_reader?(obj, attribute)
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def has_attr_writer?(obj, attribute)
|
16
|
-
attribute_writer = (
|
16
|
+
attribute_writer = (attribute.to_s + "=").to_sym
|
17
17
|
is_writable = obj.class.instance_methods(false).include?(attribute_writer)
|
18
18
|
end
|
19
19
|
|
20
|
-
def has_attr_accessor?(
|
20
|
+
def has_attr_accessor?(obj, attribute)
|
21
21
|
has_attr_reader?(obj, attribute) && has_attr_writer?(obj, attribute)
|
22
22
|
end
|
23
23
|
|
24
|
-
def has_attr_read_only?(
|
24
|
+
def has_attr_read_only?(obj, attribute)
|
25
25
|
has_attr_reader?(obj, attribute) && !has_attr_writer?(obj, attribute)
|
26
26
|
end
|
27
27
|
|
@@ -30,11 +30,11 @@ def inherits_attr_reader?(obj, attribute)
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def inherits_attr_writer?(obj, attribute)
|
33
|
-
attribute_writer = (
|
33
|
+
attribute_writer = (attribute.to_s + "=").to_sym
|
34
34
|
is_writable = obj.class.instance_methods(false).include?(attribute_writer)
|
35
35
|
end
|
36
36
|
|
37
|
-
def inherits_attr_read_only?(
|
37
|
+
def inherits_attr_read_only?(obj, attribute)
|
38
38
|
inherits_attr_reader?(obj, attribute) && !inherits_attr_writer?(obj, attribute)
|
39
39
|
end
|
40
40
|
|
@@ -66,4 +66,4 @@ module Tempo
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
end
|
69
|
-
end
|
69
|
+
end
|
metadata
CHANGED
@@ -1,128 +1,113 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tempo-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Jonathan Gabel
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-06-09 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rake
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: '
|
19
|
+
version: '10.3'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
26
|
+
version: '10.3'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rdoc
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - "~>"
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version: '
|
33
|
+
version: '4.1'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - "~>"
|
44
39
|
- !ruby/object:Gem::Version
|
45
|
-
version: '
|
40
|
+
version: '4.1'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: aruba
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version: '0'
|
47
|
+
version: '0.5'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - "~>"
|
60
53
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
54
|
+
version: '0.5'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: turn
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- - ~>
|
59
|
+
- - "~>"
|
68
60
|
- !ruby/object:Gem::Version
|
69
|
-
version: 0.9
|
61
|
+
version: '0.9'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- - ~>
|
66
|
+
- - "~>"
|
76
67
|
- !ruby/object:Gem::Version
|
77
|
-
version: 0.9
|
68
|
+
version: '0.9'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: pry
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- - ~>
|
73
|
+
- - "~>"
|
84
74
|
- !ruby/object:Gem::Version
|
85
|
-
version: 0.9
|
75
|
+
version: '0.9'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- - ~>
|
80
|
+
- - "~>"
|
92
81
|
- !ruby/object:Gem::Version
|
93
|
-
version: 0.9
|
82
|
+
version: '0.9'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: gli
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - "~>"
|
100
88
|
- !ruby/object:Gem::Version
|
101
|
-
version: 2.
|
89
|
+
version: '2.10'
|
102
90
|
type: :runtime
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - "~>"
|
108
95
|
- !ruby/object:Gem::Version
|
109
|
-
version: 2.
|
96
|
+
version: '2.10'
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: chronic
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
|
-
- - ~>
|
101
|
+
- - "~>"
|
116
102
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.10
|
103
|
+
version: '0.10'
|
118
104
|
type: :runtime
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
|
-
- - ~>
|
108
|
+
- - "~>"
|
124
109
|
- !ruby/object:Gem::Version
|
125
|
-
version: 0.10
|
110
|
+
version: '0.10'
|
126
111
|
description: tempo-cli is a command line time tracking application. Record time spent
|
127
112
|
on projects in YAML files, and manage them from the command line.
|
128
113
|
email: hello@jonathangabel.com
|
@@ -131,7 +116,7 @@ executables:
|
|
131
116
|
extensions: []
|
132
117
|
extra_rdoc_files: []
|
133
118
|
files:
|
134
|
-
- .gitignore
|
119
|
+
- ".gitignore"
|
135
120
|
- Gemfile
|
136
121
|
- Gemfile.lock
|
137
122
|
- README.md
|
@@ -139,6 +124,7 @@ files:
|
|
139
124
|
- bin/tempo
|
140
125
|
- features/arrange.feature
|
141
126
|
- features/checkout.feature
|
127
|
+
- features/directory.feature
|
142
128
|
- features/end.feature
|
143
129
|
- features/project.feature
|
144
130
|
- features/report.feature
|
@@ -150,6 +136,7 @@ files:
|
|
150
136
|
- lib/file_record/directory.rb
|
151
137
|
- lib/file_record/directory_structure/tempo/README.txt
|
152
138
|
- lib/file_record/directory_structure/tempo/tempo_projects.yaml
|
139
|
+
- lib/file_record/file_utility.rb
|
153
140
|
- lib/file_record/record.rb
|
154
141
|
- lib/tempo.rb
|
155
142
|
- lib/tempo/controllers/arrange_controller.rb
|
@@ -206,28 +193,28 @@ files:
|
|
206
193
|
- test/support/helpers.rb
|
207
194
|
- test/test_helper.rb
|
208
195
|
homepage: https://github.com/josankapo/tempo-cli
|
209
|
-
licenses:
|
196
|
+
licenses:
|
197
|
+
- MIT
|
198
|
+
metadata: {}
|
210
199
|
post_install_message:
|
211
200
|
rdoc_options: []
|
212
201
|
require_paths:
|
213
202
|
- lib
|
214
203
|
- lib
|
215
204
|
required_ruby_version: !ruby/object:Gem::Requirement
|
216
|
-
none: false
|
217
205
|
requirements:
|
218
|
-
- -
|
206
|
+
- - ">="
|
219
207
|
- !ruby/object:Gem::Version
|
220
208
|
version: '0'
|
221
209
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
222
|
-
none: false
|
223
210
|
requirements:
|
224
|
-
- -
|
211
|
+
- - ">="
|
225
212
|
- !ruby/object:Gem::Version
|
226
213
|
version: '0'
|
227
214
|
requirements: []
|
228
215
|
rubyforge_project:
|
229
|
-
rubygems_version:
|
216
|
+
rubygems_version: 2.2.2
|
230
217
|
signing_key:
|
231
|
-
specification_version:
|
218
|
+
specification_version: 4
|
232
219
|
summary: A command line time tracker for recording by day and by project
|
233
220
|
test_files: []
|