Container of all {Future}, {Event} factory methods. They are never constructed directly with new.
@!macro promises.shortcut.on @return [Future]
# File lib/concurrent/promises.rb, line 294 def any_event(*futures_and_or_events) any_event_on default_executor, *futures_and_or_events end
Creates new event which becomes resolved after first of the futures_and_or_events resolves. @!macro promises.any-touch
@!macro promises.param.default_executor @param [AbstractEventFuture] futures_and_or_events @return [Event]
# File lib/concurrent/promises.rb, line 304 def any_event_on(default_executor, *futures_and_or_events) AnyResolvedEventPromise.new_blocked_by(futures_and_or_events, default_executor).event end
@!macro promises.shortcut.on @return [Future]
# File lib/concurrent/promises.rb, line 275 def any_fulfilled_future(*futures_and_or_events) any_fulfilled_future_on default_executor, *futures_and_or_events end
Creates new future which is resolved after first of futures_and_or_events is fulfilled. Its result equals result of the first resolved future or if all futures_and_or_events reject, it has reason of the last resolved future. @!macro promises.any-touch @!macro promises.event-conversion
@!macro promises.param.default_executor @param [AbstractEventFuture] futures_and_or_events @return [Future]
# File lib/concurrent/promises.rb, line 288 def any_fulfilled_future_on(default_executor, *futures_and_or_events) AnyFulfilledFuturePromise.new_blocked_by(futures_and_or_events, default_executor).future end
@!macro promises.shortcut.on @return [Future]
# File lib/concurrent/promises.rb, line 253 def any_resolved_future(*futures_and_or_events) any_resolved_future_on default_executor, *futures_and_or_events end
Creates new future which is resolved after first futures_and_or_events is resolved. Its result equals result of the first resolved future. @!macro promises.any-touch
If resolved it does not propagate {AbstractEventFuture#touch}, leaving delayed futures un-executed if they are not required any more.
@!macro promises.event-conversion
@!macro promises.param.default_executor @param [AbstractEventFuture] futures_and_or_events @return [Future]
# File lib/concurrent/promises.rb, line 269 def any_resolved_future_on(default_executor, *futures_and_or_events) AnyResolvedFuturePromise.new_blocked_by(futures_and_or_events, default_executor).future end
@!macro promises.shortcut.on @return [Future]
# File lib/concurrent/promises.rb, line 184 def delay(*args, &task) delay_on default_executor, *args, &task end
@!macro promises.future-on1 The task will be evaluated only after the future is touched, see {AbstractEventFuture#touch}
@!macro promises.future-on2
# File lib/concurrent/promises.rb, line 192 def delay_on(default_executor, *args, &task) DelayPromise.new(default_executor).event.chain(*args, &task) end
Creates resolved future with will be fulfilled with the given value.
@!macro promises.param.default_executor @return [Future]
# File lib/concurrent/promises.rb, line 122 def fulfilled_future(value, default_executor = self.default_executor) resolved_future true, value, nil, default_executor end
@!macro promises.shortcut.on @return [Future]
# File lib/concurrent/promises.rb, line 91 def future(*args, &task) future_on(default_executor, *args, &task) end
@!macro promises.future-on1
Constructs new Future which will be resolved after block is evaluated on default executor.
Evaluation begins immediately.
@!macro promises.future-on2
@!macro promises.param.default_executor @!macro promises.param.args @yield [*args] to the task. @!macro promise.param.task-future @return [Future]
# File lib/concurrent/promises.rb, line 105 def future_on(default_executor, *args, &task) ImmediateEventPromise.new(default_executor).future.then(*args, &task) end
General constructor. Behaves differently based on the argument's type. It's provided for convenience but it's better to be explicit.
@see #rejected_future, #resolved_event, #fulfilled_future @!macro promises.param.default_executor @return [Event, Future]
@overload create(nil, default_executor = self.default_executor)
@param [nil] nil @return [Event] resolved event.
@overload create(a_future, default_executor = self.default_executor)
@param [Future] a_future @return [Future] a future which will be resolved when a_future is.
@overload create(an_event, default_executor = self.default_executor)
@param [Event] an_event @return [Event] an event which will be resolved when an_event is.
@overload create(exception, default_executor = self.default_executor)
@param [Exception] exception @return [Future] a rejected future with the exception as its reason.
@overload create(value, default_executor = self.default_executor)
@param [Object] value when none of the above overloads fits @return [Future] a fulfilled future with the value.
# File lib/concurrent/promises.rb, line 168 def make_future(argument = nil, default_executor = self.default_executor) case argument when AbstractEventFuture # returning wrapper would change nothing argument when Exception rejected_future argument, default_executor when nil resolved_event default_executor else fulfilled_future argument, default_executor end end
Creates resolved future with will be rejected with the given reason.
@!macro promises.param.default_executor @return [Future]
# File lib/concurrent/promises.rb, line 130 def rejected_future(reason, default_executor = self.default_executor) resolved_future false, nil, reason, default_executor end
@!macro promises.shortcut.on @return [ResolvableEvent]
# File lib/concurrent/promises.rb, line 60 def resolvable_event resolvable_event_on default_executor end
Created resolvable event, user is responsible for resolving the event once by {Promises::ResolvableEvent#resolve}.
@!macro promises.param.default_executor @return [ResolvableEvent]
# File lib/concurrent/promises.rb, line 69 def resolvable_event_on(default_executor = self.default_executor) ResolvableEventPromise.new(default_executor).future end
@!macro promises.shortcut.on @return [ResolvableFuture]
# File lib/concurrent/promises.rb, line 75 def resolvable_future resolvable_future_on default_executor end
Creates resolvable future, user is responsible for resolving the future once by {Promises::ResolvableFuture#resolve}, {Promises::ResolvableFuture#fulfill}, or {Promises::ResolvableFuture#reject}
@!macro promises.param.default_executor @return [ResolvableFuture]
# File lib/concurrent/promises.rb, line 85 def resolvable_future_on(default_executor = self.default_executor) ResolvableFuturePromise.new(default_executor).future end
Creates resolved event.
@!macro promises.param.default_executor @return [Event]
# File lib/concurrent/promises.rb, line 138 def resolved_event(default_executor = self.default_executor) ImmediateEventPromise.new(default_executor).event end
Creates resolved future with will be either fulfilled with the given value or rejection with the given reason.
@!macro promises.param.default_executor @return [Future]
# File lib/concurrent/promises.rb, line 114 def resolved_future(fulfilled, value, reason, default_executor = self.default_executor) ImmediateFuturePromise.new(default_executor, fulfilled, value, reason).future end
@!macro promises.shortcut.on @return [Future]
# File lib/concurrent/promises.rb, line 198 def schedule(intended_time, *args, &task) schedule_on default_executor, intended_time, *args, &task end
@!macro promises.future-on1 The task is planned for execution in intended_time.
@!macro promises.future-on2 @!macro promises.param.intended_time
@param [Numeric, Time] intended_time `Numeric` means to run in `intended_time` seconds. `Time` means to run on `intended_time`.
# File lib/concurrent/promises.rb, line 209 def schedule_on(default_executor, intended_time, *args, &task) ScheduledPromise.new(default_executor, intended_time).event.chain(*args, &task) end
@!macro promises.shortcut.on @return [Event]
# File lib/concurrent/promises.rb, line 237 def zip_events(*futures_and_or_events) zip_events_on default_executor, *futures_and_or_events end
Creates new event which is resolved after all futures_and_or_events are resolved. (Future is resolved when fulfilled or rejected.)
@!macro promises.param.default_executor @param [AbstractEventFuture] futures_and_or_events @return [Event]
# File lib/concurrent/promises.rb, line 247 def zip_events_on(default_executor, *futures_and_or_events) ZipEventsPromise.new_blocked_by(futures_and_or_events, default_executor).event end
@!macro promises.shortcut.on @return [Future]
# File lib/concurrent/promises.rb, line 215 def zip_futures(*futures_and_or_events) zip_futures_on default_executor, *futures_and_or_events end
Creates new future which is resolved after all futures_and_or_events are resolved. Its value is array of zipped future values. Its reason is array of reasons for rejection. If there is an error it rejects. @!macro promises.event-conversion
If event is supplied, which does not have value and can be only resolved, it's represented as `:fulfilled` with value `nil`.
@!macro promises.param.default_executor @param [AbstractEventFuture] futures_and_or_events @return [Future]
# File lib/concurrent/promises.rb, line 229 def zip_futures_on(default_executor, *futures_and_or_events) ZipFuturesPromise.new_blocked_by(futures_and_or_events, default_executor).future end