flok 0.0.73 → 0.0.74

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6c9f17f929ac1f53925b9f3a7f1d8eb69db61d3f
4
- data.tar.gz: c156cf2897629e2d04a2a368eb3d0685ed3ceb29
3
+ metadata.gz: ca8fea6b0e7252ab3f9a892389bde94e80014ce4
4
+ data.tar.gz: 5e23aecfc89a9d7ebd4ad4f3615c0bd6bd7ac071
5
5
  SHA512:
6
- metadata.gz: 11bdbc991e2c88768af5b24e0c23471029f9f797ba139b3eabf84367d16fa9cc6c3ae185c2c3eaae870afca42244cd3a63687bb1a7acdc95ac31ab771cb96104
7
- data.tar.gz: 876fb2e35de2c656e9f53e9d503ee9f44d7ee4cfc091c848d4e4101be853b2afcef22b4c4a55ef7067ca542908b51d5e47ada3b29083bc3b1ac298cbac92f0de
6
+ metadata.gz: fb6efe7e84308d32c0672d618891c7b45b0b66b33b3bd2517833cbdae5853027696042204d5bef1a23da13c945d2821923b82d792e2059391ad9b94c623dd76b
7
+ data.tar.gz: 346bc274195f9a5b6b8d44b52961cefe133f51b0ef1b5dbaa322ac6a0b3d41dd8dd4269d214f54fac1012acafd699fbfb07a48fd81d5cb41e498cb4046acbbfd
@@ -0,0 +1,14 @@
1
+ <% if @debug %>
2
+ kern_log_stdout = [];
3
+ function kern_log(str) {
4
+ kern_log_stdout.push(str);
5
+ }
6
+
7
+ function kern_log_json(json) {
8
+ //We don't want to capture a reference
9
+ kern_log_stdout.push(
10
+ JSON.parse(JSON.stringify(json))
11
+ );
12
+ }
13
+
14
+ <% end %>
@@ -59,5 +59,14 @@
59
59
  }
60
60
 
61
61
  function pg_sockio<%= i %>_write(page) {
62
+ vm_transaction_begin();
63
+ //If page exists in cache, then commit changes into the page
64
+ var cached_page = vm_cache[pg_sockio<%= i %>_ns][page._id];
65
+ if (cached_page !== undefined) {
66
+ vm_commit(cached_page, page);
67
+ }
68
+
69
+ vm_cache_write(pg_sockio<%= i %>_ns, page);
70
+ vm_transaction_end();
62
71
  }
63
72
  <% end %>
@@ -1,10 +1,20 @@
1
1
  service :test do
2
2
  global %{
3
+ test_service_connected = {};
4
+
3
5
  function <%= @name %>_function(x) {
4
6
  <%= @name %>_function_args = x;
5
7
  }
6
8
  }
7
9
 
10
+ on_connect %{
11
+ test_service_connected[bp] = true;
12
+ }
13
+
14
+ on_disconnect %{
15
+ delete test_service_connected[bp];
16
+ }
17
+
8
18
  on "test_sync", %{
9
19
  int_event(bp, "test_sync_res", params);
10
20
  }
@@ -535,7 +535,8 @@ service :vm do
535
535
  on "write", %{
536
536
  <% raise "No pagers given in options for vm" unless @options[:pagers] %>
537
537
 
538
- //We are going to fix the _hash on the page
538
+ //We are going to fix the _hash on the page and __index
539
+ vm_reindex_page(params.page);
539
540
  vm_rehash_page(params.page);
540
541
 
541
542
  <% if @debug %>
data/docs/kernel_api.md CHANGED
@@ -1,5 +1,16 @@
1
1
  #Kernel API
2
2
 
3
+ ##Debugging (only enabled in DEBUG)
4
+ * kernel logging
5
+ All kernel logging goes to `kern_log_stdout`, an array of values.
6
+ array
7
+ * Based on `type` field:
8
+ * `string`
9
+ * `kern_log(str)` - Writes an entry to `kern_log_stdout` like `"string"`
10
+ * `json`
11
+ * `kern_log_json(json)` - Writes an entry to `kern_log_stdout` like `{"foo": "bar"}` which has been serialized and deserialized (to
12
+ prevent reference)
13
+
3
14
  ##Telepointer (Mapped I/O)
4
15
  * `tels(n)` - Returns one number that represents the base index of the telepointer. See [Messaging](Messaging.md) for details on telepointers.
5
16
  * `tel_reg(f)` - Returns a number that represents the base pointer of a function callback.
@@ -1,6 +1,9 @@
1
1
  #Test Service
2
2
  This is the test service. Used for various specs
3
3
 
4
+ #Useful variables
5
+ * `test_service_connected` - A hash containing all the base pointers of *connected* controllers `{bp => true, ...}`.
6
+
4
7
  #Requests
5
8
  * `test_sync` - Will send you a synchronous response via the event `test_sync_res` that contains
6
9
  the same parameters that you sent
data/flok.gemspec CHANGED
@@ -33,6 +33,7 @@ Gem::Specification.new do |spec|
33
33
  spec.add_runtime_dependency "thor", "~> 0.19"
34
34
  spec.add_runtime_dependency "rake", "~> 10.3"
35
35
  spec.add_runtime_dependency 'naturalsort', "~> 1.0"
36
+ spec.add_runtime_dependency 'awesome_print', "~> 1.6"
36
37
  spec.add_development_dependency "therubyracer", "~> 0.12"
37
38
  spec.executables << 'flok'
38
39
  end
@@ -28,9 +28,19 @@ ctable = {
28
28
  var __info__ = tel_deref(__base__);
29
29
 
30
30
  //Recursively call dealloc
31
- for (var i = 0; i < __info__.embeds.length; ++i) {
32
- for (var x = 0; x < __info__.embeds[i].length; ++x) {
33
- tel_deref(__info__.embeds[i][x]).cte.__dealloc__(__info__.embeds[i][x]);
31
+ var embeds = __info__.embeds;
32
+ while (true) {
33
+ for (var i = 0; i < embeds.length; ++i) {
34
+ for (var x = 0; x < embeds[i].length; ++x) {
35
+ tel_deref(embeds[i][x]).cte.__dealloc__(embeds[i][x]);
36
+ }
37
+ }
38
+
39
+ if (__info__.stack.length > 0) {
40
+ var slice = __info__.stack.pop();
41
+ embeds = slice.embeds;
42
+ } else {
43
+ break;
34
44
  }
35
45
  }
36
46
 
data/lib/flok/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Flok
2
- VERSION = "0.0.73"
2
+ VERSION = "0.0.74"
3
3
  end
data/spec/env/kern.rb CHANGED
@@ -1,6 +1,7 @@
1
- require './spec/env/global.rb'
2
1
  require 'therubyracer'
2
+ require 'awesome_print'
3
3
  require './spec/lib/temp_dir'
4
+ require './spec/env/global.rb'
4
5
 
5
6
  shared_context "kern" do
6
7
  before(:each) do
@@ -36,6 +37,14 @@ shared_context "kern" do
36
37
 
37
38
  return DumpHelper.new(_dump)
38
39
  end
40
+
41
+ def dump_log
42
+ out = self.dump "kern_log_stdout"
43
+ self.eval "kern_log_stdout = []"
44
+ out.each_with_index do |e, i|
45
+ ap e
46
+ end
47
+ end
39
48
  end
40
49
 
41
50
  class DumpHelper
@@ -0,0 +1,63 @@
1
+ controller :nav do
2
+ spots "content"
3
+
4
+ action :index do
5
+ on_entry %{
6
+ Embed("my_controller", "content", {});
7
+ }
8
+
9
+ on "next_nav", %{
10
+ Goto("other_action");
11
+ }
12
+ end
13
+
14
+ action :other_action do
15
+
16
+ end
17
+ end
18
+
19
+ controller :my_controller do
20
+ spots "content"
21
+
22
+ action :my_action do
23
+ on_entry %{
24
+ my_controller_bp = __base__;
25
+ Embed("other", "content", {});
26
+ }
27
+
28
+ on "next", %{
29
+ Push("my_other_action")
30
+ }
31
+ end
32
+
33
+ action :my_other_action do
34
+ on_entry %{
35
+ Embed("other2", "content", {});
36
+ }
37
+
38
+ on "back", %{
39
+ Pop();
40
+ }
41
+ end
42
+ end
43
+
44
+ controller :other do
45
+ services :test
46
+
47
+ action :index do
48
+ on_entry %{
49
+ other_bp = __base__;
50
+ }
51
+ end
52
+ end
53
+
54
+ controller :other2 do
55
+ services :test
56
+
57
+ action :index do
58
+ on_entry %{
59
+ other_bp2 = __base__;
60
+ }
61
+ end
62
+ end
63
+
@@ -0,0 +1,42 @@
1
+ controller :my_controller do
2
+ services :test
3
+ spots "content"
4
+
5
+ action :my_action do
6
+ on_entry %{
7
+ Embed("other", "content", {});
8
+ }
9
+
10
+ on "next", %{
11
+ Goto("my_other_action")
12
+ }
13
+ end
14
+
15
+ action :my_other_action do
16
+ on_entry %{
17
+ Embed("other2", "content", {});
18
+ }
19
+ end
20
+ end
21
+
22
+ controller :other do
23
+ services :test
24
+
25
+ action :index do
26
+ on_entry %{
27
+ other_bp = __base__;
28
+ kern_log("My bp is: " + __base__)
29
+ }
30
+ end
31
+ end
32
+
33
+ controller :other2 do
34
+ services :test
35
+
36
+ action :index do
37
+ on_entry %{
38
+ other_bp2 = __base__;
39
+ }
40
+ end
41
+ end
42
+
@@ -0,0 +1,24 @@
1
+ controller :my_controller do
2
+ services :vm
3
+
4
+ on_entry %{
5
+ read_res_params = [];
6
+ }
7
+
8
+ action :my_action do
9
+ on_entry %{
10
+ var page = vm_create_page("test");
11
+
12
+ var info = {
13
+ ns: "sockio",
14
+ page: page,
15
+ };
16
+
17
+ Request("vm", "write", info);
18
+ }
19
+
20
+ on "read_res", %{
21
+ read_res_params.push(JSON.parse(JSON.stringify(params)));
22
+ }
23
+ end
24
+ end
@@ -0,0 +1,33 @@
1
+ controller :my_controller do
2
+ services :vm
3
+
4
+ on_entry %{
5
+ read_res_params = [];
6
+
7
+ //Create a page and commit it to the sockio cache (cheating)
8
+ var page = vm_create_page("test");
9
+ page.entries.push(
10
+ {"_id": "test", "_sig": "test", "val": "test"}
11
+ );
12
+ vm_reindex_page(page);
13
+ vm_rehash_page(page);
14
+ vm_cache["sockio"]["test"] = page;
15
+ }
16
+
17
+ action :my_action do
18
+ on_entry %{
19
+ var page = vm_create_page("test");
20
+
21
+ var info = {
22
+ ns: "sockio",
23
+ page: page,
24
+ };
25
+
26
+ Request("vm", "write", info);
27
+ }
28
+
29
+ on "read_res", %{
30
+ read_res_params.push(JSON.parse(JSON.stringify(params)));
31
+ }
32
+ end
33
+ end
@@ -403,6 +403,42 @@ RSpec.describe "kern:controller_spec" do
403
403
  end
404
404
  end
405
405
 
406
+ it "Does call __dealloc__ on all controllers within a multi-level controller hierarchy when that view hierarchy is dismissed" do
407
+ ctx = flok_new_user File.read('./spec/kern/assets/multi_level_dealloc.rb'), File.read("./spec/kern/assets/test_service/config0.rb")
408
+ dump = ctx.evald %{
409
+ base = _embed("nav", 0, {}, null);
410
+
411
+ //Drain queue
412
+ int_dispatch([]);
413
+
414
+ //This is the nav controller
415
+ dump.bp = base;
416
+
417
+ //This is the 'content' controller of nav
418
+ dump.my_controller_bp = my_controller_bp;
419
+
420
+ //This is the 'pushed' controller of the content's controller
421
+ dump.other_bp = other_bp;
422
+ }
423
+
424
+ #This is like the controller embedded in a nav pushing a dialog ontop of itself
425
+ @driver.int "int_event", [
426
+ dump["my_controller_bp"], "next", {}
427
+ ]
428
+
429
+ #This is like the nav moving to another action (while the 'content' controller has something pushed on it)
430
+ @driver.int "int_event", [
431
+ dump["bp"], "next_nav", {}
432
+ ]
433
+
434
+ test_service_connected = ctx.dump "test_service_connected"
435
+
436
+ ctx.dump_log
437
+ expect(test_service_connected).to eq({
438
+ })
439
+ end
440
+
441
+
406
442
  it "Does tear down the old embedded view from the embedded view controller when switching actions" do
407
443
  #Compile the controller
408
444
  ctx = flok_new_user File.read('./spec/kern/assets/goto.rb')
@@ -0,0 +1,42 @@
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
+ #Any global kernel API functions go here
8
+
9
+ RSpec.describe "kern:global_function_spec" do
10
+ include_context "kern"
11
+
12
+ it "Can use the kern_log function which writes to kern_log_stdout" do
13
+ #Compile the controller
14
+ ctx = flok_new_user File.read('./spec/kern/assets/controller0.rb')
15
+
16
+ dump = ctx.evald %{
17
+ kern_log("foo");
18
+ kern_log("bar");
19
+
20
+ dump.kern_log_stdout = kern_log_stdout;
21
+ }
22
+
23
+ expect(dump["kern_log_stdout"][0]).to eq("foo")
24
+ expect(dump["kern_log_stdout"][1]).to eq("bar")
25
+ end
26
+
27
+ it "Can use the kern_log_json function which writes to kern_log_stdout" do
28
+ #Compile the controller
29
+ ctx = flok_new_user File.read('./spec/kern/assets/controller0.rb')
30
+
31
+ dump = ctx.evald %{
32
+ kern_log_json({
33
+ "foo": "bar"
34
+ })
35
+
36
+ dump.kern_log_stdout = kern_log_stdout;
37
+ }
38
+
39
+ expect(dump["kern_log_stdout"][0]).to eq({"foo" => "bar"})
40
+ end
41
+
42
+ end
@@ -1,11 +1,11 @@
1
1
  #The test service
2
2
 
3
3
  Dir.chdir File.join File.dirname(__FILE__), '../../'
4
+ require 'zlib'
4
5
  require './spec/env/kern.rb'
5
6
  require './spec/lib/helpers.rb'
6
7
  require './spec/lib/io_extensions.rb'
7
8
  require './spec/lib/rspec_extensions.rb'
8
- require 'zlib'
9
9
 
10
10
  RSpec.describe "kern:test_service" do
11
11
  include Zlib
@@ -80,4 +80,28 @@ RSpec.describe "kern:test_service" do
80
80
  })
81
81
  end
82
82
 
83
+ it "Does keep track of connected clients via test_service_bp" do
84
+ ctx = flok_new_user File.read('./spec/kern/assets/test_service/controller3.rb'), File.read("./spec/kern/assets/test_service/config0.rb")
85
+ dump = ctx.evald %{
86
+ base = _embed("my_controller", 0, {}, null);
87
+
88
+ //Drain queue
89
+ int_dispatch([]);
90
+
91
+ dump.bp = base;
92
+ dump.other_bp = other_bp;
93
+ }
94
+
95
+ @driver.int "int_event", [
96
+ dump["bp"], "next", {}
97
+ ]
98
+ other_bp2 = ctx.eval "other_bp2"
99
+ test_service_connected = ctx.dump "test_service_connected"
100
+
101
+ ctx.dump_log
102
+ expect(test_service_connected).to eq({
103
+ dump["bp"].to_s => true,
104
+ other_bp2.to_s => true,
105
+ })
106
+ end
83
107
  end
@@ -451,4 +451,40 @@ RSpec.describe "kern:sockio_pager" do
451
451
  {"_id" => "foo", "_sig" => "foo", "value" => "bar"}
452
452
  ])
453
453
  end
454
+
455
+ it "Does accept writes of pages that don't currently exist in cache; they go into vm_cache as-is" do
456
+ ctx = flok_new_user File.read('./spec/kern/assets/vm/pg_sockio/write.rb'), File.read("./spec/kern/assets/vm/pg_sockio/config.rb")
457
+ dump = ctx.evald %{
458
+ //Call embed on main root view
459
+ dump.base = _embed("my_controller", 0, {}, null);
460
+
461
+ //Drain queue
462
+ int_dispatch([]);
463
+
464
+ dump.vm_cache = vm_cache;
465
+ }
466
+
467
+ #The vm_cache should now contain an entry for the page
468
+ expect(dump["vm_cache"]["sockio"]["test"]).not_to eq(nil)
469
+ end
470
+
471
+ it "Does accept writes of pages that **do** currently exist in cache; they go into vm_cache commited" do
472
+ ctx = flok_new_user File.read('./spec/kern/assets/vm/pg_sockio/write2.rb'), File.read("./spec/kern/assets/vm/pg_sockio/config.rb")
473
+ dump = ctx.evald %{
474
+ //Call embed on main root view
475
+ dump.base = _embed("my_controller", 0, {}, null);
476
+
477
+ //Drain queue
478
+ int_dispatch([]);
479
+
480
+ dump.vm_cache = vm_cache;
481
+ }
482
+
483
+ #The vm_cache should now contain an entry for the page
484
+ expect(dump["vm_cache"]["sockio"]["test"]).not_to eq(nil)
485
+
486
+ #And that entry contains commits
487
+ expect(dump["vm_cache"]["sockio"]["test"]["__changes"]).not_to eq(nil)
488
+ expect(dump["vm_cache"]["sockio"]["test"]["__changes_id"]).not_to eq(nil)
489
+ end
454
490
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flok
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.73
4
+ version: 0.0.74
5
5
  platform: ruby
6
6
  authors:
7
7
  - seo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-23 00:00:00.000000000 Z
11
+ date: 2015-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: execjs
@@ -220,6 +220,20 @@ dependencies:
220
220
  - - "~>"
221
221
  - !ruby/object:Gem::Version
222
222
  version: '1.0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: awesome_print
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - "~>"
228
+ - !ruby/object:Gem::Version
229
+ version: '1.6'
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - "~>"
235
+ - !ruby/object:Gem::Version
236
+ version: '1.6'
223
237
  - !ruby/object:Gem::Dependency
224
238
  name: therubyracer
225
239
  requirement: !ruby/object:Gem::Requirement
@@ -283,6 +297,7 @@ files:
283
297
  - app/kern/crc32.js
284
298
  - app/kern/dispatch.js
285
299
  - app/kern/gen_id.js
300
+ - app/kern/kern_log.js
286
301
  - app/kern/macro.rb
287
302
  - app/kern/mod/controller.js
288
303
  - app/kern/mod/debug.js
@@ -1158,6 +1173,7 @@ files:
1158
1173
  - spec/kern/assets/interval2.rb
1159
1174
  - spec/kern/assets/interval3.rb
1160
1175
  - spec/kern/assets/lower_event.rb
1176
+ - spec/kern/assets/multi_level_dealloc.rb
1161
1177
  - spec/kern/assets/no_choose_action.rb
1162
1178
  - spec/kern/assets/push.rb
1163
1179
  - spec/kern/assets/push_pop.rb
@@ -1184,6 +1200,7 @@ files:
1184
1200
  - spec/kern/assets/test_service/controller0.rb
1185
1201
  - spec/kern/assets/test_service/controller1.rb
1186
1202
  - spec/kern/assets/test_service/controller2.rb
1203
+ - spec/kern/assets/test_service/controller3.rb
1187
1204
  - spec/kern/assets/test_service_config.rb
1188
1205
  - spec/kern/assets/vm/config0.rb
1189
1206
  - spec/kern/assets/vm/config1.rb
@@ -1261,6 +1278,8 @@ files:
1261
1278
  - spec/kern/assets/vm/pg_sockio/nothing.rb
1262
1279
  - spec/kern/assets/vm/pg_sockio/watch.rb
1263
1280
  - spec/kern/assets/vm/pg_sockio/watch2.rb
1281
+ - spec/kern/assets/vm/pg_sockio/write.rb
1282
+ - spec/kern/assets/vm/pg_sockio/write2.rb
1264
1283
  - spec/kern/assets/vm/service0.rb
1265
1284
  - spec/kern/assets/vm/service_controller0.rb
1266
1285
  - spec/kern/assets/vm/vm_commit_pages.js
@@ -1274,6 +1293,7 @@ files:
1274
1293
  - spec/kern/dispatch_spec.rb
1275
1294
  - spec/kern/event_spec.rb
1276
1295
  - spec/kern/functions_spec.rb
1296
+ - spec/kern/global_functions_spec.rb
1277
1297
  - spec/kern/rest_service_spec.rb
1278
1298
  - spec/kern/service_controller_spec.rb
1279
1299
  - spec/kern/test_service_spec.rb
@@ -2096,6 +2116,7 @@ test_files:
2096
2116
  - spec/kern/assets/interval2.rb
2097
2117
  - spec/kern/assets/interval3.rb
2098
2118
  - spec/kern/assets/lower_event.rb
2119
+ - spec/kern/assets/multi_level_dealloc.rb
2099
2120
  - spec/kern/assets/no_choose_action.rb
2100
2121
  - spec/kern/assets/push.rb
2101
2122
  - spec/kern/assets/push_pop.rb
@@ -2122,6 +2143,7 @@ test_files:
2122
2143
  - spec/kern/assets/test_service/controller0.rb
2123
2144
  - spec/kern/assets/test_service/controller1.rb
2124
2145
  - spec/kern/assets/test_service/controller2.rb
2146
+ - spec/kern/assets/test_service/controller3.rb
2125
2147
  - spec/kern/assets/test_service_config.rb
2126
2148
  - spec/kern/assets/vm/config0.rb
2127
2149
  - spec/kern/assets/vm/config1.rb
@@ -2199,6 +2221,8 @@ test_files:
2199
2221
  - spec/kern/assets/vm/pg_sockio/nothing.rb
2200
2222
  - spec/kern/assets/vm/pg_sockio/watch.rb
2201
2223
  - spec/kern/assets/vm/pg_sockio/watch2.rb
2224
+ - spec/kern/assets/vm/pg_sockio/write.rb
2225
+ - spec/kern/assets/vm/pg_sockio/write2.rb
2202
2226
  - spec/kern/assets/vm/service0.rb
2203
2227
  - spec/kern/assets/vm/service_controller0.rb
2204
2228
  - spec/kern/assets/vm/vm_commit_pages.js
@@ -2212,6 +2236,7 @@ test_files:
2212
2236
  - spec/kern/dispatch_spec.rb
2213
2237
  - spec/kern/event_spec.rb
2214
2238
  - spec/kern/functions_spec.rb
2239
+ - spec/kern/global_functions_spec.rb
2215
2240
  - spec/kern/rest_service_spec.rb
2216
2241
  - spec/kern/service_controller_spec.rb
2217
2242
  - spec/kern/test_service_spec.rb