Class: Concurrent::Promises::ResolvableFuture

Inherits:
Future show all
Includes:
Resolvable
Defined in:
lib/concurrent/edge/promises.rb

Overview

A Future which can be resolved by user.

Instance Method Summary collapse

Methods inherited from Future

#any, #delay, #exception, #flat_event, #flat_future, #fulfilled?, #on_fulfillment, #on_fulfillment!, #on_fulfillment_using, #on_rejection, #on_rejection!, #on_rejection_using, #reason, #rejected?, #rescue, #rescue_on, #result, #run, #schedule, #then, #then_on, #to_event, #to_future, #value, #value!, #wait!, #with_default_executor, #zip

Methods included from Future::NewChannelIntegration

#then_push_channel

Methods included from Future::ActorIntegration

#then_ask

Methods included from Future::ThrottleIntegration

#rescue_throttled_by, #then_throttled_by

Methods inherited from AbstractEventFuture

#add_callback_notify_blocked, #chain, #chain_on, #chain_resolvable, #default_executor, #on_resolution, #on_resolution!, #on_resolution_using, #pending?, #resolved?, #state, #to_s, #touch, #wait, #with_default_executor

Methods included from AbstractEventFuture::ThrottleIntegration

#chain_throttled_by, #throttled_by

Instance Method Details

#evaluate_to(*args) {|*args| ... } ⇒ self

Evaluates the block and sets its result as future’s value fulfilling, if the block raises an exception the future rejects with it.

Yields:

  • (*args)

    to the block.

Yield Returns:

  • (Object)

    value

Returns:

  • (self)


1300
1301
1302
1303
# File 'lib/concurrent/edge/promises.rb', line 1300

def evaluate_to(*args, &block)
  # FIXME (pitr-ch 13-Jun-2016): add raise_on_reassign
  promise.evaluate_to(*args, block)
end

#evaluate_to!(*args) {|*args| ... } ⇒ self

Evaluates the block and sets its result as future’s value fulfilling, if the block raises an exception the future rejects with it.

Yields:

  • (*args)

    to the block.

Yield Returns:

  • (Object)

    value

Returns:

  • (self)

Raises:

  • (Exception)

    also raise reason on rejection.



1311
1312
1313
# File 'lib/concurrent/edge/promises.rb', line 1311

def evaluate_to!(*args, &block)
  promise.evaluate_to!(*args, block)
end

#fulfill(value, raise_on_reassign = true) ⇒ self, false

Makes the future fulfilled with ‘value`, which triggers all dependent futures.

Parameters:

  • raise_on_reassign (Boolean) (defaults to: true)

    should method raise exception if already resolved

Returns:

  • (self, false)

    false is returner when raise_on_reassign is false and the receiver is already resolved.



1283
1284
1285
# File 'lib/concurrent/edge/promises.rb', line 1283

def fulfill(value, raise_on_reassign = true)
  promise.fulfill(value, raise_on_reassign)
end

#reject(reason, raise_on_reassign = true) ⇒ self, false

Makes the future rejected with ‘reason`, which triggers all dependent futures.

Parameters:

  • raise_on_reassign (Boolean) (defaults to: true)

    should method raise exception if already resolved

Returns:

  • (self, false)

    false is returner when raise_on_reassign is false and the receiver is already resolved.



1291
1292
1293
# File 'lib/concurrent/edge/promises.rb', line 1291

def reject(reason, raise_on_reassign = true)
  promise.reject(reason, raise_on_reassign)
end

#resolve(fulfilled = true, value = nil, reason = nil, raise_on_reassign = true) ⇒ self, false

Makes the future resolved with result of triplet ‘fulfilled?`, `value`, `reason`, which triggers all dependent futures.

Parameters:

  • raise_on_reassign (Boolean) (defaults to: true)

    should method raise exception if already resolved

Returns:

  • (self, false)

    false is returner when raise_on_reassign is false and the receiver is already resolved.



1275
1276
1277
# File 'lib/concurrent/edge/promises.rb', line 1275

def resolve(fulfilled = true, value = nil, reason = nil, raise_on_reassign = true)
  resolve_with(fulfilled ? Fulfilled.new(value) : Rejected.new(reason), raise_on_reassign)
end

#with_hidden_resolvableFuture

Creates new future wrapping receiver, effectively hiding the resolve method and similar.

Returns:



1318
1319
1320
# File 'lib/concurrent/edge/promises.rb', line 1318

def with_hidden_resolvable
  @with_hidden_resolvable ||= FutureWrapperPromise.new_blocked_by1(self, @DefaultExecutor).future
end