flok 0.0.38 → 0.0.39

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/app/drivers/chrome/src/dispatch.js +41 -6
  3. data/app/drivers/chrome/src/persist.js +1 -10
  4. data/app/kern/dispatch.js +17 -23
  5. data/app/kern/gen_id.js +8 -0
  6. data/app/kern/macro.rb +20 -18
  7. data/app/kern/pagers/pg_spec0.js +20 -0
  8. data/app/kern/services/vm.rb +176 -30
  9. data/docs/client_api.md +3 -1
  10. data/docs/compilation.md +1 -1
  11. data/docs/dispatch.md +91 -0
  12. data/docs/kernel_api.md +3 -2
  13. data/docs/messaging.md +6 -1
  14. data/docs/mod/persist.md +4 -3
  15. data/docs/project_layout.md +2 -2
  16. data/docs/services/vm.md +116 -41
  17. data/docs/services/vm/pagers.md +38 -46
  18. data/lib/flok.rb +1 -0
  19. data/lib/flok/build.rb +3 -4
  20. data/lib/flok/macro.rb +27 -0
  21. data/lib/flok/services_compiler.rb +12 -8
  22. data/lib/flok/user_compiler.rb +131 -4
  23. data/lib/flok/version.rb +1 -1
  24. data/spec/env/kern.rb +71 -0
  25. data/spec/etc/macro_spec.rb +3 -8
  26. data/spec/etc/service_compiler/service3.rb +27 -0
  27. data/spec/etc/services_compiler_spec.rb +35 -27
  28. data/spec/iface/driver/dispatch_spec.rb +20 -0
  29. data/spec/iface/driver/persist_spec.rb +9 -24
  30. data/spec/iface/kern/ping_spec.rb +3 -24
  31. data/spec/kern/assets/vm/config4.rb +12 -0
  32. data/spec/kern/assets/vm/controller10.rb +26 -0
  33. data/spec/kern/assets/vm/controller11.rb +33 -0
  34. data/spec/kern/assets/vm/controller12.rb +45 -0
  35. data/spec/kern/assets/vm/controller13.rb +40 -0
  36. data/spec/kern/assets/vm/controller14.rb +14 -0
  37. data/spec/kern/assets/vm/controller15.rb +15 -0
  38. data/spec/kern/assets/vm/controller16.rb +29 -0
  39. data/spec/kern/assets/vm/controller17.rb +30 -0
  40. data/spec/kern/assets/vm/controller18.rb +28 -0
  41. data/spec/kern/assets/vm/controller19.rb +14 -0
  42. data/spec/kern/assets/vm/controller19b.rb +15 -0
  43. data/spec/kern/assets/vm/controller20.rb +19 -0
  44. data/spec/kern/assets/vm/controller21.rb +40 -0
  45. data/spec/kern/assets/vm/controller7.rb +18 -0
  46. data/spec/kern/assets/vm/controller8.rb +38 -0
  47. data/spec/kern/assets/vm/controller8b.rb +18 -0
  48. data/spec/kern/assets/vm/controller9.rb +20 -0
  49. data/spec/kern/assets/vm/controller_exc_2watch.rb +15 -0
  50. data/spec/kern/assets/vm/controller_exc_ewatch.rb +14 -0
  51. data/spec/kern/assets/vm/macros/copy_page_c.rb +23 -0
  52. data/spec/kern/assets/vm/macros/entry_del_c.rb +18 -0
  53. data/spec/kern/assets/vm/macros/entry_insert_c.rb +21 -0
  54. data/spec/kern/assets/vm/macros/entry_mutable_c.rb +33 -0
  55. data/spec/kern/assets/vm/macros/new_page_c.rb +7 -0
  56. data/spec/kern/assets/vm/macros/new_page_c2.rb +7 -0
  57. data/spec/kern/assets/vm/macros/set_page_head_c.rb +18 -0
  58. data/spec/kern/assets/vm/macros/set_page_next_c.rb +18 -0
  59. data/spec/kern/controller_macro_spec.rb +186 -0
  60. data/spec/kern/dispatch_spec.rb +125 -0
  61. data/spec/kern/functions_spec.rb +15 -0
  62. data/spec/kern/vm_service_spec.rb +874 -173
  63. metadata +70 -5
  64. data/docs/scheduling.md +0 -46
  65. data/spec/kern/rest_service_spec.rb +0 -45
@@ -0,0 +1,30 @@
1
+ controller :my_controller do
2
+ spots "content"
3
+ services :vm
4
+
5
+ action :a do
6
+
7
+ on_entry %{
8
+ Embed("a", "content", {});
9
+ }
10
+
11
+ on "next", %{
12
+ Goto("b");
13
+ }
14
+ end
15
+
16
+ action :b do
17
+ on_entry %{
18
+ }
19
+ end
20
+ end
21
+
22
+ controller :a do
23
+ services :vm
24
+ action :index do
25
+ on_entry %{
26
+ var info = {ns: "spec", id: "test"}
27
+ Request("vm", "watch", info);
28
+ }
29
+ end
30
+ end
@@ -0,0 +1,28 @@
1
+ controller :my_controller do
2
+ services :vm
3
+
4
+ action :my_action do
5
+ on_entry %{
6
+ var entry = {
7
+ hello: "world"
8
+ }
9
+
10
+ page = NewPage("test");
11
+ SetPageHead(page, "head");
12
+ SetPageNext(page, "next");
13
+ EntryInsert(page, 0, entry);
14
+
15
+ var watch_info = {
16
+ ns: "spec",
17
+ id: "test"
18
+ }
19
+
20
+ var write_info = {
21
+ ns: "spec",
22
+ page: page
23
+ };
24
+
25
+ Request("vm", "write", write_info);
26
+ }
27
+ end
28
+ end
@@ -0,0 +1,14 @@
1
+ controller :my_controller do
2
+ services :vm
3
+
4
+ action :my_action do
5
+ on_entry %{
6
+ var watch_info = {
7
+ ns: "spec",
8
+ id: "test"
9
+ }
10
+
11
+ Request("vm", "watch", watch_info);
12
+ }
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ controller :my_controller do
2
+ services :vm
3
+
4
+ action :my_action do
5
+ on_entry %{
6
+ var watch_info = {
7
+ ns: "spec",
8
+ id: "test",
9
+ sync: true
10
+ }
11
+
12
+ Request("vm", "watch", watch_info);
13
+ }
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ controller :my_controller do
2
+ services :vm
3
+
4
+ action :my_action do
5
+ on_entry %{
6
+ var watch_info = {
7
+ ns: "spec",
8
+ id: "hello"
9
+ }
10
+
11
+ read_res = [];
12
+ Request("vm", "watch", watch_info);
13
+ }
14
+
15
+ on "read_res", %{
16
+ read_res.push(params);
17
+ }
18
+ end
19
+ end
@@ -0,0 +1,40 @@
1
+ controller :my_controller do
2
+ services :vm
3
+
4
+ action :my_action do
5
+ on_entry %{
6
+ var entry = {
7
+ hello: "world"
8
+ }
9
+
10
+ page = NewPage("test");
11
+
12
+ SetPageHead(page, "head");
13
+ SetPageNext(page, "next");
14
+ EntryInsert(page, 0, entry);
15
+
16
+
17
+ var watch_info = {
18
+ ns: "spec",
19
+ id: "test"
20
+ }
21
+
22
+ var write_info = {
23
+ ns: "spec",
24
+ page: page
25
+ };
26
+
27
+ Request("vm", "write", write_info);
28
+ }
29
+
30
+ on "next", %{
31
+ page2 = CopyPage(page);
32
+ SetPageHead(page2, "head2");
33
+ var write_info = {
34
+ ns: "spec",
35
+ page: page2
36
+ };
37
+ Request("vm", "write", write_info);
38
+ }
39
+ end
40
+ end
@@ -0,0 +1,18 @@
1
+ controller :my_controller do
2
+ services :vm
3
+
4
+ action :my_action do
5
+ on_entry %{
6
+ //Send a request
7
+ var info = {
8
+ ns: "spec",
9
+ id: "my_key"
10
+ };
11
+
12
+ Request("vm", "watch", info);
13
+ }
14
+
15
+ on "read_res", %{
16
+ }
17
+ end
18
+ end
@@ -0,0 +1,38 @@
1
+ controller :my_controller do
2
+ spots "content"
3
+ services :vm
4
+
5
+ action :my_action do
6
+ on_entry %{
7
+ page0 = {
8
+ ns: "spec",
9
+ id: "my_key"
10
+ };
11
+
12
+ Request("vm", "watch", page0);
13
+ }
14
+
15
+ on "read_res", %{
16
+ }
17
+ end
18
+ end
19
+
20
+ controller :my_controller_sync do
21
+ spots "content"
22
+ services :vm
23
+
24
+ action :my_action do
25
+ on_entry %{
26
+ page = {
27
+ ns: "spec",
28
+ id: "my_key",
29
+ sync: true
30
+ };
31
+
32
+ Request("vm", "watch", page);
33
+ }
34
+
35
+ on "read_res", %{
36
+ }
37
+ end
38
+ end
@@ -0,0 +1,18 @@
1
+ controller :my_controller do
2
+ spots "content"
3
+ services :vm
4
+
5
+ action :my_action do
6
+ on_entry %{
7
+ var info = {
8
+ ns: "spec",
9
+ id: "my_key"
10
+ };
11
+
12
+ Request("vm", "watch", info);
13
+ }
14
+
15
+ on "read_res", %{
16
+ }
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ controller :my_controller do
2
+ services :vm
3
+
4
+ action :my_action do
5
+ on_entry %{
6
+ //Send a request
7
+ var info = {
8
+ ns: "spec",
9
+ id: "my_key"
10
+ };
11
+
12
+ Request("vm", "watch", info);
13
+ Request("vm", "unwatch", info);
14
+ Request("vm", "watch", info);
15
+ }
16
+
17
+ on "read_res", %{
18
+ }
19
+ end
20
+ end
@@ -0,0 +1,15 @@
1
+ controller :my_controller do
2
+ services :vm
3
+
4
+ action :my_action do
5
+ on_entry %{
6
+ var watch_info = {
7
+ ns: "spec",
8
+ id: "test"
9
+ }
10
+
11
+ Request("vm", "watch", watch_info);
12
+ Request("vm", "watch", watch_info);
13
+ }
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ controller :my_controller do
2
+ services :vm
3
+
4
+ action :my_action do
5
+ on_entry %{
6
+ var watch_info = {
7
+ ns: "spec",
8
+ id: "test"
9
+ }
10
+
11
+ Request("vm", "unwatch", watch_info);
12
+ }
13
+ end
14
+ end
@@ -0,0 +1,23 @@
1
+ controller :controller do
2
+ action :index do
3
+ on_entry %{
4
+ original_page = {
5
+ _head: "head",
6
+ _next: "next",
7
+ _id: "id",
8
+ entries: [
9
+ {_id: "id", _sig: "sig"},
10
+ ],
11
+ _hash: "hash",
12
+ };
13
+
14
+ //One page done the right away, another, the wrong way
15
+ copied_page = CopyPage(original_page);
16
+ not_copied_page = original_page;
17
+
18
+ //The copied page is now modified and does
19
+ //not contain _hash
20
+ copied_page._next = "test"
21
+ }
22
+ end
23
+ end
@@ -0,0 +1,18 @@
1
+ controller :controller do
2
+ action :index do
3
+ on_entry %{
4
+ original_page = {
5
+ _head: "head",
6
+ _next: "next",
7
+ _id: "id",
8
+ entries: [
9
+ {_id: "id", _sig: "sig"},
10
+ ],
11
+ _hash: "hash",
12
+ };
13
+
14
+ page = CopyPage(original_page);
15
+ EntryDel(page, 0);
16
+ }
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ controller :controller do
2
+ action :index do
3
+ on_entry %{
4
+ original_page = {
5
+ _head: "head",
6
+ _next: "next",
7
+ _id: "id",
8
+ entries: [
9
+ {_id: "id", _sig: "sig"},
10
+ ],
11
+ _hash: "hash",
12
+ };
13
+
14
+ page = CopyPage(original_page);
15
+ var entry0 = {hello: "world"}
16
+ var entry2 = {hello: "world2"}
17
+ EntryInsert(page, 0, entry0);
18
+ EntryInsert(page, 2, entry2);
19
+ }
20
+ end
21
+ end
@@ -0,0 +1,33 @@
1
+ controller :controller do
2
+ action :index do
3
+ on_entry %{
4
+ original_page = {
5
+ _head: "head",
6
+ _next: "next",
7
+ _id: "id",
8
+ entries: [
9
+ {_id: "id", _sig: "sig"},
10
+ {_id: "id2", _sig: "sig2"},
11
+ {_id: "id3", _sig: "sig3"},
12
+ ],
13
+ _hash: "hash",
14
+ };
15
+
16
+ page = CopyPage(original_page);
17
+ EntryMutable(page, 0);
18
+ EntryMutable(page, 2);
19
+
20
+ page.entries[0].hello = "world";
21
+ page.entries[2].hello = "world";
22
+
23
+ //This is a violation of the vm, it will set the original but not copied
24
+ //This is because the page.entries[1] actually refers to the original_page.entries[1]
25
+ //the array of original_page.entries belongs to original_page, but the entries inside it
26
+ //are references. When you call entrymutable, you are making a copy and replacing that
27
+ //entry in the array so that page.entries[0] is actually owned by page and is no longer apart
28
+ //of original_page
29
+ page.entries[1].foo = "bar";
30
+ }
31
+ end
32
+ end
33
+
@@ -0,0 +1,7 @@
1
+ controller :controller do
2
+ action :index do
3
+ on_entry %{
4
+ page = NewPage();
5
+ }
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ controller :controller do
2
+ action :index do
3
+ on_entry %{
4
+ page = NewPage("test");
5
+ }
6
+ end
7
+ end
@@ -0,0 +1,18 @@
1
+ controller :controller do
2
+ action :index do
3
+ on_entry %{
4
+ original_page = {
5
+ _head: "head",
6
+ _next: "next",
7
+ _id: "id",
8
+ entries: [
9
+ {_id: "id", _sig: "sig"},
10
+ ],
11
+ _hash: "hash",
12
+ };
13
+
14
+ page = CopyPage(original_page);
15
+ SetPageHead(page, "test");
16
+ }
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ controller :controller do
2
+ action :index do
3
+ on_entry %{
4
+ original_page = {
5
+ _head: "head",
6
+ _next: "next",
7
+ _id: "id",
8
+ entries: [
9
+ {_id: "id", _sig: "sig"},
10
+ ],
11
+ _hash: "hash",
12
+ };
13
+
14
+ page = CopyPage(original_page);
15
+ SetPageNext(page, "test");
16
+ }
17
+ end
18
+ end