diff options
| -rwxr-xr-x | bin/timetrackr | 32 | ||||
| -rw-r--r-- | lib/timetrackr.rb | 8 | ||||
| -rw-r--r-- | lib/timetrackr/sqlite.rb | 12 | ||||
| -rw-r--r-- | test/test_timetrackr.rb | 5 |
4 files changed, 26 insertions, 31 deletions
diff --git a/bin/timetrackr b/bin/timetrackr index cc4e6e9..d3daace 100755 --- a/bin/timetrackr +++ b/bin/timetrackr @@ -6,13 +6,13 @@ require 'timetrackr' require 'timetrackr/period' DEFAULTS = { - :backend => 'yaml', - :verbose => false, - :single_task => false, - :path => File.join(ENV['HOME'],'.timetrackr.db'), - :relative_format => "%2<hours>dh %2<minutes>dm %2<seconds>ds", - :absolute_time => "%H:%m", - :absolute_day => "%Y-%m-%d" + 'backend' => 'yaml', + 'verbose' => false, + 'single_task' => false, + 'path' => File.join(ENV['HOME'],'.timetrackr.db'), + 'relative_format' => "%2<hours>dh %2<minutes>dm %2<seconds>ds", + 'absolute_time' => "%H:%M", + 'absolute_day' => "%Y-%m-%d" } def show_help @@ -56,7 +56,7 @@ end # global options while (cmd = ARGV.shift) && cmd.start_with?('-') if ['-v','--verbose'].include? cmd - config[:verbose] = true + config['verbose'] = true end if ['-h','--help'].include? cmd show_help @@ -65,8 +65,8 @@ while (cmd = ARGV.shift) && cmd.start_with?('-') end config = DEFAULTS.merge(config || {}) -$verbose = config[:verbose] -trackr = TimeTrackr.create(config[:backend], config) +$verbose = config['verbose'] +trackr = TimeTrackr.create(config['backend'], config) # # commands @@ -76,7 +76,7 @@ when 'start','in','s' task = ARGV.shift notes = ARGV.join(' ') # switch tasks if config says so - if config[:single_task] && trackr.current != task + if config['single_task'] && trackr.current != task trackr.current.each { |t| trackr.stop(t) unless t == task } @@ -118,7 +118,7 @@ when 'time','status',nil t = t + period.length } name = trackr.current.include?(task) ? task+' *' : task - puts name.ljust(15) << format_time(total,config[:relative_format]) + puts name.ljust(15) << format_time(total,config['relative_format']) end when 'log' @@ -131,13 +131,13 @@ when 'log' periods = tasks.each.collect{ |t| trackr.history(t) }.flatten lastday = nil table << periods.sort{|x,y| x.start <=> y.start}.collect{ |period| - currday = period.start.strftime(config[:absolute_day]) + currday = period.start.strftime(config['absolute_day']) day = (currday == lastday) ? ' ' : currday lastday = currday name = period.current? ? period.task+' *' : period.task - start = period.start.strftime(config[:absolute_time]) - stop = period.current? ? ' ' : period.stop.strftime(config[:absolute_time]) - length = format_time(period.length, config[:relative_format]) + start = period.start.strftime(config['absolute_time']) + stop = period.current? ? ' ' : period.stop.strftime(config['absolute_time']) + length = format_time(period.length, config['relative_format']) "#{day.ljust(12)} #{name.ljust(15)} #{start.ljust(7)} #{stop.ljust(7)} #{length}" } puts table.join("\n") diff --git a/lib/timetrackr.rb b/lib/timetrackr.rb index c93da9b..14a501e 100644 --- a/lib/timetrackr.rb +++ b/lib/timetrackr.rb @@ -2,12 +2,12 @@ autoload 'YamlTimeTrackr', 'timetrackr/yaml' autoload 'SqliteTimeTrackr', 'timetrackr/sqlite' class TimeTrackr - def self.create(type,options={}) + def self.create(type, options={}) case type.to_s when 'yaml' begin require 'yaml' - log = YamlTimeTrackr.new(options[:path]) + log = YamlTimeTrackr.new(options['path']) puts 'Loaded yaml tracker' if $verbose rescue LoadError puts 'Yaml not found' @@ -15,7 +15,7 @@ class TimeTrackr when 'sqlite' begin require 'sqlite3' - log = SqliteTimeTrackr.new(options[:path]) + log = SqliteTimeTrackr.new(options['path']) puts 'Loaded sqlite tracker' if $verbose rescue LoadError puts 'Sqlite not found' @@ -34,7 +34,7 @@ class TimeTrackr end # - # start a period + # start a period with optional notes # def start(task,notes) raise 'Not implemented' diff --git a/lib/timetrackr/sqlite.rb b/lib/timetrackr/sqlite.rb index d51f699..2660376 100644 --- a/lib/timetrackr/sqlite.rb +++ b/lib/timetrackr/sqlite.rb @@ -5,11 +5,11 @@ class SqliteTimeTrackr < TimeTrackr if !File.exist? @log_path @db = SQLite3::Database.new(@log_path) sql_events = "CREATE TABLE events ( - id INTEGER AUTO_INCREMENT PRIMARY KEY, - task VARCHAR(50), - start DATETIME, - stop DATETIME, - notes VARCHAR(255));" + id INTEGER PRIMARY KEY, + task TEXT, + start TIME, + stop TIME, + notes TEXT);" @db.execute(sql_events) else @db = SQLite3::Database.open(@log_path) @@ -43,7 +43,7 @@ class SqliteTimeTrackr < TimeTrackr def stop(task) sql = "SELECT id FROM events WHERE task = :task AND stop IS NULL;" - exists = @db.get_first_value(sql, 'task' => task).first + exists = @db.get_first_value(sql, 'task' => task) if exists sql = "UPDATE events SET stop = :stop WHERE id = :current;" @db.execute(sql, 'current' => exists, 'stop' => Time.now.to_s) diff --git a/test/test_timetrackr.rb b/test/test_timetrackr.rb index 07589a4..b9fb355 100644 --- a/test/test_timetrackr.rb +++ b/test/test_timetrackr.rb @@ -66,11 +66,6 @@ class TestTimetrackr < Test::Unit::TestCase end context 'with empty db' do - setup do - File.open(@config[:path]) do |fh| - @db = YAML.load(fh) - end - end should 'not fail on current command' do assert_nothing_raised Exception do |
