Class: Cql::CombinedFuture

Inherits:
Future
  • Object
show all
Defined in:
lib/cql/future.rb

Instance Method Summary collapse

Methods inherited from Future

combine, #complete?, completed, failed, #failed?, #flat_map, #map, #on_complete, #on_failure, #value

Constructor Details

#initialize(*futures) ⇒ CombinedFuture

Returns a new instance of CombinedFuture.



220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
# File 'lib/cql/future.rb', line 220

def initialize(*futures)
  super()
  values = [nil] * futures.size
  completed = [false] * futures.size
  futures.each_with_index do |f, i|
    f.on_complete do |v|
      all_done = false
      @state_lock.synchronize do
        values[i] = v
        completed[i] = true
        all_done = completed.all?
      end
      if all_done
        combined_complete!(values)
      end
    end
    f.on_failure do |e|
      unless failed?
        combined_fail!(e)
      end
    end
  end
end

Instance Method Details

#complete!(v = nil) ⇒ Object

Raises:



250
251
252
# File 'lib/cql/future.rb', line 250

def complete!(v=nil)
  raise FutureError, 'Cannot complete a combined future'
end

#fail!(e) ⇒ Object

Raises:



254
255
256
# File 'lib/cql/future.rb', line 254

def fail!(e)
  raise FutureError, 'Cannot fail a combined future'
end