tlog 0.2.0 → 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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MWY4Y2M1ZmFlOGRmOTUzMzVjMDY0MmZiZTIyMzAyOTAzYjY3ZGE0OA==
4
+ ZmJmMGNhZmU4MDBlZTg2NmNkOGIzYTNlNWE4MGVjZDBmZjIwZGQxNA==
5
5
  data.tar.gz: !binary |-
6
- NDExZWNlMzcxY2Y1YTkwYmI4MTU4MWQ3ZjJiNGViOTEwNWFjMDYzNg==
6
+ OWJkODdkOGRhZGZlNDBmNTc1NmUxMjY4MzQ3N2UzZDNjMzFlNGQ1Mg==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- MzNiMzZiODgzY2QyOTc3NWY3MzU3MmIwY2U0YmUyNmQ4NTQzNGMyYmY0ZDE5
10
- NTA3ODkzMzYxYTVmMTVkMGM2MjllNzQ4OTRiNGZjMzUzODk3YWNhOTNlY2Fj
11
- NGMxNzllMjdlOWJhYzk4Mjk0Y2Q3YzhiNjhhNjQ5MjcyZGFhYjY=
9
+ YzBkNDY2NDVhNGMwNDYyNzFjYWEzYjE2ZWQwM2JhMjAzZjlkMmY4MTY3YmZi
10
+ MjU5OWIxNzNjYmNjZjUyOTlhMTg4NWJhNDAyOTdlMGE1YjczNGZiNGU0MmMy
11
+ YjU1YjgxMmRmY2U5MjY1NTFiMjE1NzQ3MjQ5MzgyMDhkNGFlOWM=
12
12
  data.tar.gz: !binary |-
13
- M2M1ZWVlZjI2YjljZGIzNTFhNjNlYjgyZDNmYTQwZjQ1NDA0NDY5NmMzNGI0
14
- MTdmMzFiZDQ5ZjFjMGMwY2MxNjFmNWU3NGRmZTI2NjEyOTc5OTkzMDdlZjQ4
15
- MTU4ZjIwNzgzNGFiYTk1NzNmMTcyYzI0ODM2M2M4ZjJiMDA2MTU=
13
+ YjkwODIzMWI5N2RhODcxZDg3ZGE5ZGFmMWI5YTVmMjYxZjc2MmViY2JkYTA4
14
+ NjhjOTIwNGI4Y2Y4MGFlNmMyM2ExNjY5MDVhNTQ5MzQxYjM4Y2ZlMzIwYjBj
15
+ MWUzMmJlYjg3ZmY2YmQ0YWIxOWU0OTM4MTA5OGQxOTgwOTI4YzE=
data/README.md CHANGED
@@ -8,68 +8,210 @@ A git-based CLI to help you with time tracking on your projects.
8
8
  $ sudo gem install tlog
9
9
  ```
10
10
 
11
- ## Usage
11
+ # Usage
12
12
  * Navigate to a directory that has a git repo
13
13
 
14
- ### Create a time log
14
+ ## Create a time log
15
+
16
+ #### Create a default time log with no goal
15
17
  ```bash
16
18
  $ tlog create example
17
19
  ```
18
20
 
19
- ### Check out a time log
21
+ #### Create a time log with a time goal
20
22
  ```bash
21
- $ tlog checkout example
23
+ $ tlog create example --goal 4hr
22
24
  ```
23
25
 
24
- ### Create a time log with a time goal
26
+ #### Create a new time log with a state and a points value
25
27
  ```bash
26
- $ tlog create example --goal 4hr
28
+ $ tlog create example --state OPEN --points 10
27
29
  ```
30
+ ## Displaying time logs
28
31
 
29
- ### Start a new task on a time log
32
+ #### Display all time logs
30
33
  ```bash
31
- $ tlog start example -d "My task description"
34
+ $ tlog display
35
+ Log: bugfix
36
+ State: open
37
+ Points: 10
38
+ Owner: andrew
39
+ Start End Duration Description
40
+ June 06, 12:45PM June 06, 12:46PM 1:00:27 fixing really bad bug
41
+ June 07,
42
+ ----------------------------------------------------------------------------------------------------
43
+ Total 1:00:27
44
+ Time left: 0:59:33
45
+ Log: important
46
+ State: closed
47
+ Points: 0
48
+ Owner: chris
49
+ Start End Duration Description
50
+ ----------------------------------------------------------------------------------------------------
51
+ Total 0:00:00
52
+ Log: feature1
53
+ State: hold
54
+ Points: 5
55
+ Owner: peter
56
+ Start End Duration Description
57
+ June 13, 12:32PM June 13, 12:33PM 0:00:34 making sure new feature works
58
+ June 13, 12:29PM June 13, 12:32PM 0:02:30 working on new feature
59
+ ----------------------------------------------------------------------------------------------------
60
+ Total 0:03:04
61
+ Time left: 3:56:56
62
+ ```
63
+
64
+ #### Display a specific time log
65
+ ```bash
66
+ $ tlog display feature1
67
+ Log: feature1
68
+ State: hold
69
+ Points: 5
70
+ Owner: peter
71
+ Start End Duration Description
72
+ June 13, 12:32PM June 13, 12:33PM 0:00:34 making sure new feature works
73
+ June 13, 12:29PM June 13, 12:32PM 0:02:30 working on new feature
74
+ ----------------------------------------------------------------------------------------------------
75
+ Total 0:03:04
76
+ Time left: 3:56:56
32
77
  ```
33
78
 
34
- ### Stop the current task
79
+ #### Constrain displayed time logs to only ones with specified states
35
80
  ```bash
36
- $ tlog stop example
81
+ $ tlog display -s open,hold
82
+ Log: bugfix
83
+ State: open
84
+ Points: 10
85
+ Owner: andrew
86
+ Start End Duration Description
87
+ June 06, 12:45PM June 06, 12:46PM 1:00:27 fixing really bad bug
88
+ June 07,
89
+ ----------------------------------------------------------------------------------------------------
90
+ Total 1:00:27
91
+ Time left: 0:59:33
92
+ Log: feature1
93
+ State: hold
94
+ Points: 5
95
+ Owner: peter
96
+ Start End Duration Description
97
+ June 13, 12:32PM June 13, 12:33PM 0:00:34 making sure new feature works
98
+ June 13, 12:29PM June 13, 12:32PM 0:02:30 working on new feature
99
+ ----------------------------------------------------------------------------------------------------
100
+ Total 0:03:04
101
+ Time left: 3:56:56
102
+ ```
103
+ #### Constrain displayed time logs to only ones with specified owners
104
+ ```bash
105
+ $ tlog display -o chris,peter
106
+ Log: important
107
+ State: closed
108
+ Points: 0
109
+ Owner: chris
110
+ Start End Duration Description
111
+ ----------------------------------------------------------------------------------------------------
112
+ Total 0:00:00
113
+ Log: feature1
114
+ State: hold
115
+ Points: 5
116
+ Owner: peter
117
+ Start End Duration Description
118
+ June 13, 12:32PM June 13, 12:33PM 0:00:34 making sure new feature works
119
+ June 13, 12:29PM June 13, 12:32PM 0:02:30 working on new feature
120
+ ----------------------------------------------------------------------------------------------------
121
+ Total 0:03:04
122
+ Time left: 3:56:56
123
+ ```
124
+
125
+ #### Contrain displayed time logs to only ones that have points values >= the specified points value
126
+ ```bash
127
+ $ tlog display -p 10
128
+ Log: bugfix
129
+ State: open
130
+ Points: 10
131
+ Owner: andrew
132
+ Start End Duration Description
133
+ June 06, 12:45PM June 06, 12:46PM 1:00:27 fixing really bad bug
134
+ June 07,
135
+ ----------------------------------------------------------------------------------------------------
136
+ Total 1:00:27
137
+ Time left: 0:59:33
37
138
  ```
38
139
 
39
- ### Show active time logs and label the current one, if it exists
140
+ #### Constrain displayed time logs to only ones that have less than the specified amount of time left to finish
141
+ ```bash
142
+ $ tlog display -g 1hr
143
+ Log: bugfix
144
+ State: open
145
+ Points: 10
146
+ Owner: andrew
147
+ Start End Duration Description
148
+ June 06, 12:45PM June 06, 12:46PM 1:00:27 fixing really bad bug
149
+ June 07,
150
+ ----------------------------------------------------------------------------------------------------
151
+ Total 1:00:27
152
+ Time left: 0:59:33
153
+ ```
154
+
155
+ #### Show active time logs and label the checked-out log or the in-progress log
40
156
  ```bash
41
157
  $ tlog active
42
158
  All Time Logs:
43
159
  testing
44
- feature1(current)
160
+ feature1(in-progress)
45
161
  bug fix
46
162
  feature2
47
163
  ```
48
-
49
- ### Display all the current time logs and their tasks, total time logged and time left.
164
+
165
+ ## Using time logs
166
+
167
+ #### Check out a time log
168
+ ```bash
169
+ $ tlog checkout example
170
+ ```
171
+
172
+ #### Start a new task the checked-out time log
50
173
  ```bash
51
- $ tlog display
52
- Log: example1
53
- Start End Duration Owner Description
54
- May 29, 11:57PM May 29, 11:58PM 0:01:13 chriwend My Description
55
- ----------------------------------------------------------------------------------------------------
56
- Total 0:01:13
57
- Log: example2
58
- Start End Duration Owner Description
59
- May 30, 12:00AM 0:02:26 chriwend Fixing bug
60
- May 30, 12:00AM May 30, 12:00AM 0:00:10 chriwend (no description)
61
- ----------------------------------------------------------------------------------------------------
62
- Total 0:02:36
63
- Time left: 3:57:24
64
- ```
174
+ $ tlog start -d "My task description"
175
+ ```
176
+
177
+ #### Update the state of the checked-out time log
178
+ ```bash
179
+ $ tlog state CLOSED
180
+ ```
181
+
182
+ #### Update the points value of the checked-out time log
183
+ ```bash
184
+ $ tlog points 10
185
+ ```
65
186
 
66
- ### Delete a time log
187
+ #### Update the owner of the checked-out time log
188
+ ```bash
189
+ $ tlog owner cewendel
190
+ ```
191
+
192
+ #### Stop the current task
193
+ ```bash
194
+ $ tlog stop example
195
+ ```
196
+
197
+ #### Delete a time log
67
198
  ```bash
68
199
  $ tlog delete example
69
200
  ```
70
201
 
71
202
  ## Collaboration
72
- More to come on this after I test it...
203
+
204
+ tlog makes for easy time and ticket tracking when working with a team. Assuming you have a remote repo that you and others are pushing to, use the `tlog push` and `tlog pull` commands to keep your time logs up to date.
205
+
206
+ ### Pull in new or updated time logs from upstream
207
+ ```bash
208
+ $ tlog pull
209
+ ```
210
+
211
+ ### Push new or updated time logs upstream
212
+ ```bash
213
+ $ tlog push
214
+ ```
73
215
 
74
216
  ## Contributing
75
217
 
data/TODO CHANGED
@@ -1,4 +1,5 @@
1
1
  - tests
2
2
  - rakefile
3
3
  - time zones....
4
+ - command aliases
4
5
  - display update speicifc states, points values, owners. goal times
@@ -1,61 +1,61 @@
1
1
 
2
2
  class Tlog::Application
3
3
 
4
- def initialize(input, output)
5
- @input = input
6
- @output = output
7
- end
8
-
9
- def run
10
- command_name = ""
11
- outcome = false
12
- begin
13
- command_name = @input.args.shift
14
- command = find(command_name)
15
- prepare_command(command)
16
- outcome = run_command(command)
17
- rescue OptionParser::InvalidOption, OptionParser::MissingArgument
18
- @output.error($!)
19
- @output.error(@optparse.to_s)
20
- rescue Tlog::Error::CommandInvalid
21
- @output.error(command_name + " command invalid: " + $!.message)
22
- @output.error(@optparse.to_s)
23
- rescue Tlog::Error::CommandNotFound, OptionParser::MissingArgument
24
- @output.error($!)
25
- @output.error(@optparse.to_s)
26
- rescue
27
- @output.error($!)
28
- end
29
- return outcome
30
- end
31
-
32
- private
33
-
34
- def find(command_name)
35
- commands = Tlog::Command_Suite.commands
36
- command = nil
37
- commands.each do |cmd|
38
- return cmd if cmd.name == command_name
39
- end
40
- command
41
- end
42
-
43
- def prepare_command(command)
44
- if !command.nil?
45
- @optparse = OptionParser.new do |parser|
46
- command.options(parser, @input.options)
47
- end
48
- @optparse.parse!(@input.args)
49
- end
50
- end
51
-
52
- def run_command(command)
53
- if !command.nil?
54
- command.execute(@input, @output)
55
- true
56
- else
57
- raise Tlog::Error::CommandNotFound, "Command not found, use 'tlog help' for list of commands"
58
- end
59
- end
4
+ def initialize(input, output)
5
+ @input = input
6
+ @output = output
7
+ end
8
+
9
+ def run
10
+ command_name = ""
11
+ outcome = false
12
+ begin
13
+ command_name = @input.args.shift
14
+ command = find(command_name)
15
+ prepare_command(command)
16
+ outcome = run_command(command)
17
+ rescue OptionParser::InvalidOption, OptionParser::MissingArgument
18
+ @output.error($!)
19
+ @output.error(@optparse.to_s)
20
+ rescue Tlog::Error::CommandInvalid
21
+ @output.error(command_name + " command invalid: " + $!.message)
22
+ @output.error(@optparse.to_s)
23
+ rescue Tlog::Error::CommandNotFound, OptionParser::MissingArgument
24
+ @output.error($!)
25
+ @output.error(@optparse.to_s)
26
+ rescue
27
+ @output.error($!)
28
+ end
29
+ return outcome
30
+ end
31
+
32
+ private
33
+
34
+ def find(command_name)
35
+ commands = Tlog::Command_Suite.commands
36
+ command = nil
37
+ commands.each do |cmd|
38
+ return cmd if cmd.name == command_name
39
+ end
40
+ command
41
+ end
42
+
43
+ def prepare_command(command)
44
+ if !command.nil?
45
+ @optparse = OptionParser.new do |parser|
46
+ command.options(parser, @input.options)
47
+ end
48
+ @optparse.parse!(@input.args)
49
+ end
50
+ end
51
+
52
+ def run_command(command)
53
+ if !command.nil?
54
+ command.execute(@input, @output)
55
+ true
56
+ else
57
+ raise Tlog::Error::CommandNotFound, "Command not found, use 'tlog help' for list of commands"
58
+ end
59
+ end
60
60
 
61
61
  end
@@ -1,53 +1,53 @@
1
1
 
2
2
  class Tlog::Command::Active < Tlog::Command
3
3
 
4
- def name
5
- "active"
6
- end
7
-
8
- def description
9
- "prints out all active time logs, the time log in-progress if there is one. Or the currently checked-out time log"
10
- end
11
-
12
- def execute(input, output)
13
- print_time_entry(output)
14
- end
15
-
16
- def options(parser, options)
17
- parser.banner = "usage: tlog active"
18
- end
19
-
20
- private
21
-
22
- def print_time_entry(output)
23
- storage.in_branch do |wd|
24
- all_logs = @storage.all_log_dirs
25
- active_logs = []
26
- all_logs.each do |log|
27
- log_name = log.basename.to_s
28
- active_log = Tlog::Entity::Active_Log.new(log_name)
29
- active_log.current = true if storage.current_log_name == log_name
30
- active_log.checked_out = true if storage.checkout_value == log_name
31
- active_logs.push(active_log)
32
- end
33
- output.line_yellow("All Time Logs:")
34
- print_logs(active_logs, output)
35
- end
36
- end
37
-
38
- def print_logs(active_logs, output)
39
- active_logs.each do |active_log|
40
- out_line = active_log.name
41
- if active_log.current
42
- out_line << " (in-progress)"
43
- output.line_red(out_line);
44
- elsif active_log.checked_out
45
- out_line << " (checked_out)"
46
- output.line_blue(out_line)
47
- else
48
- output.line(out_line)
49
- end
50
- end
51
- end
4
+ def name
5
+ "active"
6
+ end
7
+
8
+ def description
9
+ "prints out all active time logs, the time log in-progress if there is one. Or the currently checked-out time log"
10
+ end
11
+
12
+ def execute(input, output)
13
+ print_time_entry(output)
14
+ end
15
+
16
+ def options(parser, options)
17
+ parser.banner = "usage: tlog active"
18
+ end
19
+
20
+ private
21
+
22
+ def print_time_entry(output)
23
+ storage.in_branch do |wd|
24
+ all_logs = @storage.all_log_dirs
25
+ active_logs = []
26
+ all_logs.each do |log|
27
+ log_name = log.basename.to_s
28
+ active_log = Tlog::Entity::Active_Log.new(log_name)
29
+ active_log.current = true if storage.current_log_name == log_name
30
+ active_log.checked_out = true if storage.checkout_value == log_name
31
+ active_logs.push(active_log)
32
+ end
33
+ output.line_yellow("All Time Logs:")
34
+ print_logs(active_logs, output)
35
+ end
36
+ end
37
+
38
+ def print_logs(active_logs, output)
39
+ active_logs.each do |active_log|
40
+ out_line = active_log.name
41
+ if active_log.current
42
+ out_line << " (in-progress)"
43
+ output.line_red(out_line);
44
+ elsif active_log.checked_out
45
+ out_line << " (checked_out)"
46
+ output.line_blue(out_line)
47
+ else
48
+ output.line(out_line)
49
+ end
50
+ end
51
+ end
52
52
 
53
53
  end
@@ -1,36 +1,36 @@
1
1
 
2
2
  class Tlog::Command::Checkout < Tlog::Command
3
3
 
4
- def name
5
- "checkout"
6
- end
7
-
8
- def description
9
- "checkouts a time log in order to start tasks on"
10
- end
11
-
12
- def execute(input, output)
13
- raise Tlog::Error::CommandInvalid, "Must specify log name" unless input.args[0]
14
- checkout(input.args[0])
15
- output.line("Checked-out log '#{input.args[0]}'");
16
- end
17
-
18
- def options(parser, options)
19
- parser.banner = "usage: tlog checkout <log_name>"
20
- end
21
-
22
- private
23
-
24
- def checkout(log_name)
25
- storage.in_branch do |wd|
26
- log = storage.require_log(log_name)
27
- raise Tlog::Error::TimeLogNotFound, "Time log '#{log_name}' does not exist" unless log
28
- checked_out_log = storage.checkout_value
29
- if checked_out_log == log.name
30
- raise Tlog::Error::CommandInvalid, "Time log '#{log_name}' is currently checked out "
31
- end
32
- storage.checkout_log(log)
33
- end
34
- end
4
+ def name
5
+ "checkout"
6
+ end
7
+
8
+ def description
9
+ "checkouts a time log in order to start tasks on"
10
+ end
11
+
12
+ def execute(input, output)
13
+ raise Tlog::Error::CommandInvalid, "Must specify log name" unless input.args[0]
14
+ checkout(input.args[0])
15
+ output.line("Checked-out log '#{input.args[0]}'");
16
+ end
17
+
18
+ def options(parser, options)
19
+ parser.banner = "usage: tlog checkout <log_name>"
20
+ end
21
+
22
+ private
23
+
24
+ def checkout(log_name)
25
+ storage.in_branch do |wd|
26
+ log = storage.require_log(log_name)
27
+ raise Tlog::Error::TimeLogNotFound, "Time log '#{log_name}' does not exist" unless log
28
+ checked_out_log = storage.checkout_value
29
+ if checked_out_log == log.name
30
+ raise Tlog::Error::CommandInvalid, "Time log '#{log_name}' is currently checked out "
31
+ end
32
+ storage.checkout_log(log)
33
+ end
34
+ end
35
35
 
36
36
  end
@@ -1,44 +1,44 @@
1
1
 
2
2
  class Tlog::Command::Create < Tlog::Command
3
3
 
4
- def name
5
- "create"
6
- end
7
-
8
- def description
9
- "creates a new time log either with no goal or with a goal"
10
- end
11
-
12
- def execute(input, output)
13
- raise Tlog::Error::CommandInvalid, "Must specify log name" unless input.args[0]
14
-
15
- log = Tlog::Entity::Log.new
16
- log.name = input.args[0];
17
- create_log(log, input.options)
18
- output.line("Created log '#{log.name}'")
19
- end
20
-
21
- def options(parser, options)
22
- parser.banner = "usage: tlog create <log_name>"
23
-
24
- parser.on("-g", "--goal <goal_length>") do |goal|
25
- options[:goal] = goal
26
- end
27
-
28
- parser.on("-s", "--state <initial_state>") do |state|
29
- options[:state] = state
30
- end
31
-
32
- parser.on("-p", "--points <initial_points_value>") do |points|
33
- options[:points] = points
34
- end
35
- end
36
-
37
- private
38
-
39
- def create_log(log, options)
40
- storage.in_branch do |wd|
41
- raise Tlog::Error::CommandInvalid, "Time log '#{log.name}' already exists" unless storage.create_log(log, options)
42
- end
43
- end
4
+ def name
5
+ "create"
6
+ end
7
+
8
+ def description
9
+ "creates a new time log either with no goal or with a goal"
10
+ end
11
+
12
+ def execute(input, output)
13
+ raise Tlog::Error::CommandInvalid, "Must specify log name" unless input.args[0]
14
+
15
+ log = Tlog::Entity::Log.new
16
+ log.name = input.args[0];
17
+ create_log(log, input.options)
18
+ output.line("Created log '#{log.name}'")
19
+ end
20
+
21
+ def options(parser, options)
22
+ parser.banner = "usage: tlog create <log_name>"
23
+
24
+ parser.on("-g", "--goal <goal_length>") do |goal|
25
+ options[:goal] = goal
26
+ end
27
+
28
+ parser.on("-s", "--state <initial_state>") do |state|
29
+ options[:state] = state
30
+ end
31
+
32
+ parser.on("-p", "--points <initial_points_value>") do |points|
33
+ options[:points] = points
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ def create_log(log, options)
40
+ storage.in_branch do |wd|
41
+ raise Tlog::Error::CommandInvalid, "Time log '#{log.name}' already exists" unless storage.create_log(log, options)
42
+ end
43
+ end
44
44
  end