Skip to content

Commit d79d371

Browse files
committed
Add edge zip_futures_over method
1 parent 6d293e7 commit d79d371

File tree

8 files changed

+1374
-772
lines changed

8 files changed

+1374
-772
lines changed

docs-source/promises.out.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ Concurrent::Promises::FactoryMethods.instance_methods(false).sort
3434
# :zip_events,
3535
# :zip_events_on,
3636
# :zip_futures,
37-
# :zip_futures_on]
37+
# :zip_futures_on,
38+
# :zip_futures_over,
39+
# :zip_futures_over_on]
3840
```
3941

4042
The module can be included or extended where needed.

docs/master/Concurrent/Promises.html

Lines changed: 271 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -963,6 +963,62 @@ <h2>
963963
<span class="summary_desc"><div class='inline'><p>Creates new future which is resolved after all futures_and_or_events are resolved.</p>
964964
</div></span>
965965

966+
</li>
967+
968+
969+
<li class="public ">
970+
<span class="summary_signature">
971+
972+
<a href="#zip_futures_over-class_method" title="#zip_futures_over (class method)">.<strong>zip_futures_over</strong>(enumerable, &amp;future_factory) &#x21d2; Future </a>
973+
974+
975+
976+
</span>
977+
978+
<span class="note title not_defined_here">
979+
extended
980+
from <span class='object_link'><a href="Promises/FactoryMethods.html#zip_futures_over-class_method" title="Concurrent::Promises::FactoryMethods#zip_futures_over (method)">FactoryMethods</a></span>
981+
</span>
982+
983+
984+
985+
986+
987+
988+
989+
990+
991+
<span class="summary_desc"><div class='inline'><p>Shortcut of <span class='object_link'><a href="Promises/FactoryMethods.html#zip_futures_over_on-instance_method" title="Concurrent::Promises::FactoryMethods#zip_futures_over_on (method)">FactoryMethods#zip_futures_over_on</a></span> with default <code>:io</code> executor supplied.</p>
992+
</div></span>
993+
994+
</li>
995+
996+
997+
<li class="public ">
998+
<span class="summary_signature">
999+
1000+
<a href="#zip_futures_over_on-class_method" title="#zip_futures_over_on (class method)">.<strong>zip_futures_over_on</strong>(default_executor, enumerable) {|element| ... } &#x21d2; Future </a>
1001+
1002+
1003+
1004+
</span>
1005+
1006+
<span class="note title not_defined_here">
1007+
extended
1008+
from <span class='object_link'><a href="Promises/FactoryMethods.html#zip_futures_over_on-class_method" title="Concurrent::Promises::FactoryMethods#zip_futures_over_on (method)">FactoryMethods</a></span>
1009+
</span>
1010+
1011+
1012+
1013+
1014+
1015+
1016+
1017+
1018+
1019+
<span class="summary_desc"><div class='inline'><p>Creates new future which is resolved after all the futures created by future_factory from enumerable elements are resolved.</p>
1020+
</div></span>
1021+
9661022
</li>
9671023

9681024

@@ -3012,6 +3068,221 @@ <h3 class="signature " id="zip_futures_on-class_method">
30123068

30133069

30143070

3071+
</li>
3072+
3073+
</ul>
3074+
3075+
</div>
3076+
</div>
3077+
3078+
<div class="method_details ">
3079+
<h3 class="signature " id="zip_futures_over-class_method">
3080+
3081+
.<strong>zip_futures_over</strong>(enumerable, &amp;future_factory) &#x21d2; <tt><span class='object_link'><a href="Promises/Future.html" title="Concurrent::Promises::Future (class)">Future</a></span></tt>
3082+
3083+
3084+
3085+
3086+
3087+
<span class="not_defined_here">
3088+
Originally defined in module
3089+
<span class='object_link'><a href="Promises/FactoryMethods.html#zip_futures_over-class_method" title="Concurrent::Promises::FactoryMethods#zip_futures_over (method)">FactoryMethods</a></span>
3090+
</span>
3091+
3092+
</h3><div class="docstring">
3093+
<div class="discussion">
3094+
3095+
<div class="note notetag">
3096+
<strong>Note:</strong>
3097+
<div class='inline'><p><strong>Edge Features</strong> are under active development and may change frequently.</p>
3098+
3099+
<ul>
3100+
<li> Deprecations are not added before incompatible changes.</li>
3101+
<li> Edge version: <em>major</em> is always 0, <em>minor</em> bump means incompatible change,
3102+
<em>patch</em> bump means compatible change.</li>
3103+
<li> Edge features may also lack tests and documentation.</li>
3104+
<li> Features developed in <code>concurrent-ruby-edge</code> are expected to move
3105+
to <code>concurrent-ruby</code> when finalised.</li>
3106+
</ul>
3107+
</div>
3108+
</div>
3109+
3110+
<p>Shortcut of <span class='object_link'><a href="Promises/FactoryMethods.html#zip_futures_over_on-instance_method" title="Concurrent::Promises::FactoryMethods#zip_futures_over_on (method)">#zip_futures_over_on</a></span> with default <code>:io</code> executor supplied.</p>
3111+
3112+
3113+
</div>
3114+
</div>
3115+
<div class="tags">
3116+
3117+
<p class="tag_title">Returns:</p>
3118+
<ul class="return">
3119+
3120+
<li>
3121+
3122+
3123+
<span class='type'>(<tt><span class='object_link'><a href="Promises/Future.html" title="Concurrent::Promises::Future (class)">Future</a></span></tt>)</span>
3124+
3125+
3126+
3127+
</li>
3128+
3129+
</ul>
3130+
3131+
<p class="tag_title">See Also:</p>
3132+
<ul class="see">
3133+
3134+
<li><span class='object_link'><a href="Promises/FactoryMethods.html#zip_futures_over_on-instance_method" title="Concurrent::Promises::FactoryMethods#zip_futures_over_on (method)">#zip_futures_over_on</a></span></li>
3135+
3136+
</ul>
3137+
3138+
</div>
3139+
</div>
3140+
3141+
<div class="method_details ">
3142+
<h3 class="signature " id="zip_futures_over_on-class_method">
3143+
3144+
.<strong>zip_futures_over_on</strong>(default_executor, enumerable) {|element| ... } &#x21d2; <tt><span class='object_link'><a href="Promises/Future.html" title="Concurrent::Promises::Future (class)">Future</a></span></tt>
3145+
3146+
3147+
3148+
3149+
3150+
<span class="not_defined_here">
3151+
Originally defined in module
3152+
<span class='object_link'><a href="Promises/FactoryMethods.html#zip_futures_over_on-class_method" title="Concurrent::Promises::FactoryMethods#zip_futures_over_on (method)">FactoryMethods</a></span>
3153+
</span>
3154+
3155+
</h3><div class="docstring">
3156+
<div class="discussion">
3157+
3158+
<div class="note notetag">
3159+
<strong>Note:</strong>
3160+
<div class='inline'><p><strong>Edge Features</strong> are under active development and may change frequently.</p>
3161+
3162+
<ul>
3163+
<li> Deprecations are not added before incompatible changes.</li>
3164+
<li> Edge version: <em>major</em> is always 0, <em>minor</em> bump means incompatible change,
3165+
<em>patch</em> bump means compatible change.</li>
3166+
<li> Edge features may also lack tests and documentation.</li>
3167+
<li> Features developed in <code>concurrent-ruby-edge</code> are expected to move
3168+
to <code>concurrent-ruby</code> when finalised.</li>
3169+
</ul>
3170+
</div>
3171+
</div>
3172+
3173+
<p>Creates new future which is resolved after all the futures created by future_factory from
3174+
enumerable elements are resolved. Simplified it does:
3175+
<code>zip(*enumerable.map { |e| future e, &amp;future_factory })</code></p>
3176+
3177+
3178+
</div>
3179+
</div>
3180+
<div class="tags">
3181+
3182+
<div class="examples">
3183+
<p class="tag_title">Examples:</p>
3184+
3185+
3186+
<pre class="example code"><code><span class='comment'># `#succ` calls are executed in parallel
3187+
</span><span class='id identifier rubyid_zip_futures_over_on'>zip_futures_over_on</span><span class='lparen'>(</span><span class='symbol'>:io</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='int'>1</span><span class='comma'>,</span> <span class='int'>2</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='symbol'>:succ</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_value!'>value!</span> <span class='comment'># =&gt; [2, 3]</span></code></pre>
3188+
3189+
</div>
3190+
<p class="tag_title">Parameters:</p>
3191+
<ul class="param">
3192+
3193+
<li>
3194+
3195+
<span class='name'>default_executor</span>
3196+
3197+
3198+
<span class='type'>(<tt>Executor</tt>, <tt>:io</tt>, <tt>:fast</tt>)</span>
3199+
3200+
3201+
3202+
&mdash;
3203+
<div class='inline'><p>Instance of an executor or a name of the
3204+
global executor. Default executor propagates to chained futures unless overridden with
3205+
executor parameter or changed with <span class='object_link'><a href="Promises/AbstractEventFuture.html#with_default_executor-instance_method" title="Concurrent::Promises::AbstractEventFuture#with_default_executor (method)">AbstractEventFuture#with_default_executor</a></span>.</p>
3206+
</div>
3207+
3208+
</li>
3209+
3210+
<li>
3211+
3212+
<span class='name'>enumerable</span>
3213+
3214+
3215+
<span class='type'>(<tt>Enumerable</tt>)</span>
3216+
3217+
3218+
3219+
</li>
3220+
3221+
</ul>
3222+
3223+
<p class="tag_title">Yields:</p>
3224+
<ul class="yield">
3225+
3226+
<li>
3227+
3228+
3229+
<span class='type'></span>
3230+
3231+
3232+
3233+
3234+
<div class='inline'><p>a task to be executed in future</p>
3235+
</div>
3236+
3237+
</li>
3238+
3239+
</ul>
3240+
<p class="tag_title">Yield Parameters:</p>
3241+
<ul class="yieldparam">
3242+
3243+
<li>
3244+
3245+
<span class='name'>element</span>
3246+
3247+
3248+
<span class='type'>(<tt>Object</tt>)</span>
3249+
3250+
3251+
3252+
&mdash;
3253+
<div class='inline'><p>from enumerable</p>
3254+
</div>
3255+
3256+
</li>
3257+
3258+
</ul>
3259+
<p class="tag_title">Yield Returns:</p>
3260+
<ul class="yieldreturn">
3261+
3262+
<li>
3263+
3264+
3265+
<span class='type'>(<tt>Object</tt>)</span>
3266+
3267+
3268+
3269+
&mdash;
3270+
<div class='inline'><p>a value of the future</p>
3271+
</div>
3272+
3273+
</li>
3274+
3275+
</ul>
3276+
<p class="tag_title">Returns:</p>
3277+
<ul class="return">
3278+
3279+
<li>
3280+
3281+
3282+
<span class='type'>(<tt><span class='object_link'><a href="Promises/Future.html" title="Concurrent::Promises::Future (class)">Future</a></span></tt>)</span>
3283+
3284+
3285+
30153286
</li>
30163287

30173288
</ul>

0 commit comments

Comments
 (0)