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.
Files changed (55) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile.lock +3 -3
  3. data/README.md +9 -3
  4. data/bin/tempo +20 -2
  5. data/features/arrange.feature +1 -1
  6. data/features/directory.feature +108 -0
  7. data/features/project.feature +2 -2
  8. data/features/report.feature +3 -2
  9. data/features/start.feature +0 -1
  10. data/features/step_definitions/tempo_steps.rb +99 -20
  11. data/features/update.feature +7 -1
  12. data/lib/file_record/directory.rb +19 -3
  13. data/lib/file_record/file_utility.rb +122 -0
  14. data/lib/file_record/record.rb +36 -83
  15. data/lib/tempo/controllers/arrange_controller.rb +5 -5
  16. data/lib/tempo/controllers/base.rb +8 -8
  17. data/lib/tempo/controllers/checkout_controller.rb +4 -4
  18. data/lib/tempo/controllers/end_controller.rb +4 -5
  19. data/lib/tempo/controllers/projects_controller.rb +13 -10
  20. data/lib/tempo/controllers/records_controller.rb +8 -5
  21. data/lib/tempo/controllers/report_controller.rb +4 -4
  22. data/lib/tempo/controllers/start_controller.rb +4 -3
  23. data/lib/tempo/controllers/update_controller.rb +22 -8
  24. data/lib/tempo/exceptions.rb +2 -2
  25. data/lib/tempo/models/base.rb +26 -18
  26. data/lib/tempo/models/composite.rb +5 -3
  27. data/lib/tempo/models/log.rb +61 -38
  28. data/lib/tempo/models/project.rb +9 -6
  29. data/lib/tempo/models/time_record.rb +14 -14
  30. data/lib/tempo/version.rb +1 -1
  31. data/lib/tempo/views/arrange_view.rb +4 -4
  32. data/lib/tempo/views/base.rb +10 -23
  33. data/lib/tempo/views/formatters/base.rb +2 -2
  34. data/lib/tempo/views/formatters/screen.rb +7 -7
  35. data/lib/tempo/views/projects_view.rb +8 -8
  36. data/lib/tempo/views/report_view.rb +5 -5
  37. data/lib/tempo/views/reporter.rb +4 -4
  38. data/lib/tempo/views/time_record_view.rb +5 -5
  39. data/lib/tempo/views/view_records/base.rb +8 -8
  40. data/lib/tempo/views/view_records/composite.rb +4 -4
  41. data/lib/tempo/views/view_records/log.rb +3 -3
  42. data/lib/tempo/views/view_records/project.rb +3 -3
  43. data/lib/tempo/views/view_records/time_record.rb +5 -5
  44. data/lib/tempo.rb +3 -0
  45. data/lib/time_utilities.rb +4 -4
  46. data/tempo-cli.gemspec +8 -7
  47. data/test/lib/file_record/directory_test.rb +14 -1
  48. data/test/lib/file_record/record_test.rb +40 -75
  49. data/test/lib/tempo/models/base_test.rb +2 -2
  50. data/test/lib/tempo/models/composite_test.rb +9 -9
  51. data/test/lib/tempo/models/log_test.rb +31 -16
  52. data/test/lib/tempo/models/time_record_test.rb +29 -19
  53. data/test/support/factories.rb +5 -0
  54. data/test/support/helpers.rb +7 -7
  55. 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 same indexing method" do
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 "creates a file name to save to" do
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
- # FileUtils.rm_r test_dir if File.exists?(test_dir)
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
- contents.must_equal [ "---", ":start_time: 2014-01-01 07:00:00.000000000 -05:00",
51
- ":id: 1", ":message: day 1 pet the sheep",
52
- "---", ":start_time: 2014-01-01 07:30:00.000000000 -05:00",
53
- ":id: 2", ":message: day 1 drinking coffee, check on the mushrooms",
54
- "---", ":start_time: 2014-01-01 12:30:00.000000000 -05:00",
55
- ":id: 3", ":message: day 1 water the bonsai"]
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
- contents.must_equal [ "---", ":start_time: 2014-01-02 07:15:00.000000000 -05:00",
58
- ":id: 1", ":message: day 2 pet the sheep",
59
- "---", ":start_time: 2014-01-02 07:45:00.000000000 -05:00",
60
- ":id: 2", ":message: day 2 drinking coffee, check on the mushrooms",
61
- "---", ":start_time: 2014-01-02 12:00:00.000000000 -05:00",
62
- ":id: 3", ":message: day 2 water the bonsai"]
63
- end
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
- contents.must_equal [ "---", ":project_title: sheep herding", ":description: day 1 pet the sheep",
269
- ":start_time: 2014-01-01 07:00:00.000000000 -05:00", ":end_time: 2014-01-01 07:30:00.000000000 -05:00",
270
- ":id: 1", ":project: 1", ":tags: []",
271
- "---", ":project_title: horticulture - basement mushrooms", ":description: day 1 drinking coffee, check on the mushrooms",
272
- ":start_time: 2014-01-01 07:30:00.000000000 -05:00", ":end_time: 2014-01-01 17:30:00.000000000 -05:00",
273
- ":id: 2", ":project: 2", ":tags: []",
274
- "---", ":project_title: horticulture - backyard bonsai", ":description: day 1 water the bonsai",
275
- ":start_time: 2014-01-01 17:30:00.000000000 -05:00", ":end_time: 2014-01-01 23:59:00.000000000 -05:00",
276
- ":id: 3", ":project: 3", ":tags:", "- horticulture", "- trees"]
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
- # TODO: test this one too when stable
279
- contents.must_equal ["---", ":project_title: sheep herding", ":description: day 2 pet the sheep",
280
- ":start_time: 2014-01-02 07:15:00.000000000 -05:00", ":end_time: 2014-01-02 07:45:00.000000000 -05:00",
281
- ":id: 1", ":project: 1", ":tags: []",
282
- "---", ":project_title: horticulture - basement mushrooms", ":description: day 2 drinking coffee, check on the mushrooms",
283
- ":start_time: 2014-01-02 07:45:00.000000000 -05:00", ":end_time: 2014-01-02 17:00:00.000000000 -05:00",
284
- ":id: 2", ":project: 2", ":tags: []",
285
- "---", ":project_title: horticulture - backyard bonsai", ":description: day 2 water the bonsai",
286
- ":start_time: 2014-01-02 17:00:00.000000000 -05:00", ":end_time: :running",
287
- ":id: 3", ":project: 3", ":tags: []"]
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
@@ -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 ) })
@@ -1,4 +1,4 @@
1
- def eval_file_as_array( file )
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 = ( attribute.to_s + "=" ).to_sym
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?( obj, attribute)
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?( obj, attribute)
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 = ( attribute.to_s + "=" ).to_sym
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?( obj, attribute)
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.6
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: 2013-12-15 00:00:00.000000000 Z
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: '0'
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: '0'
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: '0'
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: '0'
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.6
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.6
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.12.2
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.12.2
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.6.1
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.6.1
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.2
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.2
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: 1.8.23
216
+ rubygems_version: 2.2.2
230
217
  signing_key:
231
- specification_version: 3
218
+ specification_version: 4
232
219
  summary: A command line time tracker for recording by day and by project
233
220
  test_files: []