ione 1.2.0.pre6 → 1.2.0.pre7

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 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