swatch 0.2.2 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,20 @@
1
+ = Changelog
2
+
3
+ == 0.3
4
+ * Add test for the library
5
+ * Add the elapsed time when you go out a task
6
+ * Remove the priority of todo.txt in the .swatch.txt file
7
+ * Clean some comment
8
+ * Correct bug discovered by the newly created test
9
+
10
+ == 0.2.2
11
+ Minor update to add dependencies to Trollop and parseconfig
12
+
13
+ == 0.2.1
14
+ Minor update to add config file support
15
+
16
+ == 0.2
17
+ Add a simple support of todo.txt
18
+
19
+ == 0.1
20
+ First usable version, with no support of todo.txt
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,29 @@
1
+ = Swatch
2
+
3
+ A simple command line utility in Ruby to track your time.
4
+ Can be use with todo.txt task list.
5
+
6
+ == Usage
7
+
8
+ swatch command [option] arg
9
+
10
+ Going in a task :
11
+ swatch in My awesome task
12
+
13
+ Getting out:
14
+ swatch out
15
+
16
+ Timing a todo.txt task:
17
+ swatch in -t 42
18
+
19
+ == Config
20
+
21
+ Swatch look for the ~/.swatchrc file. If it's present swatch will parse it to get track_file and todo_file path.
22
+ Exemple :
23
+ track_file = "~/todo/swatchtrack.txt"
24
+ todo_file = "~/todo/todo.txt"
25
+
26
+ By default (i.e if there is no ~/.swatchrc file), swatch will look for todo file in ~/.todo.txt and track_file in ~/.swatch.txt.
27
+
28
+ == Todo
29
+ * parse todo to remove the priority
data/bin/swatch CHANGED
@@ -10,15 +10,16 @@
10
10
  #
11
11
 
12
12
  require 'trollop'
13
- require 'swatch'
14
- require ('parseconfig')
13
+ require 'parseconfig'
14
+
15
+ require_relative '../lib/swatch'
15
16
 
16
17
  # ###############
17
18
  # Global variable
18
19
  # ###############
19
20
 
20
21
  CONF_FILE = File.expand_path("~/.swatchrc")
21
- VERSION = '0.2.2'
22
+ VERSION = '0.3'
22
23
 
23
24
  if File.exist? CONF_FILE
24
25
  config = ParseConfig.new(CONF_FILE)
@@ -83,5 +84,3 @@ when "out", "o"
83
84
  when "what" || "w"
84
85
  when "report" || "r"
85
86
  end
86
-
87
-
@@ -0,0 +1,26 @@
1
+ #
2
+ # Extend the numeric class with the "duration" method that print a
3
+ # duration in human langage.
4
+ # This code was found at:
5
+ # http://stackoverflow.com/questions/1679266/can-ruby-print-out-time-difference-duration-readily
6
+ #
7
+
8
+ class Numeric
9
+ def duration
10
+ secs = self.to_int
11
+ mins = secs / 60
12
+ hours = mins / 60
13
+ days = hours / 24
14
+
15
+ if days > 0
16
+ "#{days} days and #{hours % 24} hours"
17
+ elsif hours > 0
18
+ "#{hours} hours and #{mins % 60} minutes"
19
+ elsif mins > 0
20
+ "#{mins} minutes and #{secs % 60} seconds"
21
+ elsif secs >= 0
22
+ "#{secs} seconds"
23
+ end
24
+ end
25
+ end
26
+
@@ -7,6 +7,8 @@
7
7
  #------------------------------------------------------------------------------
8
8
  #
9
9
 
10
+ require_relative './numeric.rb'
11
+
10
12
  module Swatch
11
13
 
12
14
  module_function
@@ -23,23 +25,45 @@ module Swatch
23
25
  end
24
26
  end
25
27
 
28
+ # Return the start time of a running task
29
+ def get_last_task_stime
30
+ line = ''
31
+ IO.popen("tail -n 1 #{TRACK_FILE}") { |f| line = f.gets }
32
+ if line == nil
33
+ return false
34
+ end
35
+
36
+ line.split("\t").pop
37
+ end
38
+
26
39
  # Return the name of the last task
27
40
  def get_last_task_name
28
41
  line = ''
29
42
  IO.popen("tail -n 1 #{TRACK_FILE}") { |f| line = f.gets }
30
- m = line.match '^(.+)\t\d+(\t\d+)?'
31
- m[1]
43
+ if line == nil
44
+ return false
45
+ end
46
+
47
+ line = line.split "\t"
48
+ if running_task?
49
+ line.pop
50
+ else
51
+ line.pop 2
52
+ end
53
+ line.join "\t"
32
54
  end
33
55
 
34
56
  # Go out of the current task running
35
57
  def task_out
36
58
  if running_task?
37
- puts "Stop task: " + get_last_task_name
38
- f = File.open(TRACK_FILE, "a")
39
- f.print "\t#{Time.now.to_i}\n"
40
- f.close
59
+ puts "Stop task: " + get_last_task_name + ", #{(Time.now.to_i - get_last_task_stime.to_i).duration}"
60
+ open(TRACK_FILE, "a"){|f|
61
+ f.print "\t#{Time.now.to_i}\n"
62
+ }
63
+ return true
41
64
  else
42
65
  puts "There is no task running"
66
+ return false
43
67
  end
44
68
  end
45
69
 
@@ -48,7 +72,7 @@ module Swatch
48
72
  # don't go here if ARGV is null !
49
73
  if task.strip.empty?
50
74
  puts "No task specified"
51
- exit
75
+ return false
52
76
  end
53
77
 
54
78
  # if there is a task running, we get out of it
@@ -70,12 +94,17 @@ module Swatch
70
94
  out.close
71
95
 
72
96
  puts "Start task: #{task}"
97
+ return true
73
98
  end
74
99
 
75
100
  # Return the todo associated to the given number
76
101
  def get_todo (nb)
77
102
  # TODO: parse todo to remove the priority
78
- IO.readlines(TODO_FILE)[nb-1]
103
+ line = IO.readlines(TODO_FILE)[nb-1]
104
+ if line.match '^\(([A-Z])\)'
105
+ line.slice!(0..4)
106
+ end
107
+ line
79
108
  end
80
109
 
81
110
  # Going in a task with a todo from todo.txt
metadata CHANGED
@@ -1,77 +1,79 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: swatch
3
- version: !ruby/object:Gem::Version
4
- version: 0.2.2
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.3'
5
+ prerelease:
5
6
  platform: ruby
6
- authors:
7
+ authors:
7
8
  - Matthieu Maury
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
-
12
- date: 2011-01-24 00:00:00 +01:00
12
+ date: 2011-03-03 00:00:00.000000000 +01:00
13
13
  default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
16
  name: trollop
17
+ requirement: &13186500 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
17
23
  type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: "0"
24
- version:
25
- - !ruby/object:Gem::Dependency
24
+ prerelease: false
25
+ version_requirements: *13186500
26
+ - !ruby/object:Gem::Dependency
26
27
  name: parseconfig
28
+ requirement: &13186060 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
27
34
  type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: "0"
34
- version:
35
- description: |
36
- Swatch is a simple timetracking script in Ruby.
35
+ prerelease: false
36
+ version_requirements: *13186060
37
+ description: ! 'Swatch is a simple timetracking script in Ruby.
38
+
37
39
  It can be used in conjonction of the todo.txt script
38
40
 
41
+ '
39
42
  email: mayeu.tik@gmail.com
40
- executables:
43
+ executables:
41
44
  - swatch
42
45
  extensions: []
43
-
44
46
  extra_rdoc_files: []
45
-
46
- files:
47
+ files:
47
48
  - lib/swatch.rb
49
+ - lib/numeric.rb
50
+ - README.rdoc
51
+ - CHANGELOG.rdoc
52
+ - LICENSE
53
+ - bin/swatch
48
54
  has_rdoc: true
49
55
  homepage: http://github.com/Mayeutik/swatch
50
56
  licenses: []
51
-
52
57
  post_install_message:
53
58
  rdoc_options: []
54
-
55
- require_paths:
59
+ require_paths:
56
60
  - lib
57
- required_ruby_version: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: "0"
62
- version:
63
- required_rubygems_version: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: "0"
68
- version:
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
69
73
  requirements: []
70
-
71
74
  rubyforge_project:
72
- rubygems_version: 1.3.5
75
+ rubygems_version: 1.6.0
73
76
  signing_key:
74
77
  specification_version: 3
75
78
  summary: A simple cli timetracking script that can be use with todo.txt
76
79
  test_files: []
77
-