ruff 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -43,7 +43,7 @@
43
43
 
44
44
  <ul id="full_list" class="class">
45
45
  <li id="object_" class="odd"><div class="item" style="padding-left:30px"><span class='object_link'><a href="top-level-namespace.html" title="Top Level Namespace (root)">Top Level Namespace</a></span></div></li>
46
- <li id='object_Ruff' class='even'><div class='item' style='padding-left:30px'><a class='toggle'></a> <span class='object_link'><a href="Ruff.html" title="Ruff (module)">Ruff</a></span><small class='search_info'>Top Level Namespace</small></div><ul><li id='object_Ruff::Effect' class='collapsed odd'><div class='item' style='padding-left:45px'><span class='object_link'><a href="Ruff/Effect.html" title="Ruff::Effect (class)">Effect</a></span> &lt; Object<small class='search_info'>Ruff</small></div></li><li id='object_Ruff::Handler' class='collapsed even'><div class='item' style='padding-left:45px'><span class='object_link'><a href="Ruff/Handler.html" title="Ruff::Handler (class)">Handler</a></span> &lt; Object<small class='search_info'>Ruff</small></div></li><li id='object_Ruff::Standard' class='collapsed odd'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Ruff/Standard.html" title="Ruff::Standard (module)">Standard</a></span><small class='search_info'>Ruff</small></div><ul><li id='object_Ruff::Standard::CurrentTime' class='collapsed'><div class='item' style='padding-left:60px'><a class='toggle'></a> <span class='object_link'><a href="Ruff/Standard/CurrentTime.html" title="Ruff::Standard::CurrentTime (module)">CurrentTime</a></span><small class='search_info'>Ruff::Standard</small></div><ul><li id='object_Ruff::Standard::CurrentTime::Instance' class='collapsed'><div class='item' style='padding-left:75px'><span class='object_link'><a href="Ruff/Standard/CurrentTime/Instance.html" title="Ruff::Standard::CurrentTime::Instance (class)">Instance</a></span> &lt; Object<small class='search_info'>Ruff::Standard::CurrentTime</small></div></li></ul></li><li id='object_Ruff::Standard::Defer' class='collapsed'><div class='item' style='padding-left:60px'><a class='toggle'></a> <span class='object_link'><a href="Ruff/Standard/Defer.html" title="Ruff::Standard::Defer (module)">Defer</a></span><small class='search_info'>Ruff::Standard</small></div><ul><li id='object_Ruff::Standard::Defer::Instance' class='collapsed'><div class='item' style='padding-left:75px'><span class='object_link'><a href="Ruff/Standard/Defer/Instance.html" title="Ruff::Standard::Defer::Instance (class)">Instance</a></span> &lt; Object<small class='search_info'>Ruff::Standard::Defer</small></div></li></ul></li><li id='object_Ruff::Standard::State' class='collapsed'><div class='item' style='padding-left:60px'><a class='toggle'></a> <span class='object_link'><a href="Ruff/Standard/State.html" title="Ruff::Standard::State (module)">State</a></span><small class='search_info'>Ruff::Standard</small></div><ul><li id='object_Ruff::Standard::State::Instance' class='collapsed'><div class='item' style='padding-left:75px'><span class='object_link'><a href="Ruff/Standard/State/Instance.html" title="Ruff::Standard::State::Instance (class)">Instance</a></span> &lt; Object<small class='search_info'>Ruff::Standard::State</small></div></li></ul></li></ul></li><li id='object_Ruff::Throws' class='collapsed even'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Ruff/Throws.html" title="Ruff::Throws (module)">Throws</a></span><small class='search_info'>Ruff</small></div><ul><li id='object_Ruff::Throws::Eff' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Ruff/Throws/Eff.html" title="Ruff::Throws::Eff (class)">Eff</a></span> &lt; Object<small class='search_info'>Ruff::Throws</small></div></li><li id='object_Ruff::Throws::Resend' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Ruff/Throws/Resend.html" title="Ruff::Throws::Resend (class)">Resend</a></span> &lt; Object<small class='search_info'>Ruff::Throws</small></div></li></ul></li></ul></li>
46
+ <li id='object_Ruff' class='even'><div class='item' style='padding-left:30px'><a class='toggle'></a> <span class='object_link'><a href="Ruff.html" title="Ruff (module)">Ruff</a></span><small class='search_info'>Top Level Namespace</small></div><ul><li id='object_Ruff::Effect' class='collapsed odd'><div class='item' style='padding-left:45px'><span class='object_link'><a href="Ruff/Effect.html" title="Ruff::Effect (class)">Effect</a></span> &lt; Object<small class='search_info'>Ruff</small></div></li><li id='object_Ruff::Handler' class='collapsed even'><div class='item' style='padding-left:45px'><span class='object_link'><a href="Ruff/Handler.html" title="Ruff::Handler (class)">Handler</a></span> &lt; Object<small class='search_info'>Ruff</small></div></li><li id='object_Ruff::Standard' class='collapsed odd'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Ruff/Standard.html" title="Ruff::Standard (module)">Standard</a></span><small class='search_info'>Ruff</small></div><ul><li id='object_Ruff::Standard::CurrentTime' class='collapsed'><div class='item' style='padding-left:60px'><a class='toggle'></a> <span class='object_link'><a href="Ruff/Standard/CurrentTime.html" title="Ruff::Standard::CurrentTime (module)">CurrentTime</a></span><small class='search_info'>Ruff::Standard</small></div><ul><li id='object_Ruff::Standard::CurrentTime::Instance' class='collapsed'><div class='item' style='padding-left:75px'><span class='object_link'><a href="Ruff/Standard/CurrentTime/Instance.html" title="Ruff::Standard::CurrentTime::Instance (class)">Instance</a></span> &lt; Object<small class='search_info'>Ruff::Standard::CurrentTime</small></div></li></ul></li><li id='object_Ruff::Standard::Defer' class='collapsed'><div class='item' style='padding-left:60px'><a class='toggle'></a> <span class='object_link'><a href="Ruff/Standard/Defer.html" title="Ruff::Standard::Defer (module)">Defer</a></span><small class='search_info'>Ruff::Standard</small></div><ul><li id='object_Ruff::Standard::Defer::Instance' class='collapsed'><div class='item' style='padding-left:75px'><span class='object_link'><a href="Ruff/Standard/Defer/Instance.html" title="Ruff::Standard::Defer::Instance (class)">Instance</a></span> &lt; Object<small class='search_info'>Ruff::Standard::Defer</small></div></li></ul></li><li id='object_Ruff::Standard::MeasureTime' class='collapsed'><div class='item' style='padding-left:60px'><a class='toggle'></a> <span class='object_link'><a href="Ruff/Standard/MeasureTime.html" title="Ruff::Standard::MeasureTime (module)">MeasureTime</a></span><small class='search_info'>Ruff::Standard</small></div><ul><li id='object_Ruff::Standard::MeasureTime::Instance' class='collapsed'><div class='item' style='padding-left:75px'><span class='object_link'><a href="Ruff/Standard/MeasureTime/Instance.html" title="Ruff::Standard::MeasureTime::Instance (class)">Instance</a></span> &lt; Object<small class='search_info'>Ruff::Standard::MeasureTime</small></div></li></ul></li><li id='object_Ruff::Standard::State' class='collapsed'><div class='item' style='padding-left:60px'><a class='toggle'></a> <span class='object_link'><a href="Ruff/Standard/State.html" title="Ruff::Standard::State (module)">State</a></span><small class='search_info'>Ruff::Standard</small></div><ul><li id='object_Ruff::Standard::State::Instance' class='collapsed'><div class='item' style='padding-left:75px'><span class='object_link'><a href="Ruff/Standard/State/Instance.html" title="Ruff::Standard::State::Instance (class)">Instance</a></span> &lt; Object<small class='search_info'>Ruff::Standard::State</small></div></li></ul></li></ul></li><li id='object_Ruff::Throws' class='collapsed even'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Ruff/Throws.html" title="Ruff::Throws (module)">Throws</a></span><small class='search_info'>Ruff</small></div><ul><li id='object_Ruff::Throws::Eff' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Ruff/Throws/Eff.html" title="Ruff::Throws::Eff (class)">Eff</a></span> &lt; Object<small class='search_info'>Ruff::Throws</small></div></li><li id='object_Ruff::Throws::Resend' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Ruff/Throws/Resend.html" title="Ruff::Throws::Resend (class)">Resend</a></span> &lt; Object<small class='search_info'>Ruff::Throws</small></div></li></ul></li></ul></li>
47
47
 
48
48
  </ul>
49
49
  </div>
@@ -6,7 +6,7 @@
6
6
  <title>
7
7
  File: README
8
8
 
9
- &mdash; Ruff 1.0.1 Documentation
9
+ &mdash; Ruff 1.1.0 Documentation
10
10
 
11
11
  </title>
12
12
 
@@ -146,9 +146,9 @@
146
146
  </div></div>
147
147
 
148
148
  <div id="footer">
149
- Generated on Fri Oct 4 13:57:07 2019 by
149
+ Generated on Fri Oct 4 21:12:21 2019 by
150
150
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
151
- 0.9.20 (ruby-2.6.4).
151
+ 0.9.20 (ruby-2.6.5).
152
152
  </div>
153
153
 
154
154
  </div>
@@ -2,7 +2,7 @@
2
2
  <html>
3
3
  <head>
4
4
  <meta charset="utf-8">
5
- <title>Ruff 1.0.1 Documentation</title>
5
+ <title>Ruff 1.1.0 Documentation</title>
6
6
  </head>
7
7
  <script type="text/javascript" charset="utf-8">
8
8
  var match = unescape(window.location.hash).match(/^#!(.+)/);
@@ -6,7 +6,7 @@
6
6
  <title>
7
7
  File: README
8
8
 
9
- &mdash; Ruff 1.0.1 Documentation
9
+ &mdash; Ruff 1.1.0 Documentation
10
10
 
11
11
  </title>
12
12
 
@@ -146,9 +146,9 @@
146
146
  </div></div>
147
147
 
148
148
  <div id="footer">
149
- Generated on Fri Oct 4 13:57:07 2019 by
149
+ Generated on Fri Oct 4 21:12:21 2019 by
150
150
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
151
- 0.9.20 (ruby-2.6.4).
151
+ 0.9.20 (ruby-2.6.5).
152
152
  </div>
153
153
 
154
154
  </div>
@@ -92,6 +92,22 @@
92
92
  </li>
93
93
 
94
94
 
95
+ <li class="odd ">
96
+ <div class="item">
97
+ <span class='object_link'><a href="Ruff/Standard/MeasureTime/Instance.html#eff-instance_method" title="Ruff::Standard::MeasureTime::Instance#eff (method)">#eff</a></span>
98
+ <small>Ruff::Standard::MeasureTime::Instance</small>
99
+ </div>
100
+ </li>
101
+
102
+
103
+ <li class="even ">
104
+ <div class="item">
105
+ <span class='object_link'><a href="Ruff/Standard/MeasureTime.html#eff-instance_method" title="Ruff::Standard::MeasureTime#eff (method)">#eff</a></span>
106
+ <small>Ruff::Standard::MeasureTime</small>
107
+ </div>
108
+ </li>
109
+
110
+
95
111
  <li class="odd ">
96
112
  <div class="item">
97
113
  <span class='object_link'><a href="Ruff/Standard/State/Instance.html#eff-instance_method" title="Ruff::Standard::State::Instance#eff (method)">#eff</a></span>
@@ -221,6 +237,14 @@
221
237
 
222
238
 
223
239
  <li class="odd ">
240
+ <div class="item">
241
+ <span class='object_link'><a href="Ruff/Standard/MeasureTime/Instance.html#initialize-instance_method" title="Ruff::Standard::MeasureTime::Instance#initialize (method)">#initialize</a></span>
242
+ <small>Ruff::Standard::MeasureTime::Instance</small>
243
+ </div>
244
+ </li>
245
+
246
+
247
+ <li class="even ">
224
248
  <div class="item">
225
249
  <span class='object_link'><a href="Ruff/Standard/State/Instance.html#initialize-instance_method" title="Ruff::Standard::State::Instance#initialize (method)">#initialize</a></span>
226
250
  <small>Ruff::Standard::State::Instance</small>
@@ -228,7 +252,7 @@
228
252
  </li>
229
253
 
230
254
 
231
- <li class="even ">
255
+ <li class="odd ">
232
256
  <div class="item">
233
257
  <span class='object_link'><a href="Ruff.html#instance-class_method" title="Ruff.instance (method)">instance</a></span>
234
258
  <small>Ruff</small>
@@ -236,7 +260,7 @@
236
260
  </li>
237
261
 
238
262
 
239
- <li class="odd ">
263
+ <li class="even ">
240
264
  <div class="item">
241
265
  <span class='object_link'><a href="Ruff/Throws/Resend.html#k-instance_method" title="Ruff::Throws::Resend#k (method)">#k</a></span>
242
266
  <small>Ruff::Throws::Resend</small>
@@ -244,7 +268,23 @@
244
268
  </li>
245
269
 
246
270
 
271
+ <li class="odd ">
272
+ <div class="item">
273
+ <span class='object_link'><a href="Ruff/Standard/MeasureTime/Instance.html#measure-instance_method" title="Ruff::Standard::MeasureTime::Instance#measure (method)">#measure</a></span>
274
+ <small>Ruff::Standard::MeasureTime::Instance</small>
275
+ </div>
276
+ </li>
277
+
278
+
247
279
  <li class="even ">
280
+ <div class="item">
281
+ <span class='object_link'><a href="Ruff/Standard/MeasureTime.html#measure-class_method" title="Ruff::Standard::MeasureTime.measure (method)">measure</a></span>
282
+ <small>Ruff::Standard::MeasureTime</small>
283
+ </div>
284
+ </li>
285
+
286
+
287
+ <li class="odd ">
248
288
  <div class="item">
249
289
  <span class='object_link'><a href="Ruff/Standard/State/Instance.html#modify-instance_method" title="Ruff::Standard::State::Instance#modify (method)">#modify</a></span>
250
290
  <small>Ruff::Standard::State::Instance</small>
@@ -252,7 +292,7 @@
252
292
  </li>
253
293
 
254
294
 
255
- <li class="odd ">
295
+ <li class="even ">
256
296
  <div class="item">
257
297
  <span class='object_link'><a href="Ruff/Standard/State.html#modify-class_method" title="Ruff::Standard::State.modify (method)">modify</a></span>
258
298
  <small>Ruff::Standard::State</small>
@@ -260,7 +300,7 @@
260
300
  </li>
261
301
 
262
302
 
263
- <li class="even ">
303
+ <li class="odd ">
264
304
  <div class="item">
265
305
  <span class='object_link'><a href="Ruff/Handler.html#on-instance_method" title="Ruff::Handler#on (method)">#on</a></span>
266
306
  <small>Ruff::Handler</small>
@@ -268,7 +308,7 @@
268
308
  </li>
269
309
 
270
310
 
271
- <li class="odd ">
311
+ <li class="even ">
272
312
  <div class="item">
273
313
  <span class='object_link'><a href="Ruff/Effect.html#perform-instance_method" title="Ruff::Effect#perform (method)">#perform</a></span>
274
314
  <small>Ruff::Effect</small>
@@ -276,7 +316,7 @@
276
316
  </li>
277
317
 
278
318
 
279
- <li class="even ">
319
+ <li class="odd ">
280
320
  <div class="item">
281
321
  <span class='object_link'><a href="Ruff/Standard/State/Instance.html#put-instance_method" title="Ruff::Standard::State::Instance#put (method)">#put</a></span>
282
322
  <small>Ruff::Standard::State::Instance</small>
@@ -284,7 +324,7 @@
284
324
  </li>
285
325
 
286
326
 
287
- <li class="odd ">
327
+ <li class="even ">
288
328
  <div class="item">
289
329
  <span class='object_link'><a href="Ruff/Standard/State.html#put-class_method" title="Ruff::Standard::State.put (method)">put</a></span>
290
330
  <small>Ruff::Standard::State</small>
@@ -292,7 +332,7 @@
292
332
  </li>
293
333
 
294
334
 
295
- <li class="even ">
335
+ <li class="odd ">
296
336
  <div class="item">
297
337
  <span class='object_link'><a href="Ruff/Standard/Defer/Instance.html#register-instance_method" title="Ruff::Standard::Defer::Instance#register (method)">#register</a></span>
298
338
  <small>Ruff::Standard::Defer::Instance</small>
@@ -300,7 +340,7 @@
300
340
  </li>
301
341
 
302
342
 
303
- <li class="odd ">
343
+ <li class="even ">
304
344
  <div class="item">
305
345
  <span class='object_link'><a href="Ruff/Standard/Defer.html#register-class_method" title="Ruff::Standard::Defer.register (method)">register</a></span>
306
346
  <small>Ruff::Standard::Defer</small>
@@ -308,7 +348,7 @@
308
348
  </li>
309
349
 
310
350
 
311
- <li class="even ">
351
+ <li class="odd ">
312
352
  <div class="item">
313
353
  <span class='object_link'><a href="Ruff/Handler.html#run-instance_method" title="Ruff::Handler#run (method)">#run</a></span>
314
354
  <small>Ruff::Handler</small>
@@ -316,7 +356,7 @@
316
356
  </li>
317
357
 
318
358
 
319
- <li class="odd ">
359
+ <li class="even ">
320
360
  <div class="item">
321
361
  <span class='object_link'><a href="Ruff/Handler.html#to-instance_method" title="Ruff::Handler#to (method)">#to</a></span>
322
362
  <small>Ruff::Handler</small>
@@ -324,7 +364,7 @@
324
364
  </li>
325
365
 
326
366
 
327
- <li class="even ">
367
+ <li class="odd ">
328
368
  <div class="item">
329
369
  <span class='object_link'><a href="Ruff/Standard/CurrentTime/Instance.html#with-instance_method" title="Ruff::Standard::CurrentTime::Instance#with (method)">#with</a></span>
330
370
  <small>Ruff::Standard::CurrentTime::Instance</small>
@@ -332,7 +372,7 @@
332
372
  </li>
333
373
 
334
374
 
335
- <li class="odd ">
375
+ <li class="even ">
336
376
  <div class="item">
337
377
  <span class='object_link'><a href="Ruff/Standard/CurrentTime.html#with-class_method" title="Ruff::Standard::CurrentTime.with (method)">with</a></span>
338
378
  <small>Ruff::Standard::CurrentTime</small>
@@ -340,7 +380,7 @@
340
380
  </li>
341
381
 
342
382
 
343
- <li class="even ">
383
+ <li class="odd ">
344
384
  <div class="item">
345
385
  <span class='object_link'><a href="Ruff/Standard/Defer/Instance.html#with-instance_method" title="Ruff::Standard::Defer::Instance#with (method)">#with</a></span>
346
386
  <small>Ruff::Standard::Defer::Instance</small>
@@ -348,7 +388,7 @@
348
388
  </li>
349
389
 
350
390
 
351
- <li class="odd ">
391
+ <li class="even ">
352
392
  <div class="item">
353
393
  <span class='object_link'><a href="Ruff/Standard/Defer.html#with-class_method" title="Ruff::Standard::Defer.with (method)">with</a></span>
354
394
  <small>Ruff::Standard::Defer</small>
@@ -356,7 +396,23 @@
356
396
  </li>
357
397
 
358
398
 
399
+ <li class="odd ">
400
+ <div class="item">
401
+ <span class='object_link'><a href="Ruff/Standard/MeasureTime/Instance.html#with-instance_method" title="Ruff::Standard::MeasureTime::Instance#with (method)">#with</a></span>
402
+ <small>Ruff::Standard::MeasureTime::Instance</small>
403
+ </div>
404
+ </li>
405
+
406
+
359
407
  <li class="even ">
408
+ <div class="item">
409
+ <span class='object_link'><a href="Ruff/Standard/MeasureTime.html#with-class_method" title="Ruff::Standard::MeasureTime.with (method)">with</a></span>
410
+ <small>Ruff::Standard::MeasureTime</small>
411
+ </div>
412
+ </li>
413
+
414
+
415
+ <li class="odd ">
360
416
  <div class="item">
361
417
  <span class='object_link'><a href="Ruff/Standard/State/Instance.html#with-instance_method" title="Ruff::Standard::State::Instance#with (method)">#with</a></span>
362
418
  <small>Ruff::Standard::State::Instance</small>
@@ -364,7 +420,7 @@
364
420
  </li>
365
421
 
366
422
 
367
- <li class="odd ">
423
+ <li class="even ">
368
424
  <div class="item">
369
425
  <span class='object_link'><a href="Ruff/Standard/State.html#with-class_method" title="Ruff::Standard::State.with (method)">with</a></span>
370
426
  <small>Ruff::Standard::State</small>
@@ -372,7 +428,7 @@
372
428
  </li>
373
429
 
374
430
 
375
- <li class="even ">
431
+ <li class="odd ">
376
432
  <div class="item">
377
433
  <span class='object_link'><a href="Ruff/Standard/State/Instance.html#with_init-instance_method" title="Ruff::Standard::State::Instance#with_init (method)">#with_init</a></span>
378
434
  <small>Ruff::Standard::State::Instance</small>
@@ -380,7 +436,7 @@
380
436
  </li>
381
437
 
382
438
 
383
- <li class="odd ">
439
+ <li class="even ">
384
440
  <div class="item">
385
441
  <span class='object_link'><a href="Ruff/Standard/State.html#with_init-class_method" title="Ruff::Standard::State.with_init (method)">with_init</a></span>
386
442
  <small>Ruff::Standard::State</small>
@@ -6,7 +6,7 @@
6
6
  <title>
7
7
  Top Level Namespace
8
8
 
9
- &mdash; Ruff 1.0.1 Documentation
9
+ &mdash; Ruff 1.1.0 Documentation
10
10
 
11
11
  </title>
12
12
 
@@ -100,9 +100,9 @@
100
100
  </div>
101
101
 
102
102
  <div id="footer">
103
- Generated on Fri Oct 4 13:57:07 2019 by
103
+ Generated on Fri Oct 4 21:12:21 2019 by
104
104
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
105
- 0.9.20 (ruby-2.6.4).
105
+ 0.9.20 (ruby-2.6.5).
106
106
  </div>
107
107
 
108
108
  </div>
@@ -12,7 +12,7 @@ module Ruff
12
12
  # @see Effect.initialize Effect.initialize
13
13
  #
14
14
  # @example
15
- # Log = Ruff.instance # === Ruff::Effect.new
15
+ # Log = Ruff.instance #==> Ruff::Effect.new
16
16
  def instance
17
17
  Effect.new
18
18
  end
@@ -18,6 +18,8 @@
18
18
  #
19
19
  module Ruff::Standard end
20
20
 
21
+ require 'ruff'
21
22
  require 'ruff/standard/current_time'
23
+ require 'ruff/standard/measure_time'
22
24
  require 'ruff/standard/defer'
23
25
  require 'ruff/standard/state'
@@ -9,6 +9,7 @@ module Ruff::Standard::CurrentTime
9
9
  # makes a new instance.
10
10
  def initialize
11
11
  @eff = Ruff.instance
12
+ @handler = Ruff.handler.on(@eff) { |k| k[Time.now] }
12
13
  end
13
14
 
14
15
  # is a smart method to invoke the effect operation.
@@ -21,7 +22,7 @@ module Ruff::Standard::CurrentTime
21
22
  # is a handler to interpret the effect invokation as requesting the current time.
22
23
  # This handler receives the *request* and returns current time.
23
24
  #
24
- # @param [Proc<(), A>!{CurrentTime.eff, e}] th
25
+ # @param [Proc<(), A!{CurrentTime.eff, e}>] th
25
26
  # is a thunk returning `A` with the possibility to invoke effects,
26
27
  # including `CurrentTime.eff` .
27
28
  #
@@ -29,7 +30,7 @@ module Ruff::Standard::CurrentTime
29
30
  # returns `A` , without modification by value handler.
30
31
  # But it still has the possibility to invoke effects(`e`).
31
32
  def with(&th)
32
- Ruff.handler.on(@eff) { |k| k[Time.now] }.run(&th)
33
+ @handler.run(&th)
33
34
  end
34
35
 
35
36
  # You can reimplement the handler using this effect instance.
@@ -33,14 +33,17 @@ module Ruff::Standard::Defer
33
33
  # This is a stack to store deferred procedures.
34
34
  procs = []
35
35
 
36
+ # The handler *closes* `procs` variable so it should be created every time.
36
37
  Ruff.handler
37
38
  .on(@eff) do |k, prc|
38
39
  procs << prc
39
40
  k[]
40
41
  end
41
- .to do |_|
42
+ .to do |v|
42
43
  # Like Go's defer functions, it crashes the thunk by reversed order.
43
44
  procs.reverse_each(&:[])
45
+
46
+ v
44
47
  end
45
48
  .run(&th)
46
49
  end
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ # `MeasureTime` provides effects `MeasureTime.eff` ,
4
+ # and the implementation to measure and report execution time .
5
+ #
6
+ # The module has an instance of `Instance` and provides its methods as module method.
7
+ # @see Standard::MeasureTime::Instance
8
+ #
9
+ # @example
10
+ # MeasureTime.with {
11
+ # MeasureTime.measure 'one'
12
+ # sleep 1
13
+ # MeasureTime.measure 'two'
14
+ # sleep 0.1
15
+ #
16
+ # return 0
17
+ # }
18
+ # #==> [0, {:label=>"two", :time=>0.1}, {:label=>"one", :time=>1.1}]
19
+ module Ruff::Standard::MeasureTime
20
+ class Instance
21
+ # makes a new instance.
22
+ def initialize
23
+ @eff = Ruff.instance
24
+ @handler = Ruff.handler
25
+ .on(@eff) do |k, label|
26
+ t1 = Time.now
27
+ result = k[]
28
+ t2 = Time.now
29
+ result + [{ label: label, time: t2 - t1 }]
30
+ end
31
+ .to { |x| [x] }
32
+ end
33
+
34
+ # is a smart method to invoke the effect operation.
35
+ # @param [string] label
36
+ # is the label of the measurement.
37
+ # @return [()]
38
+ def measure(label)
39
+ @eff.perform(label)
40
+ end
41
+
42
+ # is a handler to interpret the effect invocation as measuring computation time.
43
+ #
44
+ # @param [Proc<(), A!{MeasureTime.eff, e}>] th
45
+ # is a thunk returning `A` with the possibility to invoke effects,
46
+ # including `MeasureTime.eff` .
47
+ #
48
+ # @return [[A, ...{ label: string, time: float }]!{e}]
49
+ # returns list. the first is the result `A`, and the rest is the measurement results.
50
+ # It still has the possibility to invoke effects(`e`).
51
+ def with(&th)
52
+ @handler.run(&th)
53
+ end
54
+
55
+ # You can reimplement the handler using this effect instance.
56
+ attr_reader :eff
57
+ end
58
+
59
+ # ---
60
+ @inst = Instance.new
61
+ @eff = @inst.eff
62
+
63
+ # @see Ruff::Standard::MeasureTime::Instance#measure
64
+ def measure(label)
65
+ @inst.measure(label)
66
+ end
67
+
68
+ # @see Ruff::Standard::MeasureTime::Instance#with
69
+ def with(&th)
70
+ @inst.with(&th)
71
+ end
72
+
73
+ module_function :measure, :with
74
+
75
+ # @see Ruff::Standard::MeasureTime::Instance#eff
76
+ attr_reader :eff
77
+ end