swatch 0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. data/CHANGELOG.rdoc +0 -0
  2. data/LICENSE +8 -0
  3. data/README.rdoc +4 -0
  4. data/bin/swatch +80 -0
  5. data/lib/swatch.rb +80 -0
  6. metadata +70 -0
File without changes
data/LICENSE ADDED
@@ -0,0 +1,8 @@
1
+ ------------------------------------------------------------------------------
2
+ "THE BEER-WARE LICENSE" (Revision 42):
3
+ <mayeu.tik@gmail.com> wrote this gem. As long as you retain this notice you
4
+ can do whatever you want with this stuff. If we meet some day, and you think
5
+ this stuff is worth it, you can buy me a beer in return. Matthieu Maury
6
+ ------------------------------------------------------------------------------
7
+
8
+
@@ -0,0 +1,4 @@
1
+ = Swatch
2
+
3
+ A simple command line utility in Ruby to track your time.
4
+ Can be use with todo.txt task list.
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #
4
+ #------------------------------------------------------------------------------
5
+ # "THE BEER-WARE LICENSE" (Revision 42):
6
+ # <mayeu.tik@gmail.com> wrote this file. As long as you retain this notice you
7
+ # can do whatever you want with this stuff. If we meet some day, and you think
8
+ # this stuff is worth it, you can buy me a beer in return. Matthieu Maury
9
+ #------------------------------------------------------------------------------
10
+ #
11
+
12
+ require 'trollop'
13
+ require 'swatch'
14
+
15
+ # ###############
16
+ # Global variable
17
+ # ###############
18
+
19
+ CONF_FILE = File.expand_path("~/.swatchrc")
20
+ TRACK_FILE = File.expand_path("~/todo/swatchtrack.txt")
21
+ TODO_FILE = File.expand_path("~/todo/todo.txt")
22
+ VERSION = 0.2
23
+
24
+ # #####################
25
+ # Subcommand definition
26
+ # #####################
27
+
28
+ SUB_COMMANDS = %w(in i out o what w report r)
29
+ global_opts = Trollop::options do
30
+ version VERSION
31
+ banner <<-EOS
32
+ Swatch, a command line utility to track the time you spend.
33
+ swatch [-hv] <command> <command options> <command arg>
34
+
35
+ You can have detailled instruction on a command with:
36
+ swatch -h <command>
37
+
38
+ in, i: launch the time tracker
39
+ swatch in "task"
40
+ out, o: stop the current running task
41
+ swatch out
42
+ what, w: print the current task on stdout
43
+ swatch what
44
+ EOS
45
+ stop_on SUB_COMMANDS
46
+ end
47
+
48
+ cmd = ARGV.shift # get the subcommand
49
+ cmd_opts = case cmd
50
+ when "in", "i"
51
+ # TODO add todo.txt support
52
+ Trollop::options do
53
+ opt :todo, "Track a todo.txt task", :type => :int, :short => "-t"
54
+ end
55
+ when "out", "o"
56
+ when "what" || "w"
57
+ when "report" || "r"
58
+ end
59
+
60
+ #puts "Global options: #{global_opts.inspect}"
61
+ #puts "Subcommand: #{cmd.inspect}"
62
+ #puts "Subcommand options: #{cmd_opts.inspect}"
63
+ #puts "Remaining arguments: #{ARGV.inspect}"
64
+
65
+ # Now we have the arg. So, what do we do ?
66
+
67
+ case cmd
68
+ when "in", "i"
69
+ unless cmd_opts[:todo]
70
+ Swatch::task_in ARGV.join(" ").chomp
71
+ else
72
+ Swatch::task_in_todo cmd_opts[:todo]
73
+ end
74
+ when "out", "o"
75
+ Swatch::task_out
76
+ when "what" || "w"
77
+ when "report" || "r"
78
+ end
79
+
80
+
@@ -0,0 +1,80 @@
1
+ module Swatch
2
+
3
+ module_function
4
+
5
+ # Test if there is a task currently running. Return true if there is
6
+ def running_task?
7
+ line = ''
8
+ IO.popen("tail -n 1 #{TRACK_FILE}") { |f| line = f.gets }
9
+ #puts line
10
+ if(line != nil && (!line.match '^.+\t\d+\t\d+$'))
11
+ true
12
+ else
13
+ false
14
+ end
15
+ end
16
+
17
+ # Return the name of the last task
18
+ def get_last_task_name
19
+ line = ''
20
+ IO.popen("tail -n 1 #{TRACK_FILE}") { |f| line = f.gets }
21
+ m = line.match '^(.+)\t\d+(\t\d+)?'
22
+ m[1]
23
+ end
24
+
25
+ # Go out of the current task running
26
+ def task_out
27
+ if running_task?
28
+ puts "Stop task: " + get_last_task_name
29
+ f = File.open(TRACK_FILE, "a")
30
+ f.print "\t#{Time.now.to_i}\n"
31
+ f.close
32
+ else
33
+ puts "There is no task running"
34
+ end
35
+ end
36
+
37
+ # Start a task
38
+ def task_in (task)
39
+ # don't go here if ARGV is null !
40
+ if task.strip.empty?
41
+ puts "No task specified"
42
+ exit
43
+ end
44
+
45
+ # if there is a task running, we get out of it
46
+ if running_task?
47
+ #puts "There is a task running, getting out of this one"
48
+ task_out
49
+ end
50
+
51
+ if(!File.exist?(TRACK_FILE))
52
+ #puts "Create a new task file"
53
+ out = File.new(TRACK_FILE, "w")
54
+ else
55
+ #puts "Use #{TRACK_FILE}"
56
+ out = File.open(TRACK_FILE, "a")
57
+ end
58
+
59
+ #print the task in the file
60
+ out.print "#{task}\t#{Time.now.to_i}"
61
+ out.close
62
+
63
+ puts "Start task: #{task}"
64
+ end
65
+
66
+ # Return the todo associated to the given number
67
+ def get_todo (nb)
68
+ IO.readlines(TODO_FILE)[nb-1]
69
+ end
70
+
71
+ # Going in a task with a todo from todo.txt
72
+ def task_in_todo (nb)
73
+ t = get_todo (nb)
74
+ if t
75
+ task_in t.chomp
76
+ else
77
+ puts "No task specified"
78
+ end
79
+ end
80
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: swatch
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 2
8
+ version: "0.2"
9
+ platform: ruby
10
+ authors:
11
+ - Matthieu Maury
12
+ autorequire:
13
+ bindir: bin
14
+ cert_chain: []
15
+
16
+ date: 2010-12-24 00:00:00 +01:00
17
+ default_executable:
18
+ dependencies: []
19
+
20
+ description: |
21
+ Swatch is a simple timetracking script in Ruby.
22
+ It can be used in conjonction of the todo.txt script
23
+
24
+ email: mayeu.tik@gmail.com
25
+ executables:
26
+ - swatch
27
+ extensions: []
28
+
29
+ extra_rdoc_files: []
30
+
31
+ files:
32
+ - lib/swatch.rb
33
+ - README.rdoc
34
+ - CHANGELOG.rdoc
35
+ - LICENSE
36
+ - bin/swatch
37
+ has_rdoc: true
38
+ homepage: http://github.com/Mayeutik/swatch
39
+ licenses: []
40
+
41
+ post_install_message:
42
+ rdoc_options: []
43
+
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ segments:
52
+ - 0
53
+ version: "0"
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ requirements: []
63
+
64
+ rubyforge_project:
65
+ rubygems_version: 1.3.7
66
+ signing_key:
67
+ specification_version: 3
68
+ summary: A simple cli timetracking script that can be use with todo.txt
69
+ test_files: []
70
+