tempo-cli 0.1.0

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 (73) hide show
  1. data/.gitignore +4 -0
  2. data/Gemfile +4 -0
  3. data/Gemfile.lock +56 -0
  4. data/README.md +326 -0
  5. data/Rakefile +65 -0
  6. data/bin/tempo +477 -0
  7. data/features/arrange.feature +43 -0
  8. data/features/checkout.feature +63 -0
  9. data/features/end.feature +65 -0
  10. data/features/project.feature +246 -0
  11. data/features/report.feature +62 -0
  12. data/features/start.feature +87 -0
  13. data/features/step_definitions/tempo_steps.rb +138 -0
  14. data/features/support/env.rb +26 -0
  15. data/features/tempo.feature +13 -0
  16. data/features/update.feature +69 -0
  17. data/lib/file_record/directory.rb +11 -0
  18. data/lib/file_record/directory_structure/tempo/README.txt +4 -0
  19. data/lib/file_record/directory_structure/tempo/tempo_projects.yaml +6 -0
  20. data/lib/file_record/record.rb +120 -0
  21. data/lib/tempo/controllers/arrange_controller.rb +52 -0
  22. data/lib/tempo/controllers/base.rb +117 -0
  23. data/lib/tempo/controllers/checkout_controller.rb +42 -0
  24. data/lib/tempo/controllers/end_controller.rb +42 -0
  25. data/lib/tempo/controllers/projects_controller.rb +107 -0
  26. data/lib/tempo/controllers/records_controller.rb +21 -0
  27. data/lib/tempo/controllers/report_controller.rb +55 -0
  28. data/lib/tempo/controllers/start_controller.rb +42 -0
  29. data/lib/tempo/controllers/update_controller.rb +78 -0
  30. data/lib/tempo/models/base.rb +176 -0
  31. data/lib/tempo/models/composite.rb +71 -0
  32. data/lib/tempo/models/log.rb +194 -0
  33. data/lib/tempo/models/project.rb +73 -0
  34. data/lib/tempo/models/time_record.rb +235 -0
  35. data/lib/tempo/version.rb +3 -0
  36. data/lib/tempo/views/arrange_view.rb +27 -0
  37. data/lib/tempo/views/base.rb +82 -0
  38. data/lib/tempo/views/formatters/base.rb +30 -0
  39. data/lib/tempo/views/formatters/screen.rb +86 -0
  40. data/lib/tempo/views/projects_view.rb +82 -0
  41. data/lib/tempo/views/report_view.rb +26 -0
  42. data/lib/tempo/views/reporter.rb +70 -0
  43. data/lib/tempo/views/time_record_view.rb +30 -0
  44. data/lib/tempo/views/view_records/base.rb +117 -0
  45. data/lib/tempo/views/view_records/composite.rb +40 -0
  46. data/lib/tempo/views/view_records/log.rb +28 -0
  47. data/lib/tempo/views/view_records/project.rb +32 -0
  48. data/lib/tempo/views/view_records/time_record.rb +48 -0
  49. data/lib/tempo.rb +26 -0
  50. data/lib/time_utilities.rb +30 -0
  51. data/tempo-cli.gemspec +26 -0
  52. data/test/lib/file_record/directory_test.rb +30 -0
  53. data/test/lib/file_record/record_test.rb +106 -0
  54. data/test/lib/tempo/controllers/base_controller_test.rb +60 -0
  55. data/test/lib/tempo/controllers/project_controller_test.rb +24 -0
  56. data/test/lib/tempo/models/base_test.rb +173 -0
  57. data/test/lib/tempo/models/composite_test.rb +76 -0
  58. data/test/lib/tempo/models/log_test.rb +171 -0
  59. data/test/lib/tempo/models/project_test.rb +105 -0
  60. data/test/lib/tempo/models/time_record_test.rb +212 -0
  61. data/test/lib/tempo/views/base_test.rb +31 -0
  62. data/test/lib/tempo/views/formatters/base_test.rb +13 -0
  63. data/test/lib/tempo/views/formatters/screen_test.rb +94 -0
  64. data/test/lib/tempo/views/reporter_test.rb +40 -0
  65. data/test/lib/tempo/views/view_records/base_test.rb +77 -0
  66. data/test/lib/tempo/views/view_records/composite_test.rb +57 -0
  67. data/test/lib/tempo/views/view_records/log_test.rb +28 -0
  68. data/test/lib/tempo/views/view_records/project_test.rb +0 -0
  69. data/test/lib/tempo/views/view_records/time_record_test.rb +0 -0
  70. data/test/support/factories.rb +177 -0
  71. data/test/support/helpers.rb +69 -0
  72. data/test/test_helper.rb +31 -0
  73. metadata +230 -0
@@ -0,0 +1,177 @@
1
+ module Tempo
2
+ module Model
3
+ class Base
4
+ def self.clear_all()
5
+ @ids = []
6
+ @index = []
7
+ @id_counter = 1
8
+ end
9
+ end
10
+
11
+ class Animal < Tempo::Model::Base
12
+ attr_accessor :genious, :species
13
+
14
+ def initialize( options={} )
15
+ super options
16
+ @genious = options[:genious]
17
+ @species = options.fetch(:species, @genious)
18
+ end
19
+ end
20
+
21
+ class Tree < Tempo::Model::Composite
22
+ attr_accessor :position
23
+
24
+ def initialize( options={})
25
+ super options
26
+ @position = options[:position]
27
+ end
28
+ end
29
+
30
+ class Log
31
+ def self.clear_all()
32
+ @ids = {}
33
+ @index = []
34
+ @days_index = {}
35
+ @id_counter = {}
36
+ @current = nil
37
+ end
38
+ end
39
+
40
+ class MessageLog < Tempo::Model::Log
41
+ attr_accessor :message
42
+
43
+ def initialize( options={} )
44
+ super options
45
+ @message = options[:message]
46
+ end
47
+ end
48
+
49
+ end
50
+ end
51
+
52
+ def pantherinae_factory
53
+ Tempo::Model::Animal.clear_all
54
+ pantherinae = [ { genious: "Panthera", species: "p. tigris" },
55
+ { genious: "Panthera", species: "p. leo"},
56
+ { genious: "Panthera", species: "p. onca"},
57
+ { genious: "Panthera", species: "p. pardus"},
58
+ { genious: "Panthera", species: "p. zdanskyi"}]
59
+
60
+ pantherinae.each do |p|
61
+ Tempo::Model::Animal.new(p)
62
+ end
63
+ end
64
+
65
+ def frog_factory
66
+ Tempo::Model::Animal.clear_all
67
+ @gray_tree_frog = Tempo::Model::Animal.new( { genious: "hyla", species: "h. versicolor" } )
68
+ @copes_gray_tree_frog = Tempo::Model::Animal.new( { genious: "hyla", species: "h. chrysoscelis"})
69
+ @pine_barrens_tree_frog = Tempo::Model::Animal.new( { genious: "hyla", species: "h. andersonii", id: 4 } )
70
+ @bird_voiced_tree_frog = Tempo::Model::Animal.new( { genious: "hyla", species: "h. avivoca"} )
71
+ @chinese_tree_frog = Tempo::Model::Animal.new( { genious: "hyla", species: "h. chinensis"} )
72
+ end
73
+
74
+ def tree_factory
75
+ Tempo::Model::Tree.clear_all
76
+ @forest = []
77
+
78
+ trees = [{ position: "root1"},
79
+ { position: "root2"},
80
+ { position: "branch1"},
81
+ { position: "branch2"},
82
+ { position: "branch3"},
83
+ { position: "branch4"},
84
+ { position: "leaf1"},
85
+ { position: "leaf2"}]
86
+ trees.each do |t|
87
+ @forest << Tempo::Model::Tree.new(t)
88
+ end
89
+
90
+ @forest[0] << @forest[2]
91
+ @forest[2] << @forest[6]
92
+ @forest[2] << @forest[7]
93
+ @forest[1] << @forest[3]
94
+ @forest[1] << @forest[4]
95
+ @forest[4] << @forest[5]
96
+ end
97
+
98
+ def project_factory
99
+ Tempo::Model::Project.clear_all
100
+ @project_1 = Tempo::Model::Project.new title: 'sheep herding'
101
+ @project_2 = Tempo::Model::Project.new({ title: 'horticulture - basement mushrooms', tags: [ "fungi", "farming" ], current: true})
102
+ @project_3 = Tempo::Model::Project.new({ title: 'horticulture - backyard bonsai', tags: [ "trees", "farming", "miniaturization" ]})
103
+ @project_4 = Tempo::Model::Project.new title: 'gardening'
104
+ @project_4 << @project_2
105
+ @project_4 << @project_3
106
+ end
107
+
108
+ def log_factory
109
+ Tempo::Model::MessageLog.clear_all
110
+ @log_1 = Tempo::Model::MessageLog.new({ message: "day 1 pet the sheep", start_time: Time.new(2014, 1, 1, 7 ) })
111
+ @log_2 = Tempo::Model::MessageLog.new({ message: "day 1 drinking coffee, check on the mushrooms", start_time: Time.new(2014, 1, 1, 7, 30 ) })
112
+ @log_3 = Tempo::Model::MessageLog.new({ message: "day 1 water the bonsai", start_time: Time.new(2014, 1, 1, 12, 30 ) })
113
+
114
+ @log_4 = Tempo::Model::MessageLog.new({ message: "day 2 pet the sheep", start_time: Time.new(2014, 1, 2, 7, 15 ) })
115
+ @log_5 = Tempo::Model::MessageLog.new({ message: "day 2 drinking coffee, check on the mushrooms", start_time: Time.new(2014, 1, 2, 7, 45 ) })
116
+ @log_6 = Tempo::Model::MessageLog.new({ message: "day 2 water the bonsai", start_time: Time.new(2014, 1, 2, 12, 00 ) })
117
+ end
118
+
119
+ def save_record_to_file file, file_lines
120
+
121
+ File.open( file,'a' ) do |f|
122
+ file_lines.each do |l|
123
+ f.puts l
124
+ end
125
+ end
126
+ end
127
+
128
+ # For creating a file to load records from
129
+ def log_record_factory
130
+ Tempo::Model::MessageLog.clear_all
131
+ test_dir = File.join(ENV['HOME'],'tempo','tempo_message_logs')
132
+
133
+ FileUtils.rm_r test_dir if File.exists?(test_dir)
134
+ Dir.mkdir(test_dir, 0700) unless File.exists?(test_dir)
135
+ file_lines = ["---", ":start_time: 2014-01-01 07:15:00.000000000 -05:00",
136
+ ":id: 1", ":message: day 1 pet the sheep",
137
+ "---", ":start_time: 2014-01-01 07:45:00.000000000 -05:00",
138
+ ":id: 2", ":message: day 1 drinking coffee, check on the mushrooms",
139
+ "---", ":start_time: 2014-01-01 17:00:00.000000000 -05:00",
140
+ ":id: 3", ":message: day 1 water the bonsai"]
141
+ test_file = File.join(test_dir, "20140101.yaml")
142
+ save_record_to_file test_file, file_lines
143
+
144
+ file_lines = ["---", ":start_time: 2014-01-02 08:15:00.000000000 -05:00",
145
+ ":id: 1", ":message: day 2 pet the sheep",
146
+ "---", ":start_time: 2014-01-02 08:45:00.000000000 -05:00",
147
+ ":id: 2", ":message: day 2 drinking coffee, check on the mushrooms",
148
+ "---", ":start_time: 2014-01-02 13:00:00.000000000 -05:00",
149
+ ":id: 3", ":message: day 2 water the bonsai"]
150
+ test_file = File.join(test_dir, "20140102.yaml")
151
+ save_record_to_file test_file, file_lines
152
+ end
153
+
154
+ def time_record_factory
155
+ project_factory
156
+ Tempo::Model::TimeRecord.clear_all
157
+ @record_1 = Tempo::Model::TimeRecord.new({ project: @project_1, description: "day 1 pet the sheep", start_time: Time.new(2014, 1, 1, 7 ) })
158
+ @record_2 = Tempo::Model::TimeRecord.new({ project: @project_2, description: "day 1 drinking coffee, check on the mushrooms", start_time: Time.new(2014, 1, 1, 7, 30 ) })
159
+ @record_3 = Tempo::Model::TimeRecord.new({ project: @project_3,description: "day 1 water the bonsai", start_time: Time.new(2014, 1, 1, 17, 30 ), tags: ["horticulture", "trees"] })
160
+
161
+ @record_4 = Tempo::Model::TimeRecord.new({ project: @project_1, description: "day 2 pet the sheep", start_time: Time.new(2014, 1, 2, 7, 15 ) })
162
+ @record_5 = Tempo::Model::TimeRecord.new({ project: @project_2, description: "day 2 drinking coffee, check on the mushrooms", start_time: Time.new(2014, 1, 2, 7, 45 ) })
163
+ @record_6 = Tempo::Model::TimeRecord.new({ project: @project_3, description: "day 2 water the bonsai", start_time: Time.new(2014, 1, 2, 17, 00 ) })
164
+ end
165
+
166
+ def view_records_factory
167
+ time_record_factory
168
+ @message_1 = Tempo::Views::ViewRecords::Message.new "All The Things I Did", class: :title
169
+ @message_2 = Tempo::Views::ViewRecords::Message.new "on a busy busy day", class: :title
170
+ @error = Tempo::Views::ViewRecords::Message.new "raising an error", category: :error
171
+ @duration = Tempo::Views::ViewRecords::Duration.new 9600 # 2 hours and 40 minutes
172
+ @project_1 = Tempo::Views::ViewRecords::Project.new @project_1
173
+ @project_2 = Tempo::Views::ViewRecords::Project.new @project_2
174
+ @time_record_1 = Tempo::Views::ViewRecords::TimeRecord.new @record_1
175
+ @time_record_6 = Tempo::Views::ViewRecords::TimeRecord.new @record_6
176
+ #@records = [@message, @project, @time_record]
177
+ end
@@ -0,0 +1,69 @@
1
+ def eval_file_as_array( file )
2
+ contents = []
3
+ File.open(file, "r") do |f|
4
+ f.readlines.each do |line|
5
+ contents << line.chomp
6
+ end
7
+ end
8
+ contents
9
+ end
10
+
11
+ def has_attr_reader?(obj, attribute)
12
+ obj.class.instance_methods(false).include?(attribute)
13
+ end
14
+
15
+ def has_attr_writer?(obj, attribute)
16
+ attribute_writer = ( attribute.to_s + "=" ).to_sym
17
+ is_writable = obj.class.instance_methods(false).include?(attribute_writer)
18
+ end
19
+
20
+ def has_attr_accessor?( obj, attribute)
21
+ has_attr_reader?(obj, attribute) && has_attr_writer?(obj, attribute)
22
+ end
23
+
24
+ def has_attr_read_only?( obj, attribute)
25
+ has_attr_reader?(obj, attribute) && !has_attr_writer?(obj, attribute)
26
+ end
27
+
28
+ def inherits_attr_reader?(obj, attribute)
29
+ obj.class.instance_methods(true).include?(attribute)
30
+ end
31
+
32
+ def inherits_attr_writer?(obj, attribute)
33
+ attribute_writer = ( attribute.to_s + "=" ).to_sym
34
+ is_writable = obj.class.instance_methods(false).include?(attribute_writer)
35
+ end
36
+
37
+ def inherits_attr_read_only?( obj, attribute)
38
+ inherits_attr_reader?(obj, attribute) && !inherits_attr_writer?(obj, attribute)
39
+ end
40
+
41
+ # Test output resulting from any puts method
42
+ # Used to test the view formatter output.
43
+ #
44
+ # http://thinkingdigitally.com/archive/capturing-output-from-puts-in-ruby/
45
+ #
46
+ require 'stringio'
47
+
48
+ module Kernel
49
+
50
+ def capture_stdout
51
+ out = StringIO.new
52
+ $stdout = out
53
+ yield
54
+ return out
55
+ ensure
56
+ $stdout = STDOUT
57
+ end
58
+ end
59
+
60
+ # Alter reporter to clear cash from previous tests
61
+ module Tempo
62
+ module Views
63
+ class Reporter
64
+ def self.clear_records
65
+ @@view_records = []
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,31 @@
1
+ require 'minitest/spec'
2
+ require 'minitest/autorun'
3
+
4
+ # Use turn gem, if installed
5
+ begin
6
+ require 'turn/autorun'
7
+ Turn.config do |c|
8
+ # use one of output formats:
9
+ # :outline - turn's original case/test outline mode [default]
10
+ # :progress - indicates progress with progress bar
11
+ # :dotted - test/unit's traditional dot-progress mode
12
+ # :pretty - new pretty reporter
13
+ # :marshal - dump output as YAML (normal run mode only)
14
+ # :cue - interactive testing
15
+ c.format = :outline
16
+ # turn on invoke/execute tracing, enable full backtrace
17
+ c.trace = false
18
+ # use humanized test names (works only with :outline format)
19
+ c.natural = true
20
+ end
21
+ rescue LoadError
22
+ end
23
+
24
+ $LOAD_PATH << File.dirname(__FILE__)
25
+
26
+ require "./lib/tempo.rb"
27
+ require "support/helpers"
28
+ require "support/factories"
29
+
30
+ # to run a single test file, load the path:
31
+ # bundle exec rake test TEST=test/lib/tempo/models/time_record_test.rb
metadata ADDED
@@ -0,0 +1,230 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tempo-cli
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jonathan Gabel
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-11-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rdoc
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: aruba
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: turn
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 0.9.6
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 0.9.6
78
+ - !ruby/object:Gem::Dependency
79
+ name: pry
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 0.9.12.2
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 0.9.12.2
94
+ - !ruby/object:Gem::Dependency
95
+ name: gli
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - '='
100
+ - !ruby/object:Gem::Version
101
+ version: 2.6.1
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - '='
108
+ - !ruby/object:Gem::Version
109
+ version: 2.6.1
110
+ - !ruby/object:Gem::Dependency
111
+ name: chronic
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 0.10.2
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 0.10.2
126
+ description: Record and report time spent by project
127
+ email: hello@jonathangabel.com
128
+ executables:
129
+ - tempo
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - .gitignore
134
+ - Gemfile
135
+ - Gemfile.lock
136
+ - README.md
137
+ - Rakefile
138
+ - bin/tempo
139
+ - features/arrange.feature
140
+ - features/checkout.feature
141
+ - features/end.feature
142
+ - features/project.feature
143
+ - features/report.feature
144
+ - features/start.feature
145
+ - features/step_definitions/tempo_steps.rb
146
+ - features/support/env.rb
147
+ - features/tempo.feature
148
+ - features/update.feature
149
+ - lib/file_record/directory.rb
150
+ - lib/file_record/directory_structure/tempo/README.txt
151
+ - lib/file_record/directory_structure/tempo/tempo_projects.yaml
152
+ - lib/file_record/record.rb
153
+ - lib/tempo.rb
154
+ - lib/tempo/controllers/arrange_controller.rb
155
+ - lib/tempo/controllers/base.rb
156
+ - lib/tempo/controllers/checkout_controller.rb
157
+ - lib/tempo/controllers/end_controller.rb
158
+ - lib/tempo/controllers/projects_controller.rb
159
+ - lib/tempo/controllers/records_controller.rb
160
+ - lib/tempo/controllers/report_controller.rb
161
+ - lib/tempo/controllers/start_controller.rb
162
+ - lib/tempo/controllers/update_controller.rb
163
+ - lib/tempo/models/base.rb
164
+ - lib/tempo/models/composite.rb
165
+ - lib/tempo/models/log.rb
166
+ - lib/tempo/models/project.rb
167
+ - lib/tempo/models/time_record.rb
168
+ - lib/tempo/version.rb
169
+ - lib/tempo/views/arrange_view.rb
170
+ - lib/tempo/views/base.rb
171
+ - lib/tempo/views/formatters/base.rb
172
+ - lib/tempo/views/formatters/screen.rb
173
+ - lib/tempo/views/projects_view.rb
174
+ - lib/tempo/views/report_view.rb
175
+ - lib/tempo/views/reporter.rb
176
+ - lib/tempo/views/time_record_view.rb
177
+ - lib/tempo/views/view_records/base.rb
178
+ - lib/tempo/views/view_records/composite.rb
179
+ - lib/tempo/views/view_records/log.rb
180
+ - lib/tempo/views/view_records/project.rb
181
+ - lib/tempo/views/view_records/time_record.rb
182
+ - lib/time_utilities.rb
183
+ - tempo-cli.gemspec
184
+ - test/lib/file_record/directory_test.rb
185
+ - test/lib/file_record/record_test.rb
186
+ - test/lib/tempo/controllers/base_controller_test.rb
187
+ - test/lib/tempo/controllers/project_controller_test.rb
188
+ - test/lib/tempo/models/base_test.rb
189
+ - test/lib/tempo/models/composite_test.rb
190
+ - test/lib/tempo/models/log_test.rb
191
+ - test/lib/tempo/models/project_test.rb
192
+ - test/lib/tempo/models/time_record_test.rb
193
+ - test/lib/tempo/views/base_test.rb
194
+ - test/lib/tempo/views/formatters/base_test.rb
195
+ - test/lib/tempo/views/formatters/screen_test.rb
196
+ - test/lib/tempo/views/reporter_test.rb
197
+ - test/lib/tempo/views/view_records/base_test.rb
198
+ - test/lib/tempo/views/view_records/composite_test.rb
199
+ - test/lib/tempo/views/view_records/log_test.rb
200
+ - test/lib/tempo/views/view_records/project_test.rb
201
+ - test/lib/tempo/views/view_records/time_record_test.rb
202
+ - test/support/factories.rb
203
+ - test/support/helpers.rb
204
+ - test/test_helper.rb
205
+ homepage: http://jonathangabel.com
206
+ licenses: []
207
+ post_install_message:
208
+ rdoc_options: []
209
+ require_paths:
210
+ - lib
211
+ - lib
212
+ required_ruby_version: !ruby/object:Gem::Requirement
213
+ none: false
214
+ requirements:
215
+ - - ! '>='
216
+ - !ruby/object:Gem::Version
217
+ version: '0'
218
+ required_rubygems_version: !ruby/object:Gem::Requirement
219
+ none: false
220
+ requirements:
221
+ - - ! '>='
222
+ - !ruby/object:Gem::Version
223
+ version: '0'
224
+ requirements: []
225
+ rubyforge_project:
226
+ rubygems_version: 1.8.23
227
+ signing_key:
228
+ specification_version: 3
229
+ summary: A command line time tracker for recording by day or by project
230
+ test_files: []