datawire_mdk 2.0.5

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.
@@ -0,0 +1,814 @@
1
+ # Quark 1.0.406 run at 2016-08-31 13:21:53.028839
2
+ module Quark
3
+ require "quark"
4
+ def self.mdk_runtime; MdkRuntime; end
5
+ module MdkRuntime
6
+ def self.promise; Promise; end
7
+ module Promise
8
+ require "datawire-quark-core"
9
+ require_relative '../quark/reflect' # 0 ('quark',) ('mdk_runtime',)
10
+ require_relative '../quark/error' # 0 ('quark',) ('mdk_runtime',)
11
+ require_relative '../quark' # 0 () ('mdk_runtime',)
12
+ require_relative '../datawire_mdk_md' # 0 () ('mdk_runtime',)
13
+ require_relative 'actors' # 1 () ()
14
+
15
+
16
+ ##
17
+ # Resolve a Promise with a result.
18
+
19
+ def self._fullfilPromise(promise, value)
20
+
21
+ if (::Quark.quark.reflect.QuarkClass.ERROR.hasInstance(value))
22
+ promise._reject(::DatawireQuarkCore.cast(value) { ::Quark.quark.error.Error })
23
+ else
24
+ promise._resolve(value)
25
+ end
26
+
27
+
28
+ nil
29
+ end
30
+
31
+ def self._ChainPromise; ChainPromise; end
32
+ class ChainPromise < ::DatawireQuarkCore::QuarkObject
33
+ attr_accessor :_next
34
+ extend ::DatawireQuarkCore::Static
35
+
36
+ static mdk_runtime_promise__ChainPromise_ref: -> { nil }
37
+
38
+
39
+
40
+ def initialize(next_)
41
+
42
+ self.__init_fields__
43
+ (self)._next = next_
44
+
45
+ nil
46
+ end
47
+
48
+
49
+
50
+
51
+ def call(arg)
52
+
53
+ ::Quark.mdk_runtime.promise._fullfilPromise((self)._next, arg)
54
+ return nil
55
+
56
+ nil
57
+ end
58
+
59
+ def _getClass()
60
+
61
+ return "mdk_runtime.promise._ChainPromise"
62
+
63
+ nil
64
+ end
65
+
66
+ def _getField(name)
67
+
68
+ if ((name) == ("_next"))
69
+ return (self)._next
70
+ end
71
+ return nil
72
+
73
+ nil
74
+ end
75
+
76
+ def _setField(name, value)
77
+
78
+ if ((name) == ("_next"))
79
+ (self)._next = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.promise.Promise }
80
+ end
81
+
82
+ nil
83
+ end
84
+
85
+ def __init_fields__()
86
+
87
+ self._next = nil
88
+
89
+ nil
90
+ end
91
+
92
+
93
+ end
94
+ ChainPromise.unlazy_statics
95
+
96
+ def self._CallbackEvent; CallbackEvent; end
97
+ class CallbackEvent < ::DatawireQuarkCore::QuarkObject
98
+ attr_accessor :_callable, :_next, :_value
99
+ extend ::DatawireQuarkCore::Static
100
+
101
+ static mdk_runtime_promise__CallbackEvent_ref: -> { nil }
102
+
103
+
104
+
105
+ def initialize(callable, next_, value)
106
+
107
+ self.__init_fields__
108
+ (self)._callable = callable
109
+ (self)._next = next_
110
+ (self)._value = value
111
+
112
+ nil
113
+ end
114
+
115
+
116
+
117
+
118
+ def deliver()
119
+
120
+ result = ((self)._callable).call((self)._value)
121
+ if (::Quark.quark.reflect.QuarkClass.get("mdk_runtime.promise.Promise").hasInstance(result))
122
+ toChain = ::DatawireQuarkCore.cast(result) { ::Quark.mdk_runtime.promise.Promise }
123
+ toChain.andFinally(::Quark.mdk_runtime.promise._ChainPromise.new((self)._next))
124
+ else
125
+ ::Quark.mdk_runtime.promise._fullfilPromise((self)._next, result)
126
+ end
127
+
128
+ nil
129
+ end
130
+
131
+ def _getClass()
132
+
133
+ return "mdk_runtime.promise._CallbackEvent"
134
+
135
+ nil
136
+ end
137
+
138
+ def _getField(name)
139
+
140
+ if ((name) == ("_callable"))
141
+ return (self)._callable
142
+ end
143
+ if ((name) == ("_next"))
144
+ return (self)._next
145
+ end
146
+ if ((name) == ("_value"))
147
+ return (self)._value
148
+ end
149
+ return nil
150
+
151
+ nil
152
+ end
153
+
154
+ def _setField(name, value)
155
+
156
+ if ((name) == ("_callable"))
157
+ (self)._callable = ::DatawireQuarkCore.cast(value) { ::Quark.quark.UnaryCallable }
158
+ end
159
+ if ((name) == ("_next"))
160
+ (self)._next = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.promise.Promise }
161
+ end
162
+ if ((name) == ("_value"))
163
+ (self)._value = value
164
+ end
165
+
166
+ nil
167
+ end
168
+
169
+ def __init_fields__()
170
+
171
+ self._callable = nil
172
+ self._next = nil
173
+ self._value = nil
174
+
175
+ nil
176
+ end
177
+
178
+
179
+ end
180
+ CallbackEvent.unlazy_statics
181
+
182
+ def self._Callback; Callback; end
183
+ class Callback < ::DatawireQuarkCore::QuarkObject
184
+ attr_accessor :_callable, :_next
185
+ extend ::DatawireQuarkCore::Static
186
+
187
+ static mdk_runtime_promise__Callback_ref: -> { nil }
188
+
189
+
190
+
191
+ def initialize(callable, next_)
192
+
193
+ self.__init_fields__
194
+ (self)._callable = callable
195
+ (self)._next = next_
196
+
197
+ nil
198
+ end
199
+
200
+
201
+
202
+
203
+ def call(result)
204
+
205
+ event = ::Quark.mdk_runtime.promise._CallbackEvent.new((self)._callable, (self)._next, result)
206
+ (@_next)._dispatcher._queue(event)
207
+
208
+ nil
209
+ end
210
+
211
+ def _getClass()
212
+
213
+ return "mdk_runtime.promise._Callback"
214
+
215
+ nil
216
+ end
217
+
218
+ def _getField(name)
219
+
220
+ if ((name) == ("_callable"))
221
+ return (self)._callable
222
+ end
223
+ if ((name) == ("_next"))
224
+ return (self)._next
225
+ end
226
+ return nil
227
+
228
+ nil
229
+ end
230
+
231
+ def _setField(name, value)
232
+
233
+ if ((name) == ("_callable"))
234
+ (self)._callable = ::DatawireQuarkCore.cast(value) { ::Quark.quark.UnaryCallable }
235
+ end
236
+ if ((name) == ("_next"))
237
+ (self)._next = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.promise.Promise }
238
+ end
239
+
240
+ nil
241
+ end
242
+
243
+ def __init_fields__()
244
+
245
+ self._callable = nil
246
+ self._next = nil
247
+
248
+ nil
249
+ end
250
+
251
+
252
+ end
253
+ Callback.unlazy_statics
254
+
255
+ def self._Passthrough; Passthrough; end
256
+ class Passthrough < ::DatawireQuarkCore::QuarkObject
257
+ extend ::DatawireQuarkCore::Static
258
+
259
+ static mdk_runtime_promise__Passthrough_ref: -> { nil }
260
+
261
+
262
+
263
+ def initialize()
264
+ self.__init_fields__
265
+
266
+ nil
267
+ end
268
+
269
+
270
+
271
+
272
+ def call(arg)
273
+
274
+ return arg
275
+
276
+ nil
277
+ end
278
+
279
+ def _getClass()
280
+
281
+ return "mdk_runtime.promise._Passthrough"
282
+
283
+ nil
284
+ end
285
+
286
+ def _getField(name)
287
+
288
+ return nil
289
+
290
+ nil
291
+ end
292
+
293
+ def _setField(name, value)
294
+
295
+ nil
296
+
297
+ nil
298
+ end
299
+
300
+ def __init_fields__()
301
+
302
+
303
+ nil
304
+ end
305
+
306
+
307
+ end
308
+ Passthrough.unlazy_statics
309
+
310
+ def self._CallIfIsInstance; CallIfIsInstance; end
311
+ class CallIfIsInstance < ::DatawireQuarkCore::QuarkObject
312
+ attr_accessor :_underlying, :_class
313
+ extend ::DatawireQuarkCore::Static
314
+
315
+ static mdk_runtime_promise__CallIfIsInstance_ref: -> { nil }
316
+
317
+
318
+
319
+ def initialize(underlying, klass)
320
+
321
+ self.__init_fields__
322
+ (self)._underlying = underlying
323
+ (self)._class = klass
324
+
325
+ nil
326
+ end
327
+
328
+
329
+
330
+
331
+ def call(arg)
332
+
333
+ if ((self)._class.hasInstance(arg))
334
+ return ((self)._underlying).call(arg)
335
+ else
336
+ return arg
337
+ end
338
+
339
+ nil
340
+ end
341
+
342
+ def _getClass()
343
+
344
+ return "mdk_runtime.promise._CallIfIsInstance"
345
+
346
+ nil
347
+ end
348
+
349
+ def _getField(name)
350
+
351
+ if ((name) == ("_underlying"))
352
+ return (self)._underlying
353
+ end
354
+ if ((name) == ("_class"))
355
+ return (self)._class
356
+ end
357
+ return nil
358
+
359
+ nil
360
+ end
361
+
362
+ def _setField(name, value)
363
+
364
+ if ((name) == ("_underlying"))
365
+ (self)._underlying = ::DatawireQuarkCore.cast(value) { ::Quark.quark.UnaryCallable }
366
+ end
367
+ if ((name) == ("_class"))
368
+ (self)._class = ::DatawireQuarkCore.cast(value) { ::Quark.quark.reflect.QuarkClass }
369
+ end
370
+
371
+ nil
372
+ end
373
+
374
+ def __init_fields__()
375
+
376
+ self._underlying = nil
377
+ self._class = nil
378
+
379
+ nil
380
+ end
381
+
382
+
383
+ end
384
+ CallIfIsInstance.unlazy_statics
385
+
386
+ def self.PromiseValue; PromiseValue; end
387
+ ##
388
+ # Snapshot of the value of a Promise, if it has one.
389
+
390
+ class PromiseValue < ::DatawireQuarkCore::QuarkObject
391
+ attr_accessor :_successResult, :_failureResult, :_hasValue
392
+ extend ::DatawireQuarkCore::Static
393
+
394
+ static mdk_runtime_promise_PromiseValue_ref: -> { nil }
395
+
396
+
397
+
398
+ def initialize(successResult, failureResult, hasValue)
399
+
400
+ self.__init_fields__
401
+ (self)._successResult = successResult
402
+ (self)._failureResult = failureResult
403
+ (self)._hasValue = hasValue
404
+
405
+ nil
406
+ end
407
+
408
+
409
+
410
+
411
+ ##
412
+ # Return true if the Promise had a value at the time this was created.
413
+
414
+ def hasValue()
415
+
416
+ return (self)._hasValue
417
+
418
+ nil
419
+ end
420
+
421
+ ##
422
+ # Return true if value is error. Result is only valid if hasValue() is true.
423
+
424
+ def isError()
425
+
426
+ return ((self)._failureResult) != (nil)
427
+
428
+ nil
429
+ end
430
+
431
+ ##
432
+ # Return the value. Result is only valid if hasValue() is true.
433
+
434
+ def getValue()
435
+
436
+ if (self.isError())
437
+ return (self)._failureResult
438
+ else
439
+ return (self)._successResult
440
+ end
441
+
442
+ nil
443
+ end
444
+
445
+ def _getClass()
446
+
447
+ return "mdk_runtime.promise.PromiseValue"
448
+
449
+ nil
450
+ end
451
+
452
+ def _getField(name)
453
+
454
+ if ((name) == ("_successResult"))
455
+ return (self)._successResult
456
+ end
457
+ if ((name) == ("_failureResult"))
458
+ return (self)._failureResult
459
+ end
460
+ if ((name) == ("_hasValue"))
461
+ return (self)._hasValue
462
+ end
463
+ return nil
464
+
465
+ nil
466
+ end
467
+
468
+ def _setField(name, value)
469
+
470
+ if ((name) == ("_successResult"))
471
+ (self)._successResult = value
472
+ end
473
+ if ((name) == ("_failureResult"))
474
+ (self)._failureResult = ::DatawireQuarkCore.cast(value) { ::Quark.quark.error.Error }
475
+ end
476
+ if ((name) == ("_hasValue"))
477
+ (self)._hasValue = ::DatawireQuarkCore.cast(value) { ::Object }
478
+ end
479
+
480
+ nil
481
+ end
482
+
483
+ def __init_fields__()
484
+
485
+ self._successResult = nil
486
+ self._failureResult = nil
487
+ self._hasValue = nil
488
+
489
+ nil
490
+ end
491
+
492
+
493
+ end
494
+ PromiseValue.unlazy_statics
495
+
496
+ def self.Promise; Promise; end
497
+ ##
498
+ # An object that will eventually have a result.
499
+ # Results are passed to callables whose return value is passed
500
+ # to resulting Promise. If a return result is a Promise it will
501
+ # be chained automatically, i.e. callables will never be called
502
+ # with a Promise, only with values.
503
+
504
+ class Promise < ::DatawireQuarkCore::QuarkObject
505
+ attr_accessor :_lock, :_successResult, :_failureResult, :_hasResult, :_successCallbacks, :_failureCallbacks, :_dispatcher
506
+ extend ::DatawireQuarkCore::Static
507
+
508
+ static quark_List_mdk_runtime_promise__Callback__ref: -> { nil }
509
+ static mdk_runtime_promise_Promise_ref: -> { nil }
510
+
511
+
512
+
513
+ def initialize(dispatcher)
514
+
515
+ self.__init_fields__
516
+ (self)._dispatcher = dispatcher
517
+ (self)._lock = ::DatawireQuarkCore::Lock.new()
518
+ (self)._hasResult = false
519
+ (self)._successResult = nil
520
+ (self)._failureResult = ::DatawireQuarkCore.cast(nil) { ::Quark.quark.error.Error }
521
+ (self)._successCallbacks = ::DatawireQuarkCore::List.new([])
522
+ (self)._failureCallbacks = ::DatawireQuarkCore::List.new([])
523
+
524
+ nil
525
+ end
526
+
527
+
528
+
529
+
530
+ def _maybeRunCallbacks()
531
+
532
+ (self)._lock.acquire()
533
+ if (!((self)._hasResult))
534
+ (self)._lock.release()
535
+ return
536
+ end
537
+ callbacks = (self)._successCallbacks
538
+ value = (self)._successResult
539
+ if (((self)._failureResult) != (nil))
540
+ callbacks = (self)._failureCallbacks
541
+ value = (self)._failureResult
542
+ end
543
+ (self)._failureCallbacks = ::DatawireQuarkCore::List.new([])
544
+ (self)._successCallbacks = ::DatawireQuarkCore::List.new([])
545
+ (self)._lock.release()
546
+ idx = 0
547
+ while ((idx) < ((callbacks).size)) do
548
+ (callbacks)[idx].call(value)
549
+ idx = (idx) + (1)
550
+ end
551
+
552
+ nil
553
+ end
554
+
555
+ def _resolve(result)
556
+
557
+ if (::Quark.quark.reflect.QuarkClass.ERROR.hasInstance(result))
558
+ self._reject(::DatawireQuarkCore.cast(result) { ::Quark.quark.error.Error })
559
+ return
560
+ end
561
+ (self)._lock.acquire()
562
+ if ((self)._hasResult)
563
+ ::DatawireQuarkCore.print("BUG: Resolved Promise that already has a value.")
564
+ (self)._lock.release()
565
+ return
566
+ end
567
+ (self)._hasResult = true
568
+ (self)._successResult = result
569
+ (self)._lock.release()
570
+ self._maybeRunCallbacks()
571
+
572
+ nil
573
+ end
574
+
575
+ def _reject(err)
576
+
577
+ (self)._lock.acquire()
578
+ if ((self)._hasResult)
579
+ ::DatawireQuarkCore.print("BUG: Rejected Promise that already has a value.")
580
+ (self)._lock.release()
581
+ return
582
+ end
583
+ (self)._hasResult = true
584
+ (self)._failureResult = err
585
+ (self)._lock.release()
586
+ self._maybeRunCallbacks()
587
+
588
+ nil
589
+ end
590
+
591
+ ##
592
+ # Add callback that will be called on non-Error values.
593
+ # Its result will become the value of the returned Promise.
594
+
595
+ def andThen(callable)
596
+
597
+ return self.andEither(callable, ::Quark.mdk_runtime.promise._Passthrough.new())
598
+
599
+ nil
600
+ end
601
+
602
+ ##
603
+ # Add callback that will be called on Error values.
604
+ # Its result will become the value of the returned Promise.
605
+
606
+ def andCatch(errorClass, callable)
607
+
608
+ return self.andEither(::Quark.mdk_runtime.promise._Passthrough.new(), ::Quark.mdk_runtime.promise._CallIfIsInstance.new(callable, errorClass))
609
+
610
+ nil
611
+ end
612
+
613
+ ##
614
+ # Callback that will be called for both success and error results.
615
+
616
+ def andFinally(callable)
617
+
618
+ return self.andEither(callable, callable)
619
+
620
+ nil
621
+ end
622
+
623
+ ##
624
+ # Two callbacks, one for success and one for error results.
625
+
626
+ def andEither(success, failure)
627
+
628
+ result = ::Quark.mdk_runtime.promise.Promise.new((self)._dispatcher)
629
+ (self)._lock.acquire()
630
+ ((self)._successCallbacks) << (::Quark.mdk_runtime.promise._Callback.new(success, result))
631
+ ((self)._failureCallbacks) << (::Quark.mdk_runtime.promise._Callback.new(failure, result))
632
+ (self)._lock.release()
633
+ self._maybeRunCallbacks()
634
+ return result
635
+
636
+ nil
637
+ end
638
+
639
+ ##
640
+ # Synchronous extraction of the promise's current value, if it has any.
641
+ # Its result will become the value of the returned Promise.
642
+
643
+ def value()
644
+
645
+ (self)._lock.acquire()
646
+ result = ::Quark.mdk_runtime.promise.PromiseValue.new((self)._successResult, (self)._failureResult, (self)._hasResult)
647
+ (self)._lock.release()
648
+ return result
649
+
650
+ nil
651
+ end
652
+
653
+ def _getClass()
654
+
655
+ return "mdk_runtime.promise.Promise"
656
+
657
+ nil
658
+ end
659
+
660
+ def _getField(name)
661
+
662
+ if ((name) == ("_lock"))
663
+ return (self)._lock
664
+ end
665
+ if ((name) == ("_successResult"))
666
+ return (self)._successResult
667
+ end
668
+ if ((name) == ("_failureResult"))
669
+ return (self)._failureResult
670
+ end
671
+ if ((name) == ("_hasResult"))
672
+ return (self)._hasResult
673
+ end
674
+ if ((name) == ("_successCallbacks"))
675
+ return (self)._successCallbacks
676
+ end
677
+ if ((name) == ("_failureCallbacks"))
678
+ return (self)._failureCallbacks
679
+ end
680
+ if ((name) == ("_dispatcher"))
681
+ return (self)._dispatcher
682
+ end
683
+ return nil
684
+
685
+ nil
686
+ end
687
+
688
+ def _setField(name, value)
689
+
690
+ if ((name) == ("_lock"))
691
+ (self)._lock = ::DatawireQuarkCore.cast(value) { ::DatawireQuarkCore::Lock }
692
+ end
693
+ if ((name) == ("_successResult"))
694
+ (self)._successResult = value
695
+ end
696
+ if ((name) == ("_failureResult"))
697
+ (self)._failureResult = ::DatawireQuarkCore.cast(value) { ::Quark.quark.error.Error }
698
+ end
699
+ if ((name) == ("_hasResult"))
700
+ (self)._hasResult = ::DatawireQuarkCore.cast(value) { ::Object }
701
+ end
702
+ if ((name) == ("_successCallbacks"))
703
+ (self)._successCallbacks = ::DatawireQuarkCore.cast(value) { ::DatawireQuarkCore::List }
704
+ end
705
+ if ((name) == ("_failureCallbacks"))
706
+ (self)._failureCallbacks = ::DatawireQuarkCore.cast(value) { ::DatawireQuarkCore::List }
707
+ end
708
+ if ((name) == ("_dispatcher"))
709
+ (self)._dispatcher = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.MessageDispatcher }
710
+ end
711
+
712
+ nil
713
+ end
714
+
715
+ def __init_fields__()
716
+
717
+ self._lock = nil
718
+ self._successResult = nil
719
+ self._failureResult = nil
720
+ self._hasResult = nil
721
+ self._successCallbacks = nil
722
+ self._failureCallbacks = nil
723
+ self._dispatcher = nil
724
+
725
+ nil
726
+ end
727
+
728
+
729
+ end
730
+ Promise.unlazy_statics
731
+
732
+ def self.PromiseResolver; PromiseResolver; end
733
+ ##
734
+ # Create Promises and input their initial value.
735
+ #
736
+
737
+ class PromiseResolver < ::DatawireQuarkCore::QuarkObject
738
+ attr_accessor :promise
739
+ extend ::DatawireQuarkCore::Static
740
+
741
+ static mdk_runtime_promise_PromiseResolver_ref: -> { nil }
742
+
743
+
744
+
745
+ def initialize(dispatcher)
746
+
747
+ self.__init_fields__
748
+ (self).promise = ::Quark.mdk_runtime.promise.Promise.new(dispatcher)
749
+
750
+ nil
751
+ end
752
+
753
+
754
+
755
+
756
+ ##
757
+ # Set the attached Promise's initial value.
758
+
759
+ def resolve(result)
760
+
761
+ (self).promise._resolve(result)
762
+
763
+ nil
764
+ end
765
+
766
+ ##
767
+ # Set the attached Promise's initial value to an Error.
768
+
769
+ def reject(err)
770
+
771
+ (self).promise._reject(err)
772
+
773
+ nil
774
+ end
775
+
776
+ def _getClass()
777
+
778
+ return "mdk_runtime.promise.PromiseResolver"
779
+
780
+ nil
781
+ end
782
+
783
+ def _getField(name)
784
+
785
+ if ((name) == ("promise"))
786
+ return (self).promise
787
+ end
788
+ return nil
789
+
790
+ nil
791
+ end
792
+
793
+ def _setField(name, value)
794
+
795
+ if ((name) == ("promise"))
796
+ (self).promise = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.promise.Promise }
797
+ end
798
+
799
+ nil
800
+ end
801
+
802
+ def __init_fields__()
803
+
804
+ self.promise = nil
805
+
806
+ nil
807
+ end
808
+
809
+
810
+ end
811
+ PromiseResolver.unlazy_statics
812
+ end # module Promise
813
+ end # module MdkRuntime
814
+ end # module Quark