flok 0.0.36 → 0.0.38

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.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -0
  3. data/app/drivers/chrome/build_context.rb +1 -1
  4. data/app/drivers/chrome/config.yml +10 -0
  5. data/app/drivers/chrome/pipe.rb +24 -1
  6. data/app/drivers/chrome/src/persist.js +29 -0
  7. data/app/drivers/chrome/src/sockio.js +3 -1
  8. data/app/drivers/chrome/src/vendor/store2.js +3 -0
  9. data/app/kern/callout.js +55 -0
  10. data/app/kern/controller.js +3 -0
  11. data/app/kern/crc32.js +22 -0
  12. data/app/kern/dispatch.js +16 -0
  13. data/app/kern/mod/event.js +3 -0
  14. data/app/kern/mod/persist.js +1 -0
  15. data/app/kern/mod/timer.js +5 -0
  16. data/app/kern/pagers/mem_pager.js +2 -0
  17. data/app/kern/pagers/sockio_pager.js +66 -0
  18. data/app/kern/pagers/spec0.js +35 -0
  19. data/app/kern/pagers/spec1.js +24 -0
  20. data/app/kern/pagers/spec2.js +31 -0
  21. data/app/kern/services/test.rb +7 -0
  22. data/app/kern/services/vm.rb +141 -0
  23. data/app/kern/spec_helper.js +5 -0
  24. data/bin/flok +27 -5
  25. data/docs/callout.md +8 -0
  26. data/docs/client_api.md +1 -1
  27. data/docs/compilation.md +14 -8
  28. data/docs/controllers.md +2 -1
  29. data/docs/datatypes.md +3 -1
  30. data/docs/environmentals.md +6 -0
  31. data/docs/interactive.md +6 -1
  32. data/docs/kernel_api.md +3 -0
  33. data/docs/mod/event.md +5 -1
  34. data/docs/mod/persist.md +14 -31
  35. data/docs/mod/timer.md +4 -2
  36. data/docs/project.md +16 -5
  37. data/docs/scheduling.md +1 -0
  38. data/docs/services.md +141 -56
  39. data/docs/services/vm.md +128 -0
  40. data/docs/services/vm/pagers.md +46 -0
  41. data/lib/flok/build.rb +11 -16
  42. data/lib/flok/platform.rb +29 -6
  43. data/lib/flok/project_template/app/scripts/script.js +3 -0
  44. data/lib/flok/project_template/app/services/service.rb +1 -0
  45. data/lib/flok/project_template/config/config.yml +1 -0
  46. data/lib/flok/project_template/config/platforms/chrome/config.yml +1 -0
  47. data/lib/flok/project_template/config/services.rb +1 -0
  48. data/lib/flok/service_compiler_templates/services.js.erb +78 -9
  49. data/lib/flok/services_compiler.rb +117 -20
  50. data/lib/flok/user_compiler.rb +14 -6
  51. data/lib/flok/user_compiler_templates/ctable.js.erb +10 -0
  52. data/lib/flok/version.rb +1 -1
  53. data/spec/env/etc.rb +1 -1
  54. data/spec/env/global.rb +2 -0
  55. data/spec/env/iface.rb +20 -4
  56. data/spec/env/kern.rb +8 -3
  57. data/spec/etc/cli_spec.rb +319 -165
  58. data/spec/etc/lib/assets/config.yml +3 -0
  59. data/spec/etc/lib/platform_spec.rb +14 -10
  60. data/spec/etc/lib/project_spec.rb +22 -0
  61. data/spec/etc/service_compiler/config0.rb +1 -0
  62. data/spec/etc/service_compiler/config1.rb +1 -0
  63. data/spec/etc/service_compiler/config2.rb +3 -0
  64. data/spec/etc/service_compiler/service0.rb +22 -6
  65. data/spec/etc/service_compiler/service1.rb +26 -0
  66. data/spec/etc/service_compiler/service_bad_type.rb +20 -0
  67. data/spec/etc/services_compiler_spec.rb +35 -16
  68. data/spec/etc/user_compiler/data.js +2 -0
  69. data/spec/etc/user_compiler_spec.rb +7 -1
  70. data/spec/iface/driver/persist_spec.rb +106 -0
  71. data/spec/iface/driver/pipe_spec.rb +5 -0
  72. data/spec/iface/kern/ping_spec.rb +4 -3
  73. data/spec/kern/assets/blank.rb +0 -0
  74. data/spec/kern/assets/service0.rb +24 -0
  75. data/spec/kern/assets/service1.rb +22 -0
  76. data/spec/kern/assets/service2.rb +27 -0
  77. data/spec/kern/assets/service_config0.rb +2 -0
  78. data/spec/kern/assets/service_config1.rb +2 -0
  79. data/spec/kern/assets/service_controller0.rb +13 -0
  80. data/spec/kern/assets/service_controller1.rb +32 -0
  81. data/spec/kern/assets/service_controller2.rb +38 -0
  82. data/spec/kern/assets/service_controller3.rb +38 -0
  83. data/spec/kern/assets/vm/config0.rb +2 -0
  84. data/spec/kern/assets/vm/config1.rb +12 -0
  85. data/spec/kern/assets/vm/config2.rb +12 -0
  86. data/spec/kern/assets/vm/config3.rb +12 -0
  87. data/spec/kern/assets/vm/controller0.rb +8 -0
  88. data/spec/kern/assets/vm/controller1.rb +18 -0
  89. data/spec/kern/assets/vm/controller2.rb +18 -0
  90. data/spec/kern/assets/vm/controller3.rb +20 -0
  91. data/spec/kern/assets/vm/controller4.rb +22 -0
  92. data/spec/kern/assets/vm/controller5.rb +22 -0
  93. data/spec/kern/assets/vm/controller6.rb +21 -0
  94. data/spec/kern/assets/vm/service0.rb +24 -0
  95. data/spec/kern/assets/vm/service_controller0.rb +7 -0
  96. data/spec/kern/callout_spec.rb +153 -0
  97. data/spec/kern/functions_spec.rb +29 -0
  98. data/spec/kern/service_controller_spec.rb +213 -0
  99. data/spec/kern/vm_service_spec.rb +195 -0
  100. metadata +98 -12
  101. data/app/kern/services/rest.rb +0 -310
  102. data/app/kern/services/timer.rb +0 -30
  103. data/docs/services/timer.md +0 -21
  104. data/spec/kern/assets/rest_service.rb +0 -20
  105. data/spec/kern/assets/timer_service.rb +0 -19
  106. data/spec/kern/timer_service_spec.rb +0 -40
@@ -1,310 +0,0 @@
1
- service("rest") do
2
- on_init %{
3
- //Code inserted here is put into the global space, add initialization
4
- //procedures, functions that need to be called, etc.
5
- //
6
- //You may use the function respond(info) within here to
7
-
8
- //Store the in-progress requests as a list of hashes
9
- //that contain an array in the order of [event_pointer, evenct_name]
10
- var service_rest_tp_to_einfo = {}
11
-
12
- function service_rest_callback(tp, success, info) {
13
- ////Lookup event info
14
- var einfo = service_rest_tp_to_einfo[tp];
15
-
16
- ////Send info back to service
17
- int_event(einfo[0], einfo[1], {success: success, info: info});
18
-
19
- //Remove entries in telepointer table and rest service info
20
- tel_del(tp);
21
- delete service_rest_tp_to_einfo[tp];
22
- }
23
-
24
- /*
25
- * Secure Hash Algorithm (SHA512)
26
- * http://www.happycode.info/
27
- */
28
-
29
- function SHA512(str) {
30
- function int64(msint_32, lsint_32) {
31
- this.highOrder = msint_32;
32
- this.lowOrder = lsint_32;
33
- }
34
-
35
- var H = [new int64(0x6a09e667, 0xf3bcc908), new int64(0xbb67ae85, 0x84caa73b),
36
- new int64(0x3c6ef372, 0xfe94f82b), new int64(0xa54ff53a, 0x5f1d36f1),
37
- new int64(0x510e527f, 0xade682d1), new int64(0x9b05688c, 0x2b3e6c1f),
38
- new int64(0x1f83d9ab, 0xfb41bd6b), new int64(0x5be0cd19, 0x137e2179)];
39
-
40
- var K = [new int64(0x428a2f98, 0xd728ae22), new int64(0x71374491, 0x23ef65cd),
41
- new int64(0xb5c0fbcf, 0xec4d3b2f), new int64(0xe9b5dba5, 0x8189dbbc),
42
- new int64(0x3956c25b, 0xf348b538), new int64(0x59f111f1, 0xb605d019),
43
- new int64(0x923f82a4, 0xaf194f9b), new int64(0xab1c5ed5, 0xda6d8118),
44
- new int64(0xd807aa98, 0xa3030242), new int64(0x12835b01, 0x45706fbe),
45
- new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, 0xd5ffb4e2),
46
- new int64(0x72be5d74, 0xf27b896f), new int64(0x80deb1fe, 0x3b1696b1),
47
- new int64(0x9bdc06a7, 0x25c71235), new int64(0xc19bf174, 0xcf692694),
48
- new int64(0xe49b69c1, 0x9ef14ad2), new int64(0xefbe4786, 0x384f25e3),
49
- new int64(0x0fc19dc6, 0x8b8cd5b5), new int64(0x240ca1cc, 0x77ac9c65),
50
- new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483),
51
- new int64(0x5cb0a9dc, 0xbd41fbd4), new int64(0x76f988da, 0x831153b5),
52
- new int64(0x983e5152, 0xee66dfab), new int64(0xa831c66d, 0x2db43210),
53
- new int64(0xb00327c8, 0x98fb213f), new int64(0xbf597fc7, 0xbeef0ee4),
54
- new int64(0xc6e00bf3, 0x3da88fc2), new int64(0xd5a79147, 0x930aa725),
55
- new int64(0x06ca6351, 0xe003826f), new int64(0x14292967, 0x0a0e6e70),
56
- new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926),
57
- new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, 0x9d95b3df),
58
- new int64(0x650a7354, 0x8baf63de), new int64(0x766a0abb, 0x3c77b2a8),
59
- new int64(0x81c2c92e, 0x47edaee6), new int64(0x92722c85, 0x1482353b),
60
- new int64(0xa2bfe8a1, 0x4cf10364), new int64(0xa81a664b, 0xbc423001),
61
- new int64(0xc24b8b70, 0xd0f89791), new int64(0xc76c51a3, 0x0654be30),
62
- new int64(0xd192e819, 0xd6ef5218), new int64(0xd6990624, 0x5565a910),
63
- new int64(0xf40e3585, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8),
64
- new int64(0x19a4c116, 0xb8d2d0c8), new int64(0x1e376c08, 0x5141ab53),
65
- new int64(0x2748774c, 0xdf8eeb99), new int64(0x34b0bcb5, 0xe19b48a8),
66
- new int64(0x391c0cb3, 0xc5c95a63), new int64(0x4ed8aa4a, 0xe3418acb),
67
- new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, 0xd6b2b8a3),
68
- new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60),
69
- new int64(0x84c87814, 0xa1f0ab72), new int64(0x8cc70208, 0x1a6439ec),
70
- new int64(0x90befffa, 0x23631e28), new int64(0xa4506ceb, 0xde82bde9),
71
- new int64(0xbef9a3f7, 0xb2c67915), new int64(0xc67178f2, 0xe372532b),
72
- new int64(0xca273ece, 0xea26619c), new int64(0xd186b8c7, 0x21c0c207),
73
- new int64(0xeada7dd6, 0xcde0eb1e), new int64(0xf57d4f7f, 0xee6ed178),
74
- new int64(0x06f067aa, 0x72176fba), new int64(0x0a637dc5, 0xa2c898a6),
75
- new int64(0x113f9804, 0xbef90dae), new int64(0x1b710b35, 0x131c471b),
76
- new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493),
77
- new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, 0x9c100d4c),
78
- new int64(0x4cc5d4be, 0xcb3e42b6), new int64(0x597f299c, 0xfc657e2a),
79
- new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817)];
80
-
81
- var W = new Array(64);
82
- var a, b, c, d, e, f, g, h, i, j;
83
- var T1, T2;
84
- var charsize = 8;
85
-
86
- function utf8_encode(str) {
87
- return unescape(encodeURIComponent(str));
88
- }
89
-
90
- function str2binb(str) {
91
- var bin = [];
92
- var mask = (1 << charsize) - 1;
93
- var len = str.length * charsize;
94
-
95
- for (var i = 0; i < len; i += charsize) {
96
- bin[i >> 5] |= (str.charCodeAt(i / charsize) & mask) << (32 - charsize - (i % 32));
97
- }
98
-
99
- return bin;
100
- }
101
-
102
- function binb2hex(binarray) {
103
- var hex_tab = "0123456789abcdef";
104
- var str = "";
105
- var length = binarray.length * 4;
106
- var srcByte;
107
-
108
- for (var i = 0; i < length; i += 1) {
109
- srcByte = binarray[i >> 2] >> ((3 - (i % 4)) * 8);
110
- str += hex_tab.charAt((srcByte >> 4) & 0xF) + hex_tab.charAt(srcByte & 0xF);
111
- }
112
-
113
- return str;
114
- }
115
-
116
- function safe_add_2(x, y) {
117
- var lsw, msw, lowOrder, highOrder;
118
-
119
- lsw = (x.lowOrder & 0xFFFF) + (y.lowOrder & 0xFFFF);
120
- msw = (x.lowOrder >>> 16) + (y.lowOrder >>> 16) + (lsw >>> 16);
121
- lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
122
-
123
- lsw = (x.highOrder & 0xFFFF) + (y.highOrder & 0xFFFF) + (msw >>> 16);
124
- msw = (x.highOrder >>> 16) + (y.highOrder >>> 16) + (lsw >>> 16);
125
- highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
126
-
127
- return new int64(highOrder, lowOrder);
128
- }
129
-
130
- function safe_add_4(a, b, c, d) {
131
- var lsw, msw, lowOrder, highOrder;
132
-
133
- lsw = (a.lowOrder & 0xFFFF) + (b.lowOrder & 0xFFFF) + (c.lowOrder & 0xFFFF) + (d.lowOrder & 0xFFFF);
134
- msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (lsw >>> 16);
135
- lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
136
-
137
- lsw = (a.highOrder & 0xFFFF) + (b.highOrder & 0xFFFF) + (c.highOrder & 0xFFFF) + (d.highOrder & 0xFFFF) + (msw >>> 16);
138
- msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (lsw >>> 16);
139
- highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
140
-
141
- return new int64(highOrder, lowOrder);
142
- }
143
-
144
- function safe_add_5(a, b, c, d, e) {
145
- var lsw, msw, lowOrder, highOrder;
146
-
147
- lsw = (a.lowOrder & 0xFFFF) + (b.lowOrder & 0xFFFF) + (c.lowOrder & 0xFFFF) + (d.lowOrder & 0xFFFF) + (e.lowOrder & 0xFFFF);
148
- msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (e.lowOrder >>> 16) + (lsw >>> 16);
149
- lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
150
-
151
- lsw = (a.highOrder & 0xFFFF) + (b.highOrder & 0xFFFF) + (c.highOrder & 0xFFFF) + (d.highOrder & 0xFFFF) + (e.highOrder & 0xFFFF) + (msw >>> 16);
152
- msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (e.highOrder >>> 16) + (lsw >>> 16);
153
- highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
154
-
155
- return new int64(highOrder, lowOrder);
156
- }
157
-
158
- function maj(x, y, z) {
159
- return new int64(
160
- (x.highOrder & y.highOrder) ^ (x.highOrder & z.highOrder) ^ (y.highOrder & z.highOrder),
161
- (x.lowOrder & y.lowOrder) ^ (x.lowOrder & z.lowOrder) ^ (y.lowOrder & z.lowOrder)
162
- );
163
- }
164
-
165
- function ch(x, y, z) {
166
- return new int64(
167
- (x.highOrder & y.highOrder) ^ (~x.highOrder & z.highOrder),
168
- (x.lowOrder & y.lowOrder) ^ (~x.lowOrder & z.lowOrder)
169
- );
170
- }
171
-
172
- function rotr(x, n) {
173
- if (n <= 32) {
174
- return new int64(
175
- (x.highOrder >>> n) | (x.lowOrder << (32 - n)),
176
- (x.lowOrder >>> n) | (x.highOrder << (32 - n))
177
- );
178
- } else {
179
- return new int64(
180
- (x.lowOrder >>> n) | (x.highOrder << (32 - n)),
181
- (x.highOrder >>> n) | (x.lowOrder << (32 - n))
182
- );
183
- }
184
- }
185
-
186
- function sigma0(x) {
187
- var rotr28 = rotr(x, 28);
188
- var rotr34 = rotr(x, 34);
189
- var rotr39 = rotr(x, 39);
190
-
191
- return new int64(
192
- rotr28.highOrder ^ rotr34.highOrder ^ rotr39.highOrder,
193
- rotr28.lowOrder ^ rotr34.lowOrder ^ rotr39.lowOrder
194
- );
195
- }
196
-
197
- function sigma1(x) {
198
- var rotr14 = rotr(x, 14);
199
- var rotr18 = rotr(x, 18);
200
- var rotr41 = rotr(x, 41);
201
-
202
- return new int64(
203
- rotr14.highOrder ^ rotr18.highOrder ^ rotr41.highOrder,
204
- rotr14.lowOrder ^ rotr18.lowOrder ^ rotr41.lowOrder
205
- );
206
- }
207
-
208
- function gamma0(x) {
209
- var rotr1 = rotr(x, 1), rotr8 = rotr(x, 8), shr7 = shr(x, 7);
210
-
211
- return new int64(
212
- rotr1.highOrder ^ rotr8.highOrder ^ shr7.highOrder,
213
- rotr1.lowOrder ^ rotr8.lowOrder ^ shr7.lowOrder
214
- );
215
- }
216
-
217
- function gamma1(x) {
218
- var rotr19 = rotr(x, 19);
219
- var rotr61 = rotr(x, 61);
220
- var shr6 = shr(x, 6);
221
-
222
- return new int64(
223
- rotr19.highOrder ^ rotr61.highOrder ^ shr6.highOrder,
224
- rotr19.lowOrder ^ rotr61.lowOrder ^ shr6.lowOrder
225
- );
226
- }
227
-
228
- function shr(x, n) {
229
- if (n <= 32) {
230
- return new int64(
231
- x.highOrder >>> n,
232
- x.lowOrder >>> n | (x.highOrder << (32 - n))
233
- );
234
- } else {
235
- return new int64(
236
- 0,
237
- x.highOrder << (32 - n)
238
- );
239
- }
240
- }
241
-
242
- str = utf8_encode(str);
243
- strlen = str.length*charsize;
244
- str = str2binb(str);
245
-
246
- str[strlen >> 5] |= 0x80 << (24 - strlen % 32);
247
- str[(((strlen + 128) >> 10) << 5) + 31] = strlen;
248
-
249
- for (var i = 0; i < str.length; i += 32) {
250
- a = H[0];
251
- b = H[1];
252
- c = H[2];
253
- d = H[3];
254
- e = H[4];
255
- f = H[5];
256
- g = H[6];
257
- h = H[7];
258
-
259
- for (var j = 0; j < 80; j++) {
260
- if (j < 16) {
261
- W[j] = new int64(str[j*2 + i], str[j*2 + i + 1]);
262
- } else {
263
- W[j] = safe_add_4(gamma1(W[j - 2]), W[j - 7], gamma0(W[j - 15]), W[j - 16]);
264
- }
265
-
266
- T1 = safe_add_5(h, sigma1(e), ch(e, f, g), K[j], W[j]);
267
- T2 = safe_add_2(sigma0(a), maj(a, b, c));
268
- h = g;
269
- g = f;
270
- f = e;
271
- e = safe_add_2(d, T1);
272
- d = c;
273
- c = b;
274
- b = a;
275
- a = safe_add_2(T1, T2);
276
- }
277
-
278
- H[0] = safe_add_2(a, H[0]);
279
- H[1] = safe_add_2(b, H[1]);
280
- H[2] = safe_add_2(c, H[2]);
281
- H[3] = safe_add_2(d, H[3]);
282
- H[4] = safe_add_2(e, H[4]);
283
- H[5] = safe_add_2(f, H[5]);
284
- H[6] = safe_add_2(g, H[6]);
285
- H[7] = safe_add_2(h, H[7]);
286
- }
287
-
288
- var binarray = [];
289
- for (var i = 0; i < H.length; i++) {
290
- binarray.push(H[i].highOrder);
291
- binarray.push(H[i].lowOrder);
292
- }
293
- return binb2hex(binarray);
294
- }
295
- }
296
-
297
- on_request %{
298
- //Code that handles a payload goes here.
299
- //You have access to `info`, `ep`, and `ename` which was given in the ServiceRequest macro
300
-
301
- //Create a GET request that will respond to the telepointer
302
- var tp = tel_reg(service_rest_callback);
303
-
304
- //Now register the event information to respond to when a callback is received
305
- service_rest_tp_to_einfo[tp] = [ep, ename]
306
-
307
- //Start the request
308
- SEND("net", "if_net_req", "GET", info.url, info.params, tp)
309
- }
310
- end
@@ -1,30 +0,0 @@
1
- service("timer") do
2
- on_init %{
3
- //Entries in the timer event table are stored as an array of arrays, each array
4
- //contains [N, bp, event_name]
5
-
6
- var timer_evt = [];
7
- //Call an event N times per second
8
- function reg_timer_ev(n, bp, ename) {
9
- timer_evt.push([n, bp, ename]);
10
- }
11
-
12
- //Timer position
13
- var ttick = 0;
14
- function int_timer() {
15
- ttick += 1;
16
-
17
- for (var i = 0; i < timer_evt.length; ++i) {
18
- if (ttick % timer_evt[i][0] == 0) {
19
- var bp = timer_evt[i][1];
20
- var ename = timer_evt[i][2];
21
- int_event(bp, ename, {});
22
- }
23
- }
24
- }
25
- }
26
-
27
- on_request %{
28
- timer_evt.push([info.ticks, ep, ename]);
29
- }
30
- end
@@ -1,21 +0,0 @@
1
- #Timer service
2
- This service manages the `int_timer` function (which is a little different than how most modules work). When an `int_timer` request
3
- comes in, the timer service dispatches it to an apprpriate controller event handler.
4
-
5
- Timer service mantains an `timer_evt` which contains an array of arrays for interval timers that will be called (recurring) periodically.
6
- The elements of `timer_evt` are an array with the following information: `[tps, base_pointer, event_name]`. When `int_timer` is called,
7
- it will send events to all entries in `timer_evt` which have a `ticks` that is a modulo of `ttick`; the global tick counter.
8
-
9
- ###Info to start a request
10
- ```js
11
- var info = {
12
- ticks: 4,
13
- }
14
- ```
15
- `ticks` the number of ticks to wait between fires.
16
-
17
- When you receive a request back, you will receive
18
- ```js
19
- {
20
- }
21
- ```
@@ -1,20 +0,0 @@
1
- controller :my_controller do
2
- spots "hello", "world"
3
-
4
- action :my_action do
5
- on_entry %{
6
- }
7
-
8
- on "start_request", %{
9
- var payload = {
10
- url: "http://test.services.fittr.com/ping",
11
- params: {},
12
- };
13
- Request("rest", payload, "request_response");
14
- }
15
-
16
- on "request_response", %{
17
- response = params;
18
- }
19
- end
20
- end
@@ -1,19 +0,0 @@
1
- controller :my_controller do
2
- spots "hello", "world"
3
-
4
- action :my_action do
5
- on_entry %{
6
- }
7
-
8
- on "start_request", %{
9
- var payload = {
10
- ticks: 4
11
- };
12
- Request("timer", payload, "tick");
13
- }
14
-
15
- on "tick", %{
16
- did_tick = true;
17
- }
18
- end
19
- end
@@ -1,40 +0,0 @@
1
- Dir.chdir File.join File.dirname(__FILE__), '../../'
2
- require './spec/env/kern.rb'
3
- require './spec/lib/helpers.rb'
4
- require './spec/lib/io_extensions.rb'
5
- require './spec/lib/rspec_extensions.rb'
6
-
7
- RSpec.describe "kern:timer_service_spec" do
8
- include_context "kern"
9
-
10
- #Can initialize a controller via embed and have the correct if_dispatch messages
11
- it "Can initiate a controller via _embed" do
12
- #Compile the controller
13
- ctx = flok_new_user File.read('./spec/kern/assets/timer_service.rb')
14
-
15
- #Run the embed function
16
- ctx.eval %{
17
- //Call embed on main root view
18
- base = _embed("my_controller", 0, {}, null);
19
-
20
- //Drain queue with a test event
21
- int_dispatch([3, "int_event", base, "start_request", {}]);
22
- }
23
-
24
- base = ctx.eval("base")
25
-
26
- @driver.mexpect("if_init_view", ["my_controller", {}, base+1, ["main", "hello", "world"]])
27
- @driver.mexpect("if_controller_init", [base, base+1, "my_controller", {}])
28
- @driver.mexpect("if_attach_view", [base+1, 0])
29
- @driver.mexpect("if_event", [base, "action", {"from" => nil, "to" => "my_action"}])
30
-
31
- #Emulate the if_timer driver
32
- @driver.int("int_timer")
33
- @driver.int("int_timer")
34
- @driver.int("int_timer")
35
- @driver.int("int_timer")
36
-
37
- response = ctx.eval("did_tick")
38
- expect(response).to eq(true)
39
- end
40
- end