floormanager 0.2.1 → 0.3.0
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/Gemfile +13 -0
- data/Gemfile.lock +20 -0
- data/Rakefile +35 -28
- data/VERSION +1 -1
- data/examples/twitter.rb +2 -2
- data/floormanager.gemspec +33 -30
- data/lib/floormanager/queue.rb +13 -49
- data/lib/floormanager/workers.rb +9 -4
- data/test/helper.rb +18 -0
- data/test/test_floormanager.rb +32 -0
- metadata +69 -20
- data/.gitignore +0 -21
- data/spec/floormanager_spec.rb +0 -7
- data/spec/spec.opts +0 -1
- data/spec/spec_helper.rb +0 -9
data/Gemfile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
# Add dependencies required to use your gem here.
|
3
|
+
# Example:
|
4
|
+
# gem "activesupport", ">= 2.3.5"
|
5
|
+
|
6
|
+
# Add dependencies to develop your gem here.
|
7
|
+
# Include everything needed to run rake, tests, features, etc.
|
8
|
+
group :development do
|
9
|
+
gem "shoulda", ">= 0"
|
10
|
+
gem "bundler", "~> 1.0.0"
|
11
|
+
gem "jeweler", "~> 1.6.2"
|
12
|
+
gem "rcov", ">= 0"
|
13
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
git (1.2.5)
|
5
|
+
jeweler (1.6.2)
|
6
|
+
bundler (~> 1.0)
|
7
|
+
git (>= 1.2.5)
|
8
|
+
rake
|
9
|
+
rake (0.9.2)
|
10
|
+
rcov (0.9.9)
|
11
|
+
shoulda (2.11.3)
|
12
|
+
|
13
|
+
PLATFORMS
|
14
|
+
ruby
|
15
|
+
|
16
|
+
DEPENDENCIES
|
17
|
+
bundler (~> 1.0.0)
|
18
|
+
jeweler (~> 1.6.2)
|
19
|
+
rcov
|
20
|
+
shoulda
|
data/Rakefile
CHANGED
@@ -1,45 +1,52 @@
|
|
1
|
-
|
2
|
-
require 'rake'
|
1
|
+
# encoding: utf-8
|
3
2
|
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
4
5
|
begin
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
gem.email = "inge@elektronaut.no"
|
11
|
-
gem.homepage = "http://github.com/elektronaut/floormanager"
|
12
|
-
gem.authors = ["Inge Jørgensen"]
|
13
|
-
gem.add_development_dependency "rspec", ">= 1.3.0"
|
14
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
|
-
end
|
16
|
-
Jeweler::GemcutterTasks.new
|
17
|
-
rescue LoadError
|
18
|
-
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
19
11
|
end
|
12
|
+
require 'rake'
|
20
13
|
|
21
|
-
require '
|
22
|
-
|
23
|
-
|
24
|
-
|
14
|
+
require 'jeweler'
|
15
|
+
Jeweler::Tasks.new do |gem|
|
16
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
+
gem.name = "floormanager"
|
18
|
+
gem.summary = %Q{Handle threaded workers like a champ}
|
19
|
+
gem.description = %Q{Simple ruby library for handling threaded workers operating on a queue}
|
20
|
+
gem.email = "inge@elektronaut.no"
|
21
|
+
gem.homepage = "http://github.com/elektronaut/floormanager"
|
22
|
+
gem.authors = ["Inge Jørgensen"]
|
23
|
+
# dependencies defined in Gemfile
|
25
24
|
end
|
25
|
+
Jeweler::RubygemsDotOrgTasks.new
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
27
|
+
require 'rake/testtask'
|
28
|
+
Rake::TestTask.new(:test) do |test|
|
29
|
+
test.libs << 'lib' << 'test'
|
30
|
+
test.pattern = 'test/**/test_*.rb'
|
31
|
+
test.verbose = true
|
31
32
|
end
|
32
33
|
|
33
|
-
|
34
|
+
require 'rcov/rcovtask'
|
35
|
+
Rcov::RcovTask.new do |test|
|
36
|
+
test.libs << 'test'
|
37
|
+
test.pattern = 'test/**/test_*.rb'
|
38
|
+
test.verbose = true
|
39
|
+
test.rcov_opts << '--exclude "gems/*"'
|
40
|
+
end
|
34
41
|
|
35
|
-
task :default => :
|
42
|
+
task :default => :test
|
36
43
|
|
37
44
|
require 'rake/rdoctask'
|
38
45
|
Rake::RDocTask.new do |rdoc|
|
39
46
|
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
40
47
|
|
41
48
|
rdoc.rdoc_dir = 'rdoc'
|
42
|
-
rdoc.title = "
|
49
|
+
rdoc.title = "mygem #{version}"
|
43
50
|
rdoc.rdoc_files.include('README*')
|
44
51
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
45
|
-
end
|
52
|
+
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/examples/twitter.rb
CHANGED
@@ -36,13 +36,13 @@ class Twitter
|
|
36
36
|
workers.perform(:threads => @concurrency) do |query_string|
|
37
37
|
retries = 0
|
38
38
|
begin
|
39
|
-
results = self.class.get('/search.json', :query => {:q => "
|
39
|
+
results = self.class.get('/search.json', :query => {:q => "#{query_string}"})
|
40
40
|
# Handle rate limiting
|
41
41
|
if results.code == 420
|
42
42
|
if result.headers['retry-after']
|
43
43
|
retry_delay = result.headers['retry-after'].first.to_i
|
44
44
|
else
|
45
|
-
retry_delay =
|
45
|
+
retry_delay = @retry_delay
|
46
46
|
end
|
47
47
|
workers.halt(retry_delay) # Halt all workers for the retry delay
|
48
48
|
retry
|
data/floormanager.gemspec
CHANGED
@@ -1,61 +1,64 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{floormanager}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Inge J\303\270rgensen"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-06-17}
|
13
13
|
s.description = %q{Simple ruby library for handling threaded workers operating on a queue}
|
14
14
|
s.email = %q{inge@elektronaut.no}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
17
|
-
|
17
|
+
"README.rdoc"
|
18
18
|
]
|
19
19
|
s.files = [
|
20
20
|
".document",
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
21
|
+
"Gemfile",
|
22
|
+
"Gemfile.lock",
|
23
|
+
"LICENSE",
|
24
|
+
"README.rdoc",
|
25
|
+
"Rakefile",
|
26
|
+
"VERSION",
|
27
|
+
"examples/twitter.rb",
|
28
|
+
"floormanager.gemspec",
|
29
|
+
"lib/floormanager.rb",
|
30
|
+
"lib/floormanager/queue.rb",
|
31
|
+
"lib/floormanager/result.rb",
|
32
|
+
"lib/floormanager/states.rb",
|
33
|
+
"lib/floormanager/workers.rb",
|
34
|
+
"test/helper.rb",
|
35
|
+
"test/test_floormanager.rb"
|
36
36
|
]
|
37
37
|
s.homepage = %q{http://github.com/elektronaut/floormanager}
|
38
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
39
38
|
s.require_paths = ["lib"]
|
40
|
-
s.rubygems_version = %q{1.3.
|
39
|
+
s.rubygems_version = %q{1.3.7}
|
41
40
|
s.summary = %q{Handle threaded workers like a champ}
|
42
|
-
s.test_files = [
|
43
|
-
"spec/floormanager_spec.rb",
|
44
|
-
"spec/spec_helper.rb",
|
45
|
-
"examples/twitter.rb"
|
46
|
-
]
|
47
41
|
|
48
42
|
if s.respond_to? :specification_version then
|
49
43
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
50
44
|
s.specification_version = 3
|
51
45
|
|
52
|
-
if Gem::Version.new(Gem::
|
53
|
-
s.add_development_dependency(%q<
|
46
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
47
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
48
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
49
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.6.2"])
|
50
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
54
51
|
else
|
55
|
-
s.add_dependency(%q<
|
52
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
53
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
54
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
|
55
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
56
56
|
end
|
57
57
|
else
|
58
|
-
s.add_dependency(%q<
|
58
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
59
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
60
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
|
61
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
59
62
|
end
|
60
63
|
end
|
61
64
|
|
data/lib/floormanager/queue.rb
CHANGED
@@ -14,22 +14,18 @@ module FloorManager
|
|
14
14
|
@queue << {
|
15
15
|
:item => item,
|
16
16
|
:value => nil,
|
17
|
-
:state => States::PENDING
|
17
|
+
:state => States::PENDING,
|
18
|
+
:index => @queue.length
|
18
19
|
}
|
19
20
|
end
|
20
21
|
alias :<< :add
|
21
22
|
|
22
|
-
# Get
|
23
|
-
def
|
24
|
-
|
23
|
+
# Get an item in the queue
|
24
|
+
def get_item(index)
|
25
|
+
@queue[index]
|
25
26
|
end
|
26
|
-
alias :[] :
|
27
|
+
alias :[] :get_item
|
27
28
|
|
28
|
-
# Returns all the items in the queue
|
29
|
-
def keys
|
30
|
-
@queue.map{|i| i[:item]}
|
31
|
-
end
|
32
|
-
|
33
29
|
# Returns each item with value, hash style
|
34
30
|
def each
|
35
31
|
@queue.each{|item| yield item[:item], item[:value]}
|
@@ -40,7 +36,7 @@ module FloorManager
|
|
40
36
|
if pending?
|
41
37
|
item = pending_items.first
|
42
38
|
item[:state] = States::CHECKED_OUT
|
43
|
-
item
|
39
|
+
item
|
44
40
|
else
|
45
41
|
nil
|
46
42
|
end
|
@@ -48,13 +44,11 @@ module FloorManager
|
|
48
44
|
|
49
45
|
# Check in an item with a new value, optionally with a state
|
50
46
|
# (which defaults to SUCCESS)
|
51
|
-
def checkin(item,
|
52
|
-
if
|
53
|
-
item =
|
54
|
-
item[:value] = value
|
55
|
-
item[:state] = state
|
47
|
+
def checkin(item, state=States::SUCCESS)
|
48
|
+
if item.kind_of?(Hash) && @queue[item[:index]][:item] == item[:item]
|
49
|
+
@queue[item[:index]] = item.merge({:state => state})
|
56
50
|
else
|
57
|
-
|
51
|
+
invalid_item!
|
58
52
|
end
|
59
53
|
end
|
60
54
|
|
@@ -98,41 +92,11 @@ module FloorManager
|
|
98
92
|
failed_items.map{|i| i[:item]}
|
99
93
|
end
|
100
94
|
|
101
|
-
# Get the state of an item
|
102
|
-
def state(key)
|
103
|
-
(item = get_item(key)) ? item[:state] : invalid_key!
|
104
|
-
end
|
105
|
-
|
106
|
-
# Is this item processed?
|
107
|
-
def processed?(key)
|
108
|
-
state(key) > States::PENDING
|
109
|
-
end
|
110
|
-
|
111
|
-
# Is this item checked out?
|
112
|
-
def checked_out?(key)
|
113
|
-
state(key) == States::CHECKED_OUT
|
114
|
-
end
|
115
|
-
|
116
|
-
# Did this item fail?
|
117
|
-
def failed?(key)
|
118
|
-
state(key) == States::FAILED
|
119
|
-
end
|
120
|
-
|
121
|
-
# Did this item succeed?
|
122
|
-
def success?(key)
|
123
|
-
state(key) == States::SUCCESS
|
124
|
-
end
|
125
|
-
|
126
|
-
# Is this item completed?
|
127
|
-
def completed?(key)
|
128
|
-
state(key) >= States::FAILED
|
129
|
-
end
|
130
|
-
|
131
95
|
private
|
132
96
|
|
133
97
|
# Handle invalid keys
|
134
|
-
def
|
135
|
-
raise ArgumentError, "Invalid
|
98
|
+
def invalid_item!
|
99
|
+
raise ArgumentError, "Invalid item: #{item.inspect}"
|
136
100
|
end
|
137
101
|
|
138
102
|
# Get an item by key
|
data/lib/floormanager/workers.rb
CHANGED
@@ -9,21 +9,26 @@ module FloorManager
|
|
9
9
|
attr_reader :queue
|
10
10
|
|
11
11
|
def perform(options={})
|
12
|
-
options = {:threads => 1}.merge(options)
|
12
|
+
options = {:threads => 1, :timeout => false}.merge(options)
|
13
13
|
threads = (0...options[:threads]).to_a.map do |thread_id|
|
14
14
|
Thread.new do
|
15
15
|
until queue.done?
|
16
16
|
if item = checkout
|
17
|
-
result = yield(item)
|
17
|
+
result = yield(item[:item])
|
18
18
|
result = Result.new(result, (result.state rescue States::SUCCESS))
|
19
|
-
|
19
|
+
item[:value] = result
|
20
|
+
checkin(item, result.state)
|
20
21
|
else
|
21
22
|
Thread.pass
|
22
23
|
end
|
23
24
|
end
|
24
25
|
end
|
25
26
|
end
|
26
|
-
|
27
|
+
if options[:timeout]
|
28
|
+
threads.each{|t| t.join(options[:timeout])}
|
29
|
+
else
|
30
|
+
threads.each{|t| t.join}
|
31
|
+
end
|
27
32
|
@queue
|
28
33
|
end
|
29
34
|
|
data/test/helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
require 'test/unit'
|
11
|
+
require 'shoulda'
|
12
|
+
|
13
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
14
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
15
|
+
require 'floormanager'
|
16
|
+
|
17
|
+
class Test::Unit::TestCase
|
18
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestFloorManager < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "a processed queue" do
|
6
|
+
setup do
|
7
|
+
workers = FloorManager::Workers.new([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
|
8
|
+
@results = workers.perform(:threads => 5) do |number|
|
9
|
+
number * 10
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
should "process a queue" do
|
14
|
+
@results.each do |original, result|
|
15
|
+
assert_equal (original * 10), result
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'a queue with non-unique items' do
|
21
|
+
setup do
|
22
|
+
@queue = FloorManager::Queue.new(['a', 'a', 'b', 'c'])
|
23
|
+
end
|
24
|
+
|
25
|
+
should "not hang" do
|
26
|
+
FloorManager::Workers.new(@queue).perform(:threads => 5) do |item|
|
27
|
+
end
|
28
|
+
assert true # The processes will simply hang here if not
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: floormanager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 19
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 0.3.0
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- "Inge J\xC3\xB8rgensen"
|
@@ -14,23 +15,69 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date:
|
18
|
+
date: 2011-06-17 00:00:00 +02:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
|
-
|
22
|
+
type: :development
|
22
23
|
prerelease: false
|
23
|
-
|
24
|
+
name: shoulda
|
25
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
24
27
|
requirements:
|
25
28
|
- - ">="
|
26
29
|
- !ruby/object:Gem::Version
|
30
|
+
hash: 3
|
31
|
+
segments:
|
32
|
+
- 0
|
33
|
+
version: "0"
|
34
|
+
requirement: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
type: :development
|
37
|
+
prerelease: false
|
38
|
+
name: bundler
|
39
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 23
|
27
45
|
segments:
|
28
46
|
- 1
|
29
|
-
- 3
|
30
47
|
- 0
|
31
|
-
|
48
|
+
- 0
|
49
|
+
version: 1.0.0
|
50
|
+
requirement: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
32
52
|
type: :development
|
33
|
-
|
53
|
+
prerelease: false
|
54
|
+
name: jeweler
|
55
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ~>
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 11
|
61
|
+
segments:
|
62
|
+
- 1
|
63
|
+
- 6
|
64
|
+
- 2
|
65
|
+
version: 1.6.2
|
66
|
+
requirement: *id003
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
name: rcov
|
71
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
hash: 3
|
77
|
+
segments:
|
78
|
+
- 0
|
79
|
+
version: "0"
|
80
|
+
requirement: *id004
|
34
81
|
description: Simple ruby library for handling threaded workers operating on a queue
|
35
82
|
email: inge@elektronaut.no
|
36
83
|
executables: []
|
@@ -42,7 +89,8 @@ extra_rdoc_files:
|
|
42
89
|
- README.rdoc
|
43
90
|
files:
|
44
91
|
- .document
|
45
|
-
-
|
92
|
+
- Gemfile
|
93
|
+
- Gemfile.lock
|
46
94
|
- LICENSE
|
47
95
|
- README.rdoc
|
48
96
|
- Rakefile
|
@@ -54,40 +102,41 @@ files:
|
|
54
102
|
- lib/floormanager/result.rb
|
55
103
|
- lib/floormanager/states.rb
|
56
104
|
- lib/floormanager/workers.rb
|
57
|
-
-
|
58
|
-
-
|
59
|
-
- spec/spec_helper.rb
|
105
|
+
- test/helper.rb
|
106
|
+
- test/test_floormanager.rb
|
60
107
|
has_rdoc: true
|
61
108
|
homepage: http://github.com/elektronaut/floormanager
|
62
109
|
licenses: []
|
63
110
|
|
64
111
|
post_install_message:
|
65
|
-
rdoc_options:
|
66
|
-
|
112
|
+
rdoc_options: []
|
113
|
+
|
67
114
|
require_paths:
|
68
115
|
- lib
|
69
116
|
required_ruby_version: !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
70
118
|
requirements:
|
71
119
|
- - ">="
|
72
120
|
- !ruby/object:Gem::Version
|
121
|
+
hash: 3
|
73
122
|
segments:
|
74
123
|
- 0
|
75
124
|
version: "0"
|
76
125
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
126
|
+
none: false
|
77
127
|
requirements:
|
78
128
|
- - ">="
|
79
129
|
- !ruby/object:Gem::Version
|
130
|
+
hash: 3
|
80
131
|
segments:
|
81
132
|
- 0
|
82
133
|
version: "0"
|
83
134
|
requirements: []
|
84
135
|
|
85
136
|
rubyforge_project:
|
86
|
-
rubygems_version: 1.3.
|
137
|
+
rubygems_version: 1.3.7
|
87
138
|
signing_key:
|
88
139
|
specification_version: 3
|
89
140
|
summary: Handle threaded workers like a champ
|
90
|
-
test_files:
|
91
|
-
|
92
|
-
- spec/spec_helper.rb
|
93
|
-
- examples/twitter.rb
|
141
|
+
test_files: []
|
142
|
+
|
data/.gitignore
DELETED
data/spec/floormanager_spec.rb
DELETED
data/spec/spec.opts
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--color
|