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.
- data/Rakefile +21 -0
- data/bin/jacker +31 -0
- data/lib/jacker.rb +73 -0
- 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
|
+
|