hcl 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 045ee48931cd77620aacf51495ce49a0e4621602
4
- data.tar.gz: 61957cdfa90886797d896efabfcd5b7cb90db63b
3
+ metadata.gz: 852da2430771d5354f8fd2fca9bc55558e2248b7
4
+ data.tar.gz: 0f21a80c83c9e105829f872c47860e34975120e0
5
5
  SHA512:
6
- metadata.gz: ec4895148c586158a395ae08de8e225fe94cea6a2d2102e90ebd99003bd1776314d0ebf871dcbfadebb38ee22029b60b9b79b3961be1078c7dbbc676469a7b4e
7
- data.tar.gz: 3411878c71f1f625f9b983a77041108826ea74c1f8723559ec6ccce09798a7436dfc89abac31fa765faed4f72090342f3bf1f69e9318affeb8d16a7e2008141d
6
+ metadata.gz: 6a411682c2f8c9d049bfe3e13f436c9efd5c2cc3be9892d4ea9a3ed1b58008a60491d4f05530a9878af6a10ce6e9f7cd31b795caffce9727cbca0fddbb062e12
7
+ data.tar.gz: 7c1e0be48bbe9043a86265cc35d05feb3fb4bcc64b13c56fd4bbdcff9bce1e04c9b564702cfaabcca132ea8e9cad49993edd0a44be5d6b05bd0b720d881ea59a
data/README.markdown CHANGED
@@ -30,15 +30,14 @@ or you can install from source using jeweler:
30
30
 
31
31
  ## Usage
32
32
 
33
+ hcl (@<task_alias> | <project_id> <task_id>) [+time] [message]
34
+ hcl note <message>
35
+ hcl stop [message]
36
+ hcl resume [@<task_alias>]
33
37
  hcl show [date]
34
38
  hcl tasks
35
- hcl set <key> <value ...>
36
- hcl unset <key>
37
- hcl start (<task_alias> | <project_id> <task_id>) [+time] [msg ...]
38
- hcl note <msg ...>
39
+ hcl alias <task_alias> <project_id> <task_id>
39
40
  hcl aliases
40
- hcl stop [msg]
41
- hcl resume
42
41
 
43
42
  ### Available Projects and Tasks
44
43
 
@@ -67,11 +66,8 @@ commands are equivalent:
67
66
 
68
67
  ### Adding Notes to a Running Task
69
68
 
70
- While a task is running you can append lines to the task notes.
71
- Providing the note command is optional, just the bare message will work.
72
- These two commands are equivalent:
69
+ While a task is running you can append lines to the task notes:
73
70
 
74
- $ hcl Found a good time!
75
71
  $ hcl note Found a good time!
76
72
 
77
73
  ### Stopping a Timer
@@ -84,9 +80,11 @@ well:
84
80
 
85
81
  ### Resuming a Timer
86
82
 
87
- You can easily resume the last stopped timer:
83
+ You can resume a stopped timer. Specify a task to resume the last timer
84
+ for that task:
88
85
 
89
86
  $ hcl resume
87
+ $ hcl resume @xdev
90
88
 
91
89
  ### Date Formats
92
90
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.1
1
+ 0.4.2
data/hcl.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "hcl"
8
- s.version = "0.4.1"
8
+ s.version = "0.4.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Zack Hobson"]
12
- s.date = "2013-11-18"
12
+ s.date = "2013-11-19"
13
13
  s.description = "HCl is a command-line client for manipulating Harvest time sheets."
14
14
  s.email = "zack@zackhobson.com"
15
15
  s.executables = ["hcl"]
data/lib/hcl/app.rb CHANGED
@@ -31,7 +31,7 @@ class Net::HTTP
31
31
  end
32
32
 
33
33
  module HCl
34
- VERSION = "0.3.1"
34
+ VERSION = "0.4.2"
35
35
 
36
36
  class App
37
37
  include HCl::Utility
@@ -61,14 +61,6 @@ module HCl
61
61
  Commands.method_defined? command
62
62
  end
63
63
 
64
- def start_or_note *args
65
- if DayEntry.with_timer
66
- note *args
67
- else
68
- start *args
69
- end
70
- end
71
-
72
64
  # Start the application.
73
65
  def run
74
66
  begin
@@ -83,7 +75,7 @@ module HCl
83
75
  end
84
76
  end
85
77
  else
86
- start_or_note @command, *@args
78
+ start @command, *@args
87
79
  end
88
80
  else
89
81
  show
data/lib/hcl/commands.rb CHANGED
@@ -41,6 +41,7 @@ module HCl
41
41
  puts "Added alias @#{task_name} for #{task}."
42
42
  else
43
43
  puts "Unrecognized project and task ID: #{value.inspect}"
44
+ exit 1
44
45
  end
45
46
  end
46
47
 
@@ -49,48 +50,27 @@ module HCl
49
50
  end
50
51
 
51
52
  def start *args
52
- starting_time = args.detect {|x| x =~ /^\+\d*(\.|:)?\d+$/ }
53
- if starting_time
54
- args.delete(starting_time)
55
- starting_time = time2float starting_time
56
- end
57
- ident = args.detect {|a| a[0] == '@' }
58
- if ident
59
- args.delete(ident)
60
- ident = ident.slice(1..-1)
61
- else
62
- ident = args.shift
63
- end
64
- if ident
65
- task_ids = if @settings.key? "task.#{ident}"
66
- @settings["task.#{ident}"].split(/\s+/)
67
- else
68
- [ident, args.shift]
69
- end
70
- task = Task.find *task_ids
71
- if task.nil?
72
- puts "Unknown task alias, try one of the following: ", aliases.join(', ')
73
- exit 1
74
- end
75
- timer = task.start(
76
- :starting_time => starting_time,
77
- :note => args.join(' ')
78
- )
79
- puts "Started timer for #{timer} (at #{current_time})"
80
- else
81
- puts "You must provide a task alias to start a timer:", aliases.join(', ')
53
+ starting_time = get_starting_time args
54
+ task = get_task args
55
+ if task.nil?
56
+ puts "Unknown task alias, try one of the following: ", aliases.join(', ')
82
57
  exit 1
83
58
  end
59
+ timer = task.start \
60
+ :starting_time => starting_time,
61
+ :note => args.join(' ')
62
+ puts "Started timer for #{timer} (at #{current_time})"
84
63
  end
85
64
 
86
65
  def stop *args
87
66
  entry = DayEntry.with_timer
88
67
  if entry
89
- entry.append_note(*args.join(' ')) if args.any?
68
+ entry.append_note(args.join(' ')) if args.any?
90
69
  entry.toggle
91
70
  puts "Stopped #{entry} (at #{current_time})"
92
71
  else
93
72
  puts "No running timers found."
73
+ exit 1
94
74
  end
95
75
  end
96
76
 
@@ -102,6 +82,7 @@ module HCl
102
82
  puts "Added note to #{entry}."
103
83
  else
104
84
  puts "No running timers found."
85
+ exit 1
105
86
  end
106
87
  end
107
88
 
@@ -118,19 +99,21 @@ module HCl
118
99
  puts "\t#{as_hours total_hours}\ttotal (as of #{current_time})"
119
100
  end
120
101
 
121
- def resume
122
- entry = DayEntry.last
102
+ def resume *args
103
+ ident = get_ident args
104
+ entry = if ident
105
+ task_ids = get_task_ids ident, args
106
+ DayEntry.last_by_task *task_ids
107
+ else
108
+ DayEntry.last
109
+ end
123
110
  if entry
124
- puts "Resumed #{entry} (at #{current_time})"
125
111
  entry.toggle
126
112
  else
127
- puts "No timers found"
113
+ puts "No matching timer found."
114
+ exit 1
128
115
  end
129
116
  end
130
117
 
131
- private
132
- def current_time
133
- Time.now.strftime('%I:%M %p').downcase
134
- end
135
118
  end
136
119
  end
data/lib/hcl/day_entry.rb CHANGED
@@ -40,6 +40,11 @@ module HCl
40
40
  all.detect {|t| t.running? }
41
41
  end
42
42
 
43
+ def self.last_by_task project_id, task_id
44
+ all.sort {|a,b| b.updated_at<=>a.updated_at}.
45
+ detect {|t| t.project_id == project_id && t.task_id == task_id }
46
+ end
47
+
43
48
  def self.last
44
49
  all.sort {|a,b| a.updated_at<=>b.updated_at}[-1]
45
50
  end
data/lib/hcl/utility.rb CHANGED
@@ -1,5 +1,39 @@
1
1
  module HCl
2
2
  module Utility
3
+ def get_task_ids ident, args
4
+ if @settings.key? "task.#{ident}"
5
+ @settings["task.#{ident}"].split(/\s+/)
6
+ else
7
+ [ident, args.shift]
8
+ end
9
+ end
10
+
11
+ def get_ident args
12
+ ident = args.detect {|a| a[0] == '@' }
13
+ if ident
14
+ args.delete(ident)
15
+ ident.slice(1..-1)
16
+ else
17
+ args.shift
18
+ end
19
+ end
20
+
21
+ def get_task args
22
+ Task.find *get_task_ids(get_ident(args), args)
23
+ end
24
+
25
+ def get_starting_time args
26
+ starting_time = args.detect {|x| x =~ /^\+\d*(\.|:)?\d+$/ }
27
+ if starting_time
28
+ args.delete(starting_time)
29
+ time2float starting_time
30
+ end
31
+ end
32
+
33
+ def current_time
34
+ Time.now.strftime('%I:%M %p').downcase
35
+ end
36
+
3
37
  # Convert from decimal to a string of the form HH:MM.
4
38
  #
5
39
  # @param [#to_f] hours number of hours in decimal
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hcl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zack Hobson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-18 00:00:00.000000000 Z
11
+ date: 2013-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: trollop