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 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 "redcarpet"
6
- gem "shoulda", ">= 0"
7
- gem "rdoc", "~> 3.12"
8
- gem "bundler", "~> 1.0.0"
9
- gem "jeweler", "~> 1.8.3"
10
- gem "rcov", ">= 0", :platforms => :mri_18
11
- gem "simplecov", :platforms => :mri_19
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.5.2
1
+ 0.6.0
@@ -4,14 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{curb_threadpool}
8
- s.version = "0.5.2"
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 = %q{2012-05-08}
13
- s.description = %q{A multi-threaded worker pool for Curb}
14
- s.email = %q{chetan@pixelcop.net}
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 = %q{http://github.com/chetan/curb_threadpool}
30
+ s.homepage = "http://github.com/chetan/curb_threadpool"
31
31
  s.licenses = ["BSD"]
32
32
  s.require_paths = ["lib"]
33
- s.rubygems_version = %q{1.5.0}
34
- s.summary = %q{A multi-threaded worker pool for Curb}
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 = 3
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<redcarpet>, [">= 0"])
42
- s.add_development_dependency(%q<shoulda>, [">= 0"])
43
- s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
44
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
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<redcarpet>, [">= 0"])
51
- s.add_dependency(%q<shoulda>, [">= 0"])
52
- s.add_dependency(%q<rdoc>, ["~> 3.12"])
53
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
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<redcarpet>, [">= 0"])
61
- s.add_dependency(%q<shoulda>, [">= 0"])
62
- s.add_dependency(%q<rdoc>, ["~> 3.12"])
63
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
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
 
@@ -1,22 +1,33 @@
1
1
 
2
+ require "curb"
3
+
2
4
  # A multi-threaded worker pool for Curb
3
- class Curl::ThreadPool
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
- # Add a URL to be fetched
13
- #
14
- # @param [Object] key to use for request
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
- alias :add :[]=
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
- @clients.each { |c| c.reset(); c.close() } if @clients
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
- # Utility method for retrieving a list of URLs
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[i] = url.to_s
67
+ @reqs << Request.new(i, url.to_s)
54
68
  end
55
69
 
56
- results = perform()
70
+ return collate_results(perform())
71
+ end
57
72
 
58
- ret = []
59
- (0..results.size-1).each do |i|
60
- ret << results[i]
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
- return ret
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] no_block If true, will not wait for requests to finish.
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
- # @return [Hash<Key, String>] Hash of responses, if no block given
75
- def perform(no_block=false, &block)
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 = {} if not @results.empty?
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
- (key, url) = @reqs.shift
85
- client.url = url
86
- client.http_get
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(key, client.body_str)
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
- return {} if no_block
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
- ret = @results
103
- @results = {}
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
- require 'test/unit'
11
- require 'shoulda'
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 Test::Unit::TestCase
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 < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
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
- hash: 15
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
- date: 2012-05-08 00:00:00 -04:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
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
- version_requirements: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
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
- requirement: *id008
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
- none: false
168
- requirements:
169
- - - ">="
170
- - !ruby/object:Gem::Version
171
- hash: 3
172
- segments:
173
- - 0
174
- version: "0"
175
- required_rubygems_version: !ruby/object:Gem::Requirement
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: 1.5.0
218
+ rubygems_version: 2.0.3
188
219
  signing_key:
189
- specification_version: 3
220
+ specification_version: 4
190
221
  summary: A multi-threaded worker pool for Curb
191
222
  test_files: []
192
-