Class: RestCore::Future::FutureFiber

Inherits:
RestCore::Future show all
Defined in:
lib/rest-core/engine/future/future_fiber.rb

Constant Summary

Constant Summary

Constants included from RestCore

ASYNC, DRY, RestCore::FAIL, RestCore::FUTURE, LOG, REQUEST_HEADERS, REQUEST_METHOD, REQUEST_PATH, REQUEST_PAYLOAD, REQUEST_QUERY, RESPONSE_BODY, RESPONSE_HEADERS, RESPONSE_STATUS, RootFiber, TIMER, Universal, VERSION

Instance Method Summary (collapse)

Methods inherited from RestCore::Future

#callback, #callback_in_async, create, #loaded?, #on_error, #on_load, #proxy_body, #proxy_headers, #proxy_status, #yield

Methods included from RestCore

eagerload

Constructor Details

- (FutureFiber) initialize(*args)

A new instance of FutureFiber



5
6
7
8
# File 'lib/rest-core/engine/future/future_fiber.rb', line 5

def initialize *args
  super
  self.fibers = []
end

Instance Method Details

- (Object) resume



19
20
21
22
23
24
25
26
27
28
# File 'lib/rest-core/engine/future/future_fiber.rb', line 19

def resume
  return if fibers.empty?
  current_fibers = fibers.dup
  fibers.clear
  current_fibers.each{ |f|
    next unless f.alive?
    next_tick{ f.resume }
  }
  resume
end

- (Object) wait



14
15
16
17
# File 'lib/rest-core/engine/future/future_fiber.rb', line 14

def wait
  fibers << Fiber.current
  Fiber.yield until loaded? # it might be resumed by some other futures!
end

- (Object) wrap



10
11
12
# File 'lib/rest-core/engine/future/future_fiber.rb', line 10

def wrap
  Fiber.new{ yield }.resume
end