tempo-cli 0.1.6 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|