summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorZack Hobson2009-07-21 10:24:31 -0700
committerZack Hobson2009-07-21 10:24:31 -0700
commit00f5c6cf9c061ecf2dca4e8c2a558ffcaed041ed (patch)
treed00c170030d3b561c0e0d5eccb972c8762914a9f /lib
parente0a2e5b1e9cfe7ea81b335e62d33ef6aadc55964 (diff)
downloadhcl-00f5c6cf9c061ecf2dca4e8c2a558ffcaed041ed.tar.bz2
Implement task aliases, closes #2
Diffstat (limited to 'lib')
-rw-r--r--lib/hcl.rb46
-rw-r--r--lib/hcl/task.rb8
2 files changed, 46 insertions, 8 deletions
diff --git a/lib/hcl.rb b/lib/hcl.rb
index 8e4878c..e0dbad8 100644
--- a/lib/hcl.rb
+++ b/lib/hcl.rb
@@ -14,6 +14,7 @@ require 'hcl/day_entry'
class HCl
VERSION = "0.1.0"
+ SETTINGS_FILE = "#{ENV['HOME']}/.hcl_settings"
class UnknownCommand < StandardError; end
@@ -40,6 +41,7 @@ class HCl
def initialize conf_file
config = YAML::load File.read(conf_file)
TimesheetResource.configure config
+ read_settings
end
def process_args *args
@@ -64,7 +66,7 @@ Examples:
Options:
EOM
- stop_on %w[ show tasks add rm start stop ]
+ stop_on %w[ show tasks set unset add rm start stop ]
end
@command = args.shift
@args = args
@@ -74,12 +76,48 @@ EOM
def tasks
Task.all.each do |task|
# TODO more information and formatting options
- puts "#{task.id}\t#{task}"
+ puts "#{task.project.id} #{task.id}\t#{task}"
end
end
+ def read_settings
+ settings_file = "#{ENV['HOME']}/.hcl_settings"
+ if File.exists? settings_file
+ @settings = YAML.load(File.read(settings_file))
+ end
+ end
+
+ def write_settings
+ File.open(SETTINGS_FILE, 'w') do |f|
+ f.write @settings.to_yaml
+ end
+ end
+
+ def set key = nil, *args
+ if key.nil?
+ @settings.each do |k, v|
+ puts "#{k}: #{v}"
+ end
+ else
+ value = args.join(' ')
+ @settings ||= {}
+ @settings[key] = value
+ write_settings
+ end
+ end
+
+ def unset key
+ @settings.delete key
+ write_settings
+ end
+
def start *args
- task = Task.find args.shift
+ ident = args.shift
+ task = if @settings["task.#{ident}"]
+ Task.find *@settings["task.#{ident}"].split(/\s+/)
+ else
+ Task.find ident, args.shift
+ end
puts "Starting timer for #{task}"
day_entry = task.start(*args)
puts "Time is running on #{day_entry}"
@@ -100,7 +138,7 @@ EOM
# Convert from decimal to a string of the form HH:MM.
def as_hours hours
minutes = hours.to_f * 60.0
- "#{(minutes / 60).to_i}:#{(minutes % 60).to_i}"
+ sprintf "%d:%02d", (minutes / 60).to_i, (minutes % 60).to_i
end
def not_implemented *args
diff --git a/lib/hcl/task.rb b/lib/hcl/task.rb
index 0874f51..1a742ce 100644
--- a/lib/hcl/task.rb
+++ b/lib/hcl/task.rb
@@ -17,8 +17,8 @@ class HCl
YAML.load File.read(File.join(ENV['HOME'],'.hcl_tasks'))
end
- def self.find id
- all.detect {|t| t.id == id }
+ def self.find project_id, id
+ all.detect {|t| t.project.id == project_id && t.id == id }
end
def to_s
@@ -27,7 +27,7 @@ class HCl
def start *args
notes = args.join ' '
- day = DayEntry.from_xml Task.post("daily/add", <<-EOT)
+ days = DayEntry.from_xml Task.post("daily/add", <<-EOT)
<request>
<notes>#{notes}</notes>
<hours></hours>
@@ -36,7 +36,7 @@ class HCl
<spent_at type="date">#{Date.today}</spent_at>
</request>
EOT
- return day
+ days.first
end
end
end