diff options
| author | Zack Hobson | 2013-11-19 10:44:17 -0800 | 
|---|---|---|
| committer | Zack Hobson | 2013-11-19 10:44:17 -0800 | 
| commit | 6e43cffd1b5554bf1c185f037e62e5c3d89715e9 (patch) | |
| tree | 31dfcc2f719f848dd9ce276dc6795bf726703de6 | |
| parent | 7e12df6ad5bb954751c8d8eef2af3cb95d9c7804 (diff) | |
| download | hcl-6e43cffd1b5554bf1c185f037e62e5c3d89715e9.tar.bz2 | |
resume by task, require note command
| -rw-r--r-- | README.markdown | 20 | ||||
| -rw-r--r-- | lib/hcl/app.rb | 10 | ||||
| -rw-r--r-- | lib/hcl/commands.rb | 61 | ||||
| -rw-r--r-- | lib/hcl/day_entry.rb | 5 | ||||
| -rw-r--r-- | lib/hcl/utility.rb | 34 | 
5 files changed, 71 insertions, 59 deletions
| diff --git a/README.markdown b/README.markdown index d3e5da6..98bf71c 100644 --- a/README.markdown +++ b/README.markdown @@ -30,15 +30,14 @@ or you can install from source using jeweler:  ## Usage +    hcl (@<task_alias> | <project_id> <task_id>) [+time] [message] +    hcl note <message> +    hcl stop [message] +    hcl resume [@<task_alias>]      hcl show [date]      hcl tasks -    hcl set <key> <value ...> -    hcl unset <key> -    hcl start (<task_alias> | <project_id> <task_id>) [+time] [msg ...] -    hcl note <msg ...> +    hcl alias <task_alias> <project_id> <task_id>      hcl aliases -    hcl stop [msg] -    hcl resume  ### Available Projects and Tasks @@ -67,11 +66,8 @@ commands are equivalent:  ### Adding Notes to a Running Task -While a task is running you can append lines to the task notes. -Providing the note command is optional, just the bare message will work. -These two commands are equivalent: +While a task is running you can append lines to the task notes: -    $ hcl Found a good time!      $ hcl note Found a good time!  ### Stopping a Timer @@ -84,9 +80,11 @@ well:  ### Resuming a Timer -You can easily resume the last stopped timer: +You can resume a stopped timer. Specify a task to resume the last timer +for that task:      $ hcl resume +    $ hcl resume @xdev  ### Date Formats diff --git a/lib/hcl/app.rb b/lib/hcl/app.rb index 6b3e428..d615891 100644 --- a/lib/hcl/app.rb +++ b/lib/hcl/app.rb @@ -61,14 +61,6 @@ module HCl        Commands.method_defined? command      end -    def start_or_note *args -      if DayEntry.with_timer -        note *args -      else -        start *args -      end -    end -      # Start the application.      def run        begin @@ -83,7 +75,7 @@ module HCl                end              end            else -            start_or_note @command, *@args +            start @command, *@args            end          else            show diff --git a/lib/hcl/commands.rb b/lib/hcl/commands.rb index 2ca3742..3bdfb66 100644 --- a/lib/hcl/commands.rb +++ b/lib/hcl/commands.rb @@ -41,6 +41,7 @@ module HCl          puts "Added alias @#{task_name} for #{task}."        else          puts "Unrecognized project and task ID: #{value.inspect}" +        exit 1        end      end @@ -49,48 +50,27 @@ module HCl      end      def start *args -      starting_time = args.detect {|x| x =~ /^\+\d*(\.|:)?\d+$/ } -      if starting_time -        args.delete(starting_time) -        starting_time = time2float starting_time -      end -      ident = args.detect {|a| a[0] == '@' } -      if ident -        args.delete(ident) -        ident = ident.slice(1..-1) -      else -        ident = args.shift -      end -      if ident -        task_ids = if @settings.key? "task.#{ident}" -            @settings["task.#{ident}"].split(/\s+/) -          else -            [ident, args.shift] -          end -        task = Task.find *task_ids -        if task.nil? -          puts "Unknown task alias, try one of the following: ", aliases.join(', ') -          exit 1 -        end -        timer = task.start( -          :starting_time => starting_time, -          :note => args.join(' ') -        ) -        puts "Started timer for #{timer} (at #{current_time})" -      else -        puts "You must provide a task alias to start a timer:", aliases.join(', ') +      starting_time = get_starting_time args +      task = get_task args +      if task.nil? +        puts "Unknown task alias, try one of the following: ", aliases.join(', ')          exit 1        end +      timer = task.start \ +        :starting_time => starting_time, +        :note => args.join(' ') +      puts "Started timer for #{timer} (at #{current_time})"      end      def stop *args        entry = DayEntry.with_timer        if entry -        entry.append_note(*args.join(' ')) if args.any? +        entry.append_note(args.join(' ')) if args.any?          entry.toggle          puts "Stopped #{entry} (at #{current_time})"        else          puts "No running timers found." +        exit 1        end      end @@ -102,6 +82,7 @@ module HCl          puts "Added note to #{entry}."        else          puts "No running timers found." +        exit 1        end      end @@ -118,19 +99,21 @@ module HCl        puts "\t#{as_hours total_hours}\ttotal (as of #{current_time})"      end -    def resume -      entry = DayEntry.last +    def resume *args +      ident = get_ident args +      entry = if ident +          task_ids = get_task_ids ident +          DayEntry.last_by_task *task_ids +        else +          DayEntry.last +        end        if entry -        puts "Resumed #{entry} (at #{current_time})"          entry.toggle        else -        puts "No timers found" +        puts "No matching timer found." +        exit 1        end      end -  private -    def current_time -      Time.now.strftime('%I:%M %p').downcase -    end    end  end diff --git a/lib/hcl/day_entry.rb b/lib/hcl/day_entry.rb index afcdf08..84b5e3d 100644 --- a/lib/hcl/day_entry.rb +++ b/lib/hcl/day_entry.rb @@ -40,6 +40,11 @@ module HCl        all.detect {|t| t.running? }      end +    def self.last_by_task project_id, task_id +      all.sort {|a,b| b.updated_at<=>a.updated_at}. +        detect {|t| t.project_id == project_id && t.task_id == task_id } +    end +      def self.last        all.sort {|a,b| a.updated_at<=>b.updated_at}[-1]      end diff --git a/lib/hcl/utility.rb b/lib/hcl/utility.rb index 7cf1bfb..c724846 100644 --- a/lib/hcl/utility.rb +++ b/lib/hcl/utility.rb @@ -1,5 +1,39 @@  module HCl    module Utility +    def get_task_ids ident +      if @settings.key? "task.#{ident}" +        @settings["task.#{ident}"].split(/\s+/) +      else +        [ident, args.shift] +      end +    end + +    def get_ident args +      ident = args.detect {|a| a[0] == '@' } +      if ident +        args.delete(ident) +        ident.slice(1..-1) +      else +        args.shift +      end +    end + +    def get_task args +      Task.find *get_task_ids(get_ident(args)) +    end + +    def get_starting_time args +      starting_time = args.detect {|x| x =~ /^\+\d*(\.|:)?\d+$/ } +      if starting_time +        args.delete(starting_time) +        time2float starting_time +      end +    end + +    def current_time +      Time.now.strftime('%I:%M %p').downcase +    end +      # Convert from decimal to a string of the form HH:MM.      #      # @param [#to_f] hours number of hours in decimal | 
