datawire_mdk 2.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -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