curb_threadpool 0.5.2 → 0.6.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.
- checksums.yaml +7 -0
- data/Gemfile +16 -7
- data/VERSION +1 -1
- data/curb_threadpool.gemspec +36 -24
- data/lib/curb_threadpool.rb +93 -32
- data/test/helper.rb +7 -3
- data/test/test_curb_threadpool.rb +86 -3
- metadata +174 -144
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: dea25e638cb62f03dc2279dfe54ffdccc953c0f5
|
4
|
+
data.tar.gz: 830d96224e24f871ba618e9dfb2aae359bd66827
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a4dca1c08fe2cfbab46425d8a6da4107af61f34b841ac2868d5a806954ce62398eb272352e68a40713a899c3d93989ac5511fa20311b97bf0f21651f87600b28
|
7
|
+
data.tar.gz: 371902e8e65bcb3c2f5b37040e7d4b366872c8e2bef25e7d7fbb35674f2dc9f22353ed6a9b3788c32e9d76f38ab8f21ea7d9d55a8818ac1e92579cdde8d982b4
|
data/Gemfile
CHANGED
@@ -1,12 +1,21 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
|
+
gem "curb"
|
4
|
+
|
3
5
|
group :development do
|
4
6
|
gem "yard"
|
5
|
-
gem "
|
6
|
-
gem "
|
7
|
-
|
8
|
-
gem "
|
9
|
-
gem "
|
10
|
-
|
11
|
-
gem "
|
7
|
+
gem "bundler"
|
8
|
+
gem "jeweler"
|
9
|
+
|
10
|
+
gem "minitest", "<5.0"
|
11
|
+
gem "webmock"
|
12
|
+
|
13
|
+
gem "rcov", :platforms => :mri_18
|
14
|
+
gem "simplecov", :platforms => [:mri_19, :mri_20]
|
15
|
+
|
16
|
+
# test utils
|
17
|
+
gem "test_guard", :git => "https://github.com/chetan/test_guard.git"
|
18
|
+
gem 'rb-inotify', :require => false
|
19
|
+
gem 'rb-fsevent', :require => false
|
20
|
+
gem 'rb-fchange', :require => false
|
12
21
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.6.0
|
data/curb_threadpool.gemspec
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.
|
7
|
+
s.name = "curb_threadpool"
|
8
|
+
s.version = "0.6.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Chetan Sarva"]
|
12
|
-
s.date =
|
13
|
-
s.description =
|
14
|
-
s.email =
|
12
|
+
s.date = "2013-07-31"
|
13
|
+
s.description = "A multi-threaded worker pool for Curb"
|
14
|
+
s.email = "chetan@pixelcop.net"
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
17
17
|
"README.md"
|
@@ -27,43 +27,55 @@ Gem::Specification.new do |s|
|
|
27
27
|
"test/helper.rb",
|
28
28
|
"test/test_curb_threadpool.rb"
|
29
29
|
]
|
30
|
-
s.homepage =
|
30
|
+
s.homepage = "http://github.com/chetan/curb_threadpool"
|
31
31
|
s.licenses = ["BSD"]
|
32
32
|
s.require_paths = ["lib"]
|
33
|
-
s.rubygems_version =
|
34
|
-
s.summary =
|
33
|
+
s.rubygems_version = "2.0.3"
|
34
|
+
s.summary = "A multi-threaded worker pool for Curb"
|
35
35
|
|
36
36
|
if s.respond_to? :specification_version then
|
37
|
-
s.specification_version =
|
37
|
+
s.specification_version = 4
|
38
38
|
|
39
39
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
40
|
+
s.add_runtime_dependency(%q<curb>, [">= 0"])
|
40
41
|
s.add_development_dependency(%q<yard>, [">= 0"])
|
41
|
-
s.add_development_dependency(%q<
|
42
|
-
s.add_development_dependency(%q<
|
43
|
-
s.add_development_dependency(%q<
|
44
|
-
s.add_development_dependency(%q<
|
45
|
-
s.add_development_dependency(%q<jeweler>, ["~> 1.8.3"])
|
42
|
+
s.add_development_dependency(%q<bundler>, [">= 0"])
|
43
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
44
|
+
s.add_development_dependency(%q<minitest>, ["< 5.0"])
|
45
|
+
s.add_development_dependency(%q<webmock>, [">= 0"])
|
46
46
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
47
47
|
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
48
|
+
s.add_development_dependency(%q<test_guard>, [">= 0"])
|
49
|
+
s.add_development_dependency(%q<rb-inotify>, [">= 0"])
|
50
|
+
s.add_development_dependency(%q<rb-fsevent>, [">= 0"])
|
51
|
+
s.add_development_dependency(%q<rb-fchange>, [">= 0"])
|
48
52
|
else
|
53
|
+
s.add_dependency(%q<curb>, [">= 0"])
|
49
54
|
s.add_dependency(%q<yard>, [">= 0"])
|
50
|
-
s.add_dependency(%q<
|
51
|
-
s.add_dependency(%q<
|
52
|
-
s.add_dependency(%q<
|
53
|
-
s.add_dependency(%q<
|
54
|
-
s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
|
55
|
+
s.add_dependency(%q<bundler>, [">= 0"])
|
56
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
57
|
+
s.add_dependency(%q<minitest>, ["< 5.0"])
|
58
|
+
s.add_dependency(%q<webmock>, [">= 0"])
|
55
59
|
s.add_dependency(%q<rcov>, [">= 0"])
|
56
60
|
s.add_dependency(%q<simplecov>, [">= 0"])
|
61
|
+
s.add_dependency(%q<test_guard>, [">= 0"])
|
62
|
+
s.add_dependency(%q<rb-inotify>, [">= 0"])
|
63
|
+
s.add_dependency(%q<rb-fsevent>, [">= 0"])
|
64
|
+
s.add_dependency(%q<rb-fchange>, [">= 0"])
|
57
65
|
end
|
58
66
|
else
|
67
|
+
s.add_dependency(%q<curb>, [">= 0"])
|
59
68
|
s.add_dependency(%q<yard>, [">= 0"])
|
60
|
-
s.add_dependency(%q<
|
61
|
-
s.add_dependency(%q<
|
62
|
-
s.add_dependency(%q<
|
63
|
-
s.add_dependency(%q<
|
64
|
-
s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
|
69
|
+
s.add_dependency(%q<bundler>, [">= 0"])
|
70
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
71
|
+
s.add_dependency(%q<minitest>, ["< 5.0"])
|
72
|
+
s.add_dependency(%q<webmock>, [">= 0"])
|
65
73
|
s.add_dependency(%q<rcov>, [">= 0"])
|
66
74
|
s.add_dependency(%q<simplecov>, [">= 0"])
|
75
|
+
s.add_dependency(%q<test_guard>, [">= 0"])
|
76
|
+
s.add_dependency(%q<rb-inotify>, [">= 0"])
|
77
|
+
s.add_dependency(%q<rb-fsevent>, [">= 0"])
|
78
|
+
s.add_dependency(%q<rb-fchange>, [">= 0"])
|
67
79
|
end
|
68
80
|
end
|
69
81
|
|
data/lib/curb_threadpool.rb
CHANGED
@@ -1,22 +1,33 @@
|
|
1
1
|
|
2
|
+
require "curb"
|
3
|
+
|
2
4
|
# A multi-threaded worker pool for Curb
|
3
|
-
|
5
|
+
module Curl
|
6
|
+
class ThreadPool
|
7
|
+
|
8
|
+
class Request
|
9
|
+
# methods supported: :delete, :get, :head, :post, :put
|
10
|
+
attr_accessor :key, :uri, :body, :method
|
11
|
+
def initialize(key, uri, method=:get, body=nil)
|
12
|
+
@key = key
|
13
|
+
@uri = uri
|
14
|
+
@method = method
|
15
|
+
@body = body
|
16
|
+
end
|
17
|
+
end
|
4
18
|
|
5
|
-
attr_reader :results
|
19
|
+
attr_reader :reqs, :results
|
6
20
|
|
7
21
|
def initialize(size=4)
|
8
22
|
@size = size
|
9
23
|
reset()
|
10
24
|
end
|
11
25
|
|
12
|
-
#
|
13
|
-
|
14
|
-
|
15
|
-
# @param [String] url URL to fetch
|
16
|
-
def []=(key, url)
|
17
|
-
@reqs[key] = url
|
26
|
+
# Shorthand for adding requests
|
27
|
+
def add(req)
|
28
|
+
@reqs << req
|
18
29
|
end
|
19
|
-
|
30
|
+
alias_method :<<, :add
|
20
31
|
|
21
32
|
# Wait for all threads to complete
|
22
33
|
def join
|
@@ -26,82 +37,132 @@ class Curl::ThreadPool
|
|
26
37
|
|
27
38
|
# Close all active Curl connections
|
28
39
|
def close
|
29
|
-
|
40
|
+
if @clients then
|
41
|
+
@clients.each { |c| c.reset(); c.close() }
|
42
|
+
end
|
30
43
|
end
|
31
44
|
|
32
45
|
# Reset the ThreadPool
|
33
46
|
def reset
|
34
47
|
close()
|
35
|
-
@reqs =
|
48
|
+
@reqs = []
|
36
49
|
@results = {}
|
37
50
|
@clients = []
|
38
51
|
@threads = []
|
39
52
|
@size.times{ @clients << Curl::Easy.new }
|
40
53
|
end
|
41
54
|
|
42
|
-
#
|
55
|
+
# Send multiple get requests
|
43
56
|
#
|
44
57
|
# @param [Array<String>] urls list of URLs
|
58
|
+
#
|
45
59
|
# @return [Array] array of response bodies
|
46
60
|
def get(urls)
|
47
61
|
if urls.nil? or urls.empty? then
|
48
|
-
return
|
62
|
+
return []
|
49
63
|
end
|
50
64
|
|
51
65
|
urls = [urls] if not urls.kind_of? Array
|
52
66
|
urls.each_with_index do |url, i|
|
53
|
-
@reqs
|
67
|
+
@reqs << Request.new(i, url.to_s)
|
54
68
|
end
|
55
69
|
|
56
|
-
|
70
|
+
return collate_results(perform())
|
71
|
+
end
|
57
72
|
|
58
|
-
|
59
|
-
|
60
|
-
|
73
|
+
# Send multiple post requests
|
74
|
+
#
|
75
|
+
# @param [Array] reqs
|
76
|
+
def post(reqs)
|
77
|
+
if reqs.nil? or reqs.empty? then
|
78
|
+
return []
|
61
79
|
end
|
62
80
|
|
63
|
-
|
81
|
+
if not reqs.first.kind_of? Array then
|
82
|
+
reqs = [ reqs ]
|
83
|
+
end
|
84
|
+
|
85
|
+
reqs.each_with_index do |r, i|
|
86
|
+
if r.kind_of? Request then
|
87
|
+
@reqs << r
|
88
|
+
elsif r.kind_of? Array then
|
89
|
+
@reqs << Request.new(i, r.shift, :post, r.shift)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
return collate_results(perform())
|
64
94
|
end
|
65
95
|
|
66
96
|
# Execute requests. By default, will block until complete and return results.
|
67
97
|
#
|
68
|
-
# @param [Boolean]
|
98
|
+
# @param [Boolean] async If true, will not wait for requests to finish.
|
69
99
|
# (Default=false)
|
70
100
|
#
|
71
101
|
# @param [Block] block If passed, responses will be passed into the callback
|
72
102
|
# instead of being returned directly
|
73
103
|
#
|
74
|
-
# @
|
75
|
-
|
104
|
+
# @yield [Request, String] Passes to the block the request and the response body
|
105
|
+
#
|
106
|
+
# @return [Hash<Key, String>] Hash of responses, if no block given. Returns true otherwise
|
107
|
+
def perform(async=false, &block)
|
76
108
|
|
77
|
-
@results = {}
|
109
|
+
@results = {}
|
78
110
|
|
79
111
|
@clients.each do |client|
|
80
112
|
@threads << Thread.new do
|
81
113
|
|
82
114
|
loop do
|
83
115
|
break if @reqs.empty?
|
84
|
-
|
85
|
-
client.url =
|
86
|
-
|
116
|
+
req = @reqs.shift
|
117
|
+
client.url = req.uri
|
118
|
+
|
119
|
+
args = ["http_#{req.method}"]
|
120
|
+
if [:put, :post].include? req.method
|
121
|
+
# add body to args for these methods
|
122
|
+
if req.body then
|
123
|
+
if req.body.kind_of? Array then
|
124
|
+
args += req.body
|
125
|
+
else
|
126
|
+
args << req.body
|
127
|
+
end
|
128
|
+
else
|
129
|
+
args << ""
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
client.send(*args)
|
87
134
|
if block then
|
88
|
-
yield(
|
135
|
+
yield(req, client.body_str)
|
89
136
|
else
|
90
|
-
@results[key] = client.body_str
|
137
|
+
@results[req.key] = client.body_str
|
91
138
|
end
|
92
139
|
end
|
93
140
|
|
94
141
|
end
|
95
142
|
end
|
96
143
|
|
97
|
-
|
144
|
+
if async then
|
145
|
+
# don't wait for threads to join, just return
|
146
|
+
return true
|
147
|
+
end
|
98
148
|
|
99
149
|
join()
|
100
150
|
return true if block
|
101
151
|
|
102
|
-
|
103
|
-
|
152
|
+
return @results
|
153
|
+
end
|
154
|
+
|
155
|
+
|
156
|
+
private
|
157
|
+
|
158
|
+
# Create ordered array from hash of results
|
159
|
+
def collate_results(results)
|
160
|
+
ret = []
|
161
|
+
results.size.times do |i|
|
162
|
+
ret << results[i]
|
163
|
+
end
|
104
164
|
return ret
|
105
165
|
end
|
106
166
|
|
107
|
-
end
|
167
|
+
end # ThreadPool
|
168
|
+
end # Curl
|
data/test/helper.rb
CHANGED
@@ -7,12 +7,16 @@ rescue Bundler::BundlerError => e
|
|
7
7
|
$stderr.puts "Run `bundle install` to install missing gems"
|
8
8
|
exit e.status_code
|
9
9
|
end
|
10
|
-
|
11
|
-
require '
|
10
|
+
|
11
|
+
require 'test_guard'
|
12
|
+
TestGuard.load_simplecov()
|
12
13
|
|
13
14
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
14
15
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
15
16
|
require 'curb_threadpool'
|
17
|
+
require 'webmock/minitest'
|
16
18
|
|
17
|
-
class
|
19
|
+
class MiniTest::Unit::TestCase
|
18
20
|
end
|
21
|
+
|
22
|
+
MiniTest::Unit.autorun
|
@@ -1,7 +1,90 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
class TestCurbThreadpool <
|
4
|
-
|
5
|
-
|
3
|
+
class TestCurbThreadpool < MiniTest::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
super
|
7
|
+
WebMock.reset!
|
8
|
+
@url = "http://www.google.com"
|
9
|
+
@pool = Curl::ThreadPool.new
|
10
|
+
@i = 0
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
super
|
15
|
+
@pool.reset()
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_get
|
19
|
+
stub(:get)
|
20
|
+
ret = @pool.get(@url)
|
21
|
+
|
22
|
+
assert ret
|
23
|
+
assert_equal 1, ret.size
|
24
|
+
assert_equal "res 1", ret.first
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_get_array_param
|
28
|
+
stub(:get)
|
29
|
+
ret = @pool.get([@url])
|
30
|
+
|
31
|
+
assert ret
|
32
|
+
assert_equal 1, ret.size
|
33
|
+
assert_equal "res 1", ret.first
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_get_multiple
|
37
|
+
stub(:get)
|
38
|
+
urls = [@url, @url, @url]
|
39
|
+
ret = @pool.get(urls)
|
40
|
+
assert ret
|
41
|
+
assert_equal 3, ret.size
|
42
|
+
ret.each_with_index do |r, idx|
|
43
|
+
assert_equal "res #{idx+1}", r
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_get_nil
|
48
|
+
pool = Curl::ThreadPool.new
|
49
|
+
ret = pool.get([])
|
50
|
+
assert_kind_of Array, ret
|
51
|
+
assert_empty ret
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_post
|
55
|
+
stub(:post)
|
56
|
+
pool = Curl::ThreadPool.new
|
57
|
+
ret = pool.post([@url, ""])
|
58
|
+
|
59
|
+
assert ret
|
60
|
+
assert_equal 1, ret.size
|
61
|
+
assert_equal "res 1", ret.first
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_post_multiple
|
65
|
+
stub(:post)
|
66
|
+
pool = Curl::ThreadPool.new
|
67
|
+
reqs = [
|
68
|
+
[@url, "foobar"],
|
69
|
+
[@url, "blah"]
|
70
|
+
]
|
71
|
+
ret = pool.post(reqs)
|
72
|
+
|
73
|
+
assert ret
|
74
|
+
assert_equal 2, ret.size
|
75
|
+
assert_equal "res 1", ret.first
|
76
|
+
assert_equal "res 2", ret.last
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
private
|
81
|
+
|
82
|
+
def stub(method)
|
83
|
+
stub = stub_request(method, "http://www.google.com/").
|
84
|
+
to_return {
|
85
|
+
@i += 1
|
86
|
+
{ :status => 200, :body => "res #{@i}" }
|
87
|
+
}
|
6
88
|
end
|
89
|
+
|
7
90
|
end
|
metadata
CHANGED
@@ -1,150 +1,191 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: curb_threadpool
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 5
|
9
|
-
- 2
|
10
|
-
version: 0.5.2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.6.0
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Chetan Sarva
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
11
|
+
date: 2013-07-31 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: curb
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
22
28
|
name: yard
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
32
35
|
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
33
48
|
type: :development
|
34
|
-
requirement: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: redcarpet
|
37
|
-
version_requirements: &id002 !ruby/object:Gem::Requirement
|
38
|
-
none: false
|
39
|
-
requirements:
|
40
|
-
- - ">="
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
hash: 3
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
version: "0"
|
46
49
|
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: jeweler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
47
62
|
type: :development
|
48
|
-
requirement: *id002
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: shoulda
|
51
|
-
version_requirements: &id003 !ruby/object:Gem::Requirement
|
52
|
-
none: false
|
53
|
-
requirements:
|
54
|
-
- - ">="
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
hash: 3
|
57
|
-
segments:
|
58
|
-
- 0
|
59
|
-
version: "0"
|
60
63
|
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - <
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '5.0'
|
61
76
|
type: :development
|
62
|
-
requirement: *id003
|
63
|
-
- !ruby/object:Gem::Dependency
|
64
|
-
name: rdoc
|
65
|
-
version_requirements: &id004 !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
|
-
requirements:
|
68
|
-
- - ~>
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
hash: 31
|
71
|
-
segments:
|
72
|
-
- 3
|
73
|
-
- 12
|
74
|
-
version: "3.12"
|
75
77
|
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - <
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '5.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: webmock
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
76
90
|
type: :development
|
77
|
-
requirement: *id004
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: bundler
|
80
|
-
version_requirements: &id005 !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
|
-
requirements:
|
83
|
-
- - ~>
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
hash: 23
|
86
|
-
segments:
|
87
|
-
- 1
|
88
|
-
- 0
|
89
|
-
- 0
|
90
|
-
version: 1.0.0
|
91
91
|
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rcov
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
92
104
|
type: :development
|
93
|
-
requirement: *id005
|
94
|
-
- !ruby/object:Gem::Dependency
|
95
|
-
name: jeweler
|
96
|
-
version_requirements: &id006 !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
|
-
requirements:
|
99
|
-
- - ~>
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
hash: 49
|
102
|
-
segments:
|
103
|
-
- 1
|
104
|
-
- 8
|
105
|
-
- 3
|
106
|
-
version: 1.8.3
|
107
105
|
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
108
118
|
type: :development
|
109
|
-
requirement: *id006
|
110
|
-
- !ruby/object:Gem::Dependency
|
111
|
-
name: rcov
|
112
|
-
version_requirements: &id007 !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
hash: 3
|
118
|
-
segments:
|
119
|
-
- 0
|
120
|
-
version: "0"
|
121
119
|
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: test_guard
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rb-inotify
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
122
146
|
type: :development
|
123
|
-
requirement: *id007
|
124
|
-
- !ruby/object:Gem::Dependency
|
125
|
-
name: simplecov
|
126
|
-
version_requirements: &id008 !ruby/object:Gem::Requirement
|
127
|
-
none: false
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
hash: 3
|
132
|
-
segments:
|
133
|
-
- 0
|
134
|
-
version: "0"
|
135
147
|
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - '>='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rb-fsevent
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - '>='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
136
160
|
type: :development
|
137
|
-
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - '>='
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: rb-fchange
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - '>='
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
138
181
|
description: A multi-threaded worker pool for Curb
|
139
182
|
email: chetan@pixelcop.net
|
140
183
|
executables: []
|
141
|
-
|
142
184
|
extensions: []
|
143
|
-
|
144
|
-
extra_rdoc_files:
|
185
|
+
extra_rdoc_files:
|
145
186
|
- LICENSE
|
146
187
|
- README.md
|
147
|
-
files:
|
188
|
+
files:
|
148
189
|
- Gemfile
|
149
190
|
- LICENSE
|
150
191
|
- README.md
|
@@ -154,39 +195,28 @@ files:
|
|
154
195
|
- lib/curb_threadpool.rb
|
155
196
|
- test/helper.rb
|
156
197
|
- test/test_curb_threadpool.rb
|
157
|
-
has_rdoc: true
|
158
198
|
homepage: http://github.com/chetan/curb_threadpool
|
159
|
-
licenses:
|
199
|
+
licenses:
|
160
200
|
- BSD
|
201
|
+
metadata: {}
|
161
202
|
post_install_message:
|
162
203
|
rdoc_options: []
|
163
|
-
|
164
|
-
require_paths:
|
204
|
+
require_paths:
|
165
205
|
- lib
|
166
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
none: false
|
177
|
-
requirements:
|
178
|
-
- - ">="
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
hash: 3
|
181
|
-
segments:
|
182
|
-
- 0
|
183
|
-
version: "0"
|
206
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
207
|
+
requirements:
|
208
|
+
- - '>='
|
209
|
+
- !ruby/object:Gem::Version
|
210
|
+
version: '0'
|
211
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - '>='
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
184
216
|
requirements: []
|
185
|
-
|
186
217
|
rubyforge_project:
|
187
|
-
rubygems_version:
|
218
|
+
rubygems_version: 2.0.3
|
188
219
|
signing_key:
|
189
|
-
specification_version:
|
220
|
+
specification_version: 4
|
190
221
|
summary: A multi-threaded worker pool for Curb
|
191
222
|
test_files: []
|
192
|
-
|