fiber_connection_pool 0.2.4 → 0.2.5

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/README.md CHANGED
@@ -169,7 +169,7 @@ pool = FiberConnectionPool.new(:size => 5){ MyFancyConnection.new }
169
169
  # add a request to save data for each successful call on a connection
170
170
  # will save the return value inside a hash on the key ':affected_rows'
171
171
  # and make it available for the fiber that made the call
172
- pool.save_data(:affected_rows) do |connection|
172
+ pool.save_data(:affected_rows) do |connection, method, args|
173
173
  connection.affected_rows
174
174
  end
175
175
  ```
@@ -191,7 +191,7 @@ right after you made the query that generated it. But you could:
191
191
 
192
192
  ``` ruby
193
193
  # save only the first run
194
- pool.save_data(:affected_rows) do |connection|
194
+ pool.save_data(:affected_rows) do |connection, method, args|
195
195
  pool.gathered_data[:affected_rows] || connection.affected_rows
196
196
  end
197
197
  ```
@@ -2,7 +2,7 @@ require 'fiber'
2
2
  require_relative 'fiber_connection_pool/exceptions'
3
3
 
4
4
  class FiberConnectionPool
5
- VERSION = '0.2.4'
5
+ VERSION = '0.2.5'
6
6
 
7
7
  RESERVED_TTL_SECS = 30 # reserved cleanup trigger
8
8
  SAVED_DATA_TTL_SECS = 30 # saved_data cleanup trigger
@@ -44,27 +44,22 @@ class FiberConnectionPool
44
44
  # call to -any- method on the connection.
45
45
  # The connection and the method name are passed to the block.
46
46
  #
47
- # The returned value will be saved in pool.saved_data[Fiber.current][key],
47
+ # The returned value will be saved in pool.gathered_data[key],
48
48
  # and will be kept as long as the fiber stays alive.
49
49
  #
50
50
  # Ex:
51
51
  #
52
52
  # # (...right after pool's creation...)
53
- # pool.save_data(:hey_or_hoo) do |conn, method|
53
+ # pool.save_data(:hey_or_hoo) do |conn, method, args|
54
54
  # return 'hey' if method == 'query'
55
55
  # 'hoo'
56
56
  # end
57
57
  #
58
58
  # # (...from a reactor fiber...)
59
- # myfiber = Fiber.current
60
59
  # pool.query('select anything from anywhere')
61
- # puts pool.saved_data[myfiber][:hey_or_hoo]
60
+ # puts pool.gathered_data[:hey_or_hoo]
62
61
  # => 'hey'
63
62
  #
64
- # # (...eventually fiber dies...)
65
- # puts pool.saved_data[myfiber].inspect
66
- # => nil
67
- #
68
63
  def save_data(key, &block)
69
64
  @save_data_requests[key] = block
70
65
  end
@@ -100,7 +95,7 @@ class FiberConnectionPool
100
95
  # Avoid method_missing stack for 'query'
101
96
  #
102
97
  def query(sql, *args)
103
- execute('query') do |conn|
98
+ execute('query', args) do |conn|
104
99
  conn.query sql, *args
105
100
  end
106
101
  end
@@ -152,7 +147,7 @@ class FiberConnectionPool
152
147
  #
153
148
  # After running the block, save requested data and release the connection.
154
149
  #
155
- def execute(method)
150
+ def execute(method, args)
156
151
  f = Fiber.current
157
152
  begin
158
153
  # get a connection and use it
@@ -160,7 +155,7 @@ class FiberConnectionPool
160
155
  retval = yield conn
161
156
 
162
157
  # save anything requested
163
- process_save_data(f, conn, method)
158
+ process_save_data(f, conn, method, args)
164
159
 
165
160
  # successful run, release
166
161
  release(f)
@@ -181,10 +176,10 @@ class FiberConnectionPool
181
176
  # and save the data for the given fiber.
182
177
  # Also perform cleanup if TTL is past
183
178
  #
184
- def process_save_data(fiber, conn, method)
179
+ def process_save_data(fiber, conn, method, args)
185
180
  @save_data_requests.each do |key,block|
186
181
  @saved_data[fiber] ||= {}
187
- @saved_data[fiber][key] = block.call(conn, method)
182
+ @saved_data[fiber][key] = block.call(conn, method, args)
188
183
  end
189
184
  # try cleanup
190
185
  save_data_cleanup if (Time.now - @last_data_cleanup) >= SAVED_DATA_TTL_SECS
@@ -227,7 +222,7 @@ class FiberConnectionPool
227
222
  # waiting for IO, allowing the reactor run other fibers)
228
223
  #
229
224
  def method_missing(method, *args, &blk)
230
- execute(method) do |conn|
225
+ execute(method, args) do |conn|
231
226
  conn.send(method, *args, &blk)
232
227
  end
233
228
  end
@@ -242,8 +242,17 @@ class TestFiberConnectionPool < Minitest::Test
242
242
  pool = FiberConnectionPool.new(:size => 2) { ::EMSynchronyConnection.new(:delay => 0.05) }
243
243
 
244
244
  # ask to save some data
245
- pool.save_data(:connection_id) { |conn| conn.object_id }
246
- pool.save_data(:fiber_id) { |conn| Fiber.current.object_id }
245
+ pool.save_data(:connection_id) do |conn, method, args|
246
+ assert_equal :do_something, method
247
+ assert_equal info, args.first # args is an array with the args given to the method
248
+ conn.object_id
249
+ end
250
+
251
+ pool.save_data(:fiber_id) do |conn, method, args|
252
+ assert_equal :do_something, method
253
+ assert_equal info, args.first
254
+ Fiber.current.object_id
255
+ end
247
256
 
248
257
  fibers = Array.new(4) do
249
258
  Fiber.new do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fiber_connection_pool
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-09-23 00:00:00.000000000 Z
13
+ date: 2013-09-24 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: minitest