resource_pool 0.1.3 → 0.2.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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.2.0
data/lib/resource_pool.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  class ResourcePool
2
2
  class ResourcePoolError < RuntimeError; end
3
3
  class ResourceNotAvailable < ResourcePoolError; end
4
- class BadResource < ResourcePoolError; end
5
4
  class InvalidCreateProc < ResourcePoolError; end
6
5
 
7
6
  attr_reader :max_size, :pool, :allocated
@@ -33,8 +32,8 @@ class ResourcePool
33
32
  t = Thread.current
34
33
  if res = owned_resource(t)
35
34
  return yield(res)
36
-
37
35
  end
36
+
38
37
  begin
39
38
  unless res = acquire(t)
40
39
  raise ResourceNotAvailable if @timeout == 0
@@ -48,17 +47,22 @@ class ResourcePool
48
47
  end
49
48
  end
50
49
  yield res
51
- rescue BadResource
52
- old_res = res
53
- res = nil
54
- @delete_proc.call(old_res) if @delete_proc && old_res
55
- @allocated.delete(t)
56
- raise
57
50
  ensure
58
- sync{release(t)} if res
51
+ sync{release(t)} if owned_resource(t)
59
52
  end
60
53
  end
61
54
 
55
+ # please only call this inside hold block
56
+ def trash_current!
57
+ t = Thread.current
58
+ conn = owned_resource(t)
59
+ return unless conn
60
+
61
+ @delete_proc.call conn if @delete_proc
62
+ sync { @allocated.delete(t) }
63
+ nil
64
+ end
65
+
62
66
  private
63
67
 
64
68
  def owned_resource(thread)
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{resource_pool}
8
- s.version = "0.1.3"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{Aaron Qian}]
@@ -244,9 +244,14 @@ describe "ResourcePool" do
244
244
  end
245
245
 
246
246
  it "should aquire and release resource" do
247
+ @pool.should_receive(:owned_resource).
248
+ with(Thread.current).
249
+ and_return(nil, @res)
250
+
247
251
  @pool.should_receive(:acquire).
248
252
  with(Thread.current).
249
253
  and_return(@res)
254
+
250
255
  @pool.should_receive(:release).
251
256
  with(Thread.current)
252
257
 
@@ -286,19 +291,26 @@ describe "ResourcePool" do
286
291
  end
287
292
 
288
293
  it "should delete bad resource" do
294
+ @pool.should_receive(:owned_resource).
295
+ with(Thread.current).
296
+ and_return(nil, @res, nil)
297
+
289
298
  @pool.should_receive(:acquire).
290
299
  and_return(@res)
291
300
  @pool.should_not_receive(:release)
292
301
  @pool.allocated.should_receive(:delete).
293
302
  with(Thread.current)
294
303
 
295
- lambda {
296
- @pool.hold{ |res| raise ResourcePool::BadResource }
297
- }.should raise_error(ResourcePool::BadResource)
304
+ @pool.hold{ |res| @pool.trash_current! }
298
305
  end
299
306
 
300
307
  it "should call delete_proc if avaiable" do
301
308
  delete_proc_called = false
309
+
310
+ @pool.should_receive(:owned_resource).
311
+ with(Thread.current).
312
+ and_return(nil, @res, nil)
313
+
302
314
  @pool.should_receive(:acquire).
303
315
  and_return(@res)
304
316
  @pool.should_not_receive(:release)
@@ -310,9 +322,7 @@ describe "ResourcePool" do
310
322
  delete_proc_called = true
311
323
  })
312
324
 
313
- lambda {
314
- @pool.hold{ |res| raise ResourcePool::BadResource }
315
- }.should raise_error(ResourcePool::BadResource)
325
+ @pool.hold{ |res| @pool.trash_current! }
316
326
 
317
327
  delete_proc_called.should be_true
318
328
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resource_pool
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-01-11 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &16231600 !ruby/object:Gem::Requirement
16
+ requirement: &12906080 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.3.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *16231600
24
+ version_requirements: *12906080
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &16230980 !ruby/object:Gem::Requirement
27
+ requirement: &12897540 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.0.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *16230980
35
+ version_requirements: *12897540
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: jeweler
38
- requirement: &16230420 !ruby/object:Gem::Requirement
38
+ requirement: &12896880 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.6.4
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *16230420
46
+ version_requirements: *12896880
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rcov
49
- requirement: &16229640 !ruby/object:Gem::Requirement
49
+ requirement: &12895920 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *16229640
57
+ version_requirements: *12895920
58
58
  description: A gem for generic connection pooling / resource pooling. The code is
59
59
  mostly taken from Sequel gem's ThreadedConnectionPool class, and adapted for more
60
60
  general use.
@@ -91,7 +91,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
91
91
  version: '0'
92
92
  segments:
93
93
  - 0
94
- hash: -3354856420191467092
94
+ hash: -3324076291152974813
95
95
  required_rubygems_version: !ruby/object:Gem::Requirement
96
96
  none: false
97
97
  requirements: