rubyist-jacker 1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. data/Rakefile +21 -0
  2. data/bin/jacker +31 -0
  3. data/lib/jacker.rb +73 -0
  4. metadata +54 -0
data/Rakefile ADDED
@@ -0,0 +1,21 @@
1
+ require 'rake/testtask'
2
+
3
+ task :default => [:test]
4
+
5
+ desc "Unit tests"
6
+ task :test do
7
+ Rake::TestTask.new do |t|
8
+ t.libs << "test"
9
+ t.test_files = FileList['test/test*.rb']
10
+ t.verbose = false
11
+ end
12
+ end
13
+
14
+ namespace :test do
15
+ desc "C0 test coverage"
16
+ task :coverage do
17
+ rm_rf "coverage"
18
+ rcov = "rcov -x rcov\.rb --text-summary -Ilib"
19
+ system("#{rcov} test/test_*.rb")
20
+ end
21
+ end
data/bin/jacker ADDED
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- ruby -*-
3
+ begin
4
+ require 'jacker'
5
+ rescue LoadError
6
+ require 'rubygems'
7
+ require 'jacker'
8
+ end
9
+
10
+ case command = ARGV.shift
11
+ when 'start'
12
+ Jacker.start(ARGV.join(' '))
13
+ when 'stop'
14
+ Jacker.stop
15
+ when 'current'
16
+ puts Jacker.current || ''
17
+ when 'status'
18
+ puts Jacker.status
19
+ when 'report'
20
+ Jacker.report do |entry, start, stop|
21
+ puts "#{start.strftime('%D %H:%M')} #{stop.strftime('%H:%M')} #{entry}"
22
+ end
23
+ when 'reset'
24
+ print "This will kill all entries - are you sure? [yes/N] "
25
+ answer = gets
26
+ if answer.strip.downcase == 'yes'
27
+ Jacker.destroy
28
+ end
29
+ else
30
+ puts "Unknown command `#{command}'"
31
+ end
data/lib/jacker.rb ADDED
@@ -0,0 +1,73 @@
1
+ require 'rubygems'
2
+ require 'sqlite3'
3
+ require 'fileutils'
4
+
5
+ module Jacker
6
+ def self.setup
7
+ return if File.exist?(dbfile)
8
+ db = SQLite3::Database.new(dbfile)
9
+ db.execute("CREATE TABLE IF NOT EXISTS entries(what STRING, start TIMESTAMP, stop TIMESTAMP)")
10
+ db.close
11
+ end
12
+
13
+ def self.destroy
14
+ FileUtils.rm_f(dbfile)
15
+ end
16
+
17
+ def self.start(what)
18
+ self.with_db do |db|
19
+ db.execute("INSERT INTO entries(what, start) VALUES('#{what}', '#{Time.now.to_s}')")
20
+ end
21
+ end
22
+
23
+ def self.stop
24
+ self.with_db do |db|
25
+ db.execute("UPDATE entries SET stop='#{Time.now.to_s}' WHERE stop IS NULL")
26
+ end
27
+ end
28
+
29
+ def self.running?
30
+ results = self.with_db do |db|
31
+ db.execute("SELECT COUNT(what) FROM entries WHERE stop IS NULL")
32
+ end
33
+ results.size > 0 && results[0][0].to_i > 0
34
+ end
35
+
36
+ def self.current
37
+ results = self.with_db do |db|
38
+ db.execute("SELECT what FROM entries WHERE stop IS NULL")
39
+ end
40
+ results.size > 0 ? results[0][0] : nil
41
+ end
42
+
43
+ def self.report
44
+ self.with_db do |db|
45
+ db.execute("SELECT * FROM entries WHERE stop IS NOT NULL").each do |entry|
46
+ start = Time.parse(entry[1])
47
+ stop = Time.parse(entry[2])
48
+ yield(entry[0], start, stop)
49
+ end
50
+ end
51
+ end
52
+
53
+ def self.status
54
+ if running?
55
+ "jacking: #{current}"
56
+ else
57
+ "not jacking"
58
+ end
59
+ end
60
+
61
+ private
62
+ def self.with_db
63
+ setup
64
+ db = SQLite3::Database.new(dbfile)
65
+ results = yield(db)
66
+ db.close
67
+ results
68
+ end
69
+
70
+ def self.dbfile
71
+ ENV['JACKERDB'] || File.join(ENV['HOME'], '.jacker.db')
72
+ end
73
+ end
metadata ADDED
@@ -0,0 +1,54 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubyist-jacker
3
+ version: !ruby/object:Gem::Version
4
+ version: "1.1"
5
+ platform: ruby
6
+ authors:
7
+ - Scott Barron
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-08-13 00:00:00 -07:00
13
+ default_executable: jacker
14
+ dependencies: []
15
+
16
+ description: Jacker is a very simple job tracker.
17
+ email: scott@elitists.net
18
+ executables:
19
+ - jacker
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - Rakefile
26
+ - lib/jacker.rb
27
+ has_rdoc: false
28
+ homepage: http://github.com/rubyist/jacker
29
+ post_install_message:
30
+ rdoc_options: []
31
+
32
+ require_paths:
33
+ - lib
34
+ required_ruby_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: "0"
39
+ version:
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: "0"
45
+ version:
46
+ requirements: []
47
+
48
+ rubyforge_project:
49
+ rubygems_version: 1.2.0
50
+ signing_key:
51
+ specification_version: 2
52
+ summary: Very simple job tracker
53
+ test_files: []
54
+