ione 1.2.0.pre6 → 1.2.0.pre7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 580012a6e7c6d917610532fc3fbd917ab9cd7a50
4
- data.tar.gz: e5deb87d0deebb5d4cc9d3a1b516b672ef6848a5
3
+ metadata.gz: 9f489ef2fde881a219194d545c1c2ab5a80f3647
4
+ data.tar.gz: d6f2e0f0a5ae218c71a895c03b3635d74ef8c6cd
5
5
  SHA512:
6
- metadata.gz: 5760948be8fe0975500e3f673ffc0b4b4be1ed04aaccbfc44bc4535c668c1d7fec678a2fd498e608fd642a9e6e7354df4e01863f632afff471c4e70b57b6d895
7
- data.tar.gz: e912eadf89022cb82d6f65726d1f48ccd8f17c1b434eb0a70dc783adef9407941331830ddc3898fb206e84b34aa300f0ed1b86115e98b684bc20544d38caa36b
6
+ metadata.gz: 3d552c79337732c614279c4c531b42a20043f16949869a2587666b04cf59c4713ea85fbc09b2f6aa117f3706574c42168577db24db431d8528a5b13784064625
7
+ data.tar.gz: 6b807b0167c0f7aef38520fa181d2d391f046b5cf4faeaaa68fc1a3ba12f88a14ac1427bde9da9e4eac8f6168febdf5ad90eb2e8f24995ecf8301c4ae13340d9
data/lib/ione/future.rb CHANGED
@@ -109,10 +109,14 @@ module Ione
109
109
  # can be a splatted array or a regular array passed as sole argument)
110
110
  # @return [Ione::Future] a future which represents the first completing future
111
111
  def first(*futures)
112
- return resolved if futures.empty?
113
- futures = futures.size == 1 && futures.first.is_a?(Enumerable) ? futures.first : futures
114
- return futures.first if futures.is_a?(Array) && futures.size == 1
115
- FirstFuture.new(futures)
112
+ if futures.size == 1 && (fs = futures.first).is_a?(Enumerable)
113
+ futures = fs
114
+ end
115
+ if futures.count == 0
116
+ resolved
117
+ else
118
+ FirstFuture.new(futures)
119
+ end
116
120
  end
117
121
 
118
122
  # Takes calls the block once for each element in an array, expecting each
@@ -131,7 +135,7 @@ module Ione
131
135
  # @return [Ione::Future] a future that will resolve to an array of the values
132
136
  # of the futures returned by the block
133
137
  def traverse(values, &block)
134
- all(*values.map(&block))
138
+ all(values.map(&block))
135
139
  rescue => e
136
140
  failed(e)
137
141
  end
data/lib/ione/heap.rb CHANGED
@@ -39,12 +39,14 @@ module Ione
39
39
  end
40
40
 
41
41
  def delete(item)
42
- if item == @items[0]
42
+ if item == @items.first
43
43
  pop
44
+ elsif item == @items.last
45
+ @items.pop
44
46
  elsif (i = index(item))
45
47
  item = @items[i]
46
48
  @items[i] = @items.pop
47
- bubble_down(i)
49
+ bubble_up(bubble_down(i))
48
50
  item
49
51
  end
50
52
  end
@@ -71,12 +73,16 @@ module Ione
71
73
  @items[index] = @items[parent_index]
72
74
  @items[parent_index] = item
73
75
  bubble_up(parent_index)
76
+ else
77
+ index
74
78
  end
75
79
  end
76
80
 
77
81
  def bubble_down(index)
78
82
  child_index = (index * 2) + 1
79
- unless child_index >= @items.length
83
+ if child_index >= @items.length
84
+ index
85
+ else
80
86
  if child_index + 1 < @items.length && @items[child_index] > @items[child_index + 1]
81
87
  child_index += 1
82
88
  end
@@ -85,6 +91,8 @@ module Ione
85
91
  @items[index] = @items[child_index]
86
92
  @items[child_index] = item
87
93
  bubble_down(child_index)
94
+ else
95
+ index
88
96
  end
89
97
  end
90
98
  end
@@ -255,6 +255,7 @@ module Ione
255
255
  def initialize
256
256
  @out, @in = IO.pipe
257
257
  @lock = Mutex.new
258
+ @state = :open
258
259
  end
259
260
 
260
261
  def connected?
@@ -270,21 +271,31 @@ module Ione
270
271
  end
271
272
 
272
273
  def closed?
273
- @in.nil?
274
+ @state == :closed
274
275
  end
275
276
 
276
277
  def unblock
277
- @lock.lock
278
- @in.write(PING_BYTE)
279
- ensure
280
- @lock.unlock
278
+ unless closed?
279
+ @lock.lock
280
+ begin
281
+ @in.write(PING_BYTE)
282
+ ensure
283
+ @lock.unlock
284
+ end
285
+ end
281
286
  end
282
287
 
283
288
  def read
284
- @out.read_nonblock(2**16)
289
+ unless closed?
290
+ @out.read_nonblock(2**16)
291
+ end
285
292
  end
286
293
 
287
294
  def close
295
+ @lock.synchronize do
296
+ return if @state == :closed
297
+ @state = :closed
298
+ end
288
299
  @in.close
289
300
  @out.close
290
301
  @in = nil
@@ -302,7 +313,6 @@ module Ione
302
313
  private
303
314
 
304
315
  PING_BYTE = "\0".freeze
305
- DEFAULT_CONNECT_OPTIONS = {:timeout => 5}.freeze
306
316
  end
307
317
 
308
318
  # @private
@@ -326,7 +336,7 @@ module Ione
326
336
  end
327
337
 
328
338
  def to_s
329
- "#<Timer @time=#{@time}>"
339
+ "#<#{self.class.name}:#{object_id} @time=#{@time.to_f}>"
330
340
  end
331
341
  alias_method :inspect, :to_s
332
342
  end
data/lib/ione/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Ione
4
- VERSION = '1.2.0.pre6'.freeze
4
+ VERSION = '1.2.0.pre7'.freeze
5
5
  end
@@ -133,6 +133,28 @@ module Ione
133
133
  heap.size.should == 2
134
134
  end
135
135
 
136
+ it 'removes the last item from the heap' do
137
+ heap.push(1)
138
+ heap.push(2)
139
+ heap.push(3)
140
+ heap.delete(3).should_not be_nil
141
+ heap.delete(3).should be_nil
142
+ heap.delete(2).should_not be_nil
143
+ heap.delete(2).should be_nil
144
+ end
145
+
146
+ it 'correctly re-heapifies the heap after a delete' do
147
+ heap.push(2)
148
+ heap.push(6)
149
+ heap.push(7)
150
+ heap.push(8)
151
+ heap.push(9)
152
+ heap.push(3)
153
+ heap.push(4)
154
+ heap.delete(8).should_not be_nil
155
+ heap.delete(4).should_not be_nil
156
+ end
157
+
136
158
  it 'returns the item' do
137
159
  heap.push(3)
138
160
  heap.push(4)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ione
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0.pre6
4
+ version: 1.2.0.pre7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Theo Hultberg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-26 00:00:00.000000000 Z
11
+ date: 2014-10-27 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Reactive programming framework for Ruby, painless evented IO, futures
14
14
  and an efficient byte buffer