ru_pol 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -13,7 +13,11 @@ module RuPol
13
13
 
14
14
  module ClassMethods
15
15
  def _pool
16
- @pool ||= Pool.new(1000, self)
16
+ @pool ||= Pool.new(default_pool_size, self)
17
+ end
18
+
19
+ def default_pool_size
20
+ superclass.respond_to?(:_pool) ? superclass._pool.max_size : 1000
17
21
  end
18
22
 
19
23
  def max_pool_size(max_size)
@@ -24,10 +28,10 @@ module RuPol
24
28
  _pool.empty!
25
29
  end
26
30
 
27
- def rehydrate(*init_opts)
31
+ def rehydrate(*init_opts, &block)
28
32
  instance = _pool.get
29
33
  if instance
30
- instance.instance_eval { init_opts.empty? ? initialize : initialize(*init_opts) }
34
+ instance.instance_eval { init_opts.empty? ? initialize(&block) : initialize(*init_opts, &block) }
31
35
  end
32
36
  instance
33
37
  end
@@ -69,8 +73,8 @@ module RuPol
69
73
  end
70
74
 
71
75
  module ClassMethods
72
- def new(*init_opts)
73
- rehydrate(*init_opts) || ( init_opts.empty? ? super() : super(*init_opts) )
76
+ def new(*init_opts, &block)
77
+ rehydrate(*init_opts, &block) || ( init_opts.empty? ? super() : super(*init_opts) )
74
78
  end
75
79
  end
76
80
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ru_pol}
8
- s.version = "0.1.1"
8
+ s.version = "0.1.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kane Baccigalupi"]
12
- s.date = %q{2011-03-30}
12
+ s.date = %q{2011-04-12}
13
13
  s.description = %q{RuPol is a glamorous mixin for instance pooling your Ruby classes.
14
14
  It eases the pain of garbarge collection for classes that are instantiated many times, and then tossed away like runway trash.
15
15
  Instances are cached on the class in a pool (array in less glamorous terms), and can be recycled at will.
@@ -26,6 +26,19 @@ describe RuPol do
26
26
  Irreplacable._pool.max_size.should == 1000
27
27
  end
28
28
 
29
+ it 'sets the default size to the size of it superclass if it has one' do
30
+ class BigPool
31
+ include RuPol::Swimsuit
32
+ max_pool_size 10000
33
+ end
34
+
35
+ BigPool._pool.max_size.should == 10000
36
+
37
+ class BigPoolDescendant < BigPool; end
38
+
39
+ BigPoolDescendant._pool.max_size.should == 10000
40
+ end
41
+
29
42
  it 'pool max size is settable via the #max_pool_size class method' do
30
43
  Irreplacable.max_pool_size 42
31
44
  Irreplacable._pool.max_size.should == 42
@@ -245,6 +258,35 @@ describe RuPol do
245
258
  end
246
259
  end
247
260
 
261
+ describe 'blocks' do
262
+ class Blocky
263
+ attr_accessor :has_block
264
+ include RuPol::Swimsuit
265
+ def initialize(&block)
266
+ self.has_block = block_given?
267
+ end
268
+ end
269
+
270
+ before do
271
+ Blocky.empty_pool!
272
+ end
273
+
274
+ it 'passes the block along on a brand new object' do
275
+ blocky = Blocky.new { "oh yes, it is!" }
276
+ blocky.has_block.should be_true
277
+ end
278
+
279
+ it 'passes the block to recycled items on reinit' do
280
+ blocky = Blocky.new { "first run" }
281
+ blocky.has_block.should be_true
282
+ blocky.recycle
283
+ blocky.has_block.should be_nil
284
+
285
+ new_blocky = Blocky.new { "and again" }
286
+ new_blocky.has_block.should be_true
287
+ end
288
+ end
289
+
248
290
  describe 'rehydrating' do
249
291
  before do
250
292
  [
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ru_pol
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 31
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 1
10
- version: 0.1.1
9
+ - 2
10
+ version: 0.1.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kane Baccigalupi
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-30 00:00:00 -07:00
18
+ date: 2011-04-12 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency