flok 0.0.73 → 0.0.74

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.
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