clockout 0.4.2 → 0.5

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 (4) hide show
  1. data/bin/clock +44 -9
  2. data/lib/clockout.rb +8 -2
  3. data/lib/printer.rb +1 -0
  4. metadata +2 -2
data/bin/clock CHANGED
@@ -10,13 +10,16 @@ See hours:
10
10
  Options:
11
11
  --estimations, -e: Show estimations made, if any
12
12
  --condensed, -c: Condense output (don't show the timeline for each day)
13
- --generate-config, -g: Generate config file (clock.yml)
14
13
  --user, -u (<email>): Only count current user's commits (or specified user)
15
14
  --help, -h: Show this message
16
15
 
16
+ Generators:
17
+ $ clock generate config Generate config file (clock.yml)
18
+ $ clock generate hook Generate a post-commit hook for clockout!
19
+
17
20
  Other:
18
- $ clock in Clock-in (when you start working, preceding a commit)
19
- $ clock out Clock-out (after you've worked overtime following a commit)
21
+ $ clock in Clock-in (when you start working, preceding a commit)
22
+ $ clock out Clock-out (after you've worked overtime following a commit)
20
23
  EOS
21
24
 
22
25
  TEMPLATE_CLOCKFILE = <<-EOF
@@ -81,16 +84,22 @@ def parse_options(args)
81
84
  i = 0
82
85
  while i < args.length
83
86
  arg = args[i]
87
+ next_arg = args[i+1]
84
88
  if (arg == "-h" || arg == "--help")
85
89
  opts[:help] = true
86
90
  elsif (arg == "-e" || arg == "--estimations")
87
91
  opts[:estimations] = true
88
92
  elsif (arg == "-c" || arg == "--condensed")
89
93
  opts[:condensed] = true
90
- elsif (arg == "-g" || arg == "--generate-config")
91
- opts[:generate_config] = true
94
+ elsif (arg == "generate")
95
+ if next_arg == "hook" || next_arg == "config"
96
+ i += 1
97
+ opts[:generate] = next_arg
98
+ else
99
+ puts_error "invalid generator '#{next_arg}' (there's only 'config' and 'hook', see --help)."
100
+ exit
101
+ end
92
102
  elsif (arg == "-u" || arg == "--user")
93
- next_arg = args[i+1]
94
103
  if next_arg && next_arg[0] != '-'
95
104
  opts[:user] = next_arg
96
105
  i += 1
@@ -152,6 +161,10 @@ if (ARGV[0] == "in" || ARGV[0] == "out")
152
161
  # Add in: or out:, along with the time if it doesn't exist
153
162
  file << "\n#{seek_line}\n#{time_line}" if !mod
154
163
  end
164
+ elsif (ARGV[0] == "last")
165
+ print "[clockout] ".green if (ARGV[1] == "--hook")
166
+ clock = Clockout.new(path, nil, 2)
167
+ clock.print_last
155
168
  else
156
169
  opts = parse_options(ARGV)
157
170
 
@@ -160,9 +173,31 @@ else
160
173
  exit
161
174
  end
162
175
 
163
- if opts[:generate_config]
164
- if !generate_clock_file(path) && clock_path
165
- puts_error "config file already exists for this repo: #{clock_path}"
176
+ if opts[:generate]
177
+ root = Clockout.root_path(path)
178
+ exit if !root
179
+ if opts[:generate] == "config"
180
+ if !generate_clock_file(path) && clock_path
181
+ puts_error "config file already exists for this repo: #{clock_path}"
182
+ end
183
+ elsif opts[:generate] == "hook"
184
+ hook_path = root+"/.git/hooks/post-commit"
185
+ hook_txt = "#clockout\nclock last --hook"
186
+ if File.exist? hook_path
187
+ contents = File.open(hook_path).read
188
+ if (contents[hook_txt])
189
+ puts_error "post-commit clock hook already added"
190
+ else
191
+ File.open(hook_path, "a") do |file|
192
+ file.puts "\n\n#{hook_txt}"
193
+ end
194
+ end
195
+ else
196
+ File.open(hook_path, "w") do |file|
197
+ file.puts "#!/bin/sh\n\n#{hook_txt}"
198
+ end
199
+ File.chmod(0755, hook_path)
200
+ end
166
201
  end
167
202
  exit
168
203
  end
data/lib/clockout.rb CHANGED
@@ -171,6 +171,11 @@ class Clockout
171
171
  @blocks = run(data)
172
172
  end
173
173
 
174
+ def print_last
175
+ last = @blocks.last.last
176
+ puts "#{last.minutes.round(2)} minutes logged" if last
177
+ end
178
+
174
179
  def self.get_repo(path, original_path = nil)
175
180
  begin
176
181
  return Grit::Repo.new(path), path
@@ -211,6 +216,7 @@ class Clockout
211
216
  end
212
217
 
213
218
  def self.clock_path(path)
219
+ return nil if !path
214
220
  path+"/clock.yml"
215
221
  end
216
222
 
@@ -219,7 +225,7 @@ class Clockout
219
225
  root_path
220
226
  end
221
227
 
222
- def initialize(path = nil, author = nil)
228
+ def initialize(path = nil, author = nil, num=500)
223
229
  @time_per_day = Hash.new(0)
224
230
 
225
231
  # Default options
@@ -234,7 +240,7 @@ class Clockout
234
240
  # Merge with config override options
235
241
  $opts.merge!(clock_opts) if clock_opts
236
242
 
237
- commits = repo.commits('master', 500)
243
+ commits = repo.commits('master', num)
238
244
  commits.reverse!
239
245
 
240
246
  prepare_blocks(commits, author)
data/lib/printer.rb CHANGED
@@ -8,6 +8,7 @@ class String
8
8
  end
9
9
 
10
10
  def red() colorize(31) end
11
+ def green() colorize(32) end
11
12
  def yellow() colorize(33) end
12
13
  def magenta() colorize(35) end
13
14
  def light_blue() colorize(94) end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clockout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: '0.5'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-14 00:00:00.000000000 Z
12
+ date: 2013-10-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: grit