gloo 6.3.1 → 6.5.0

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 (100) hide show
  1. checksums.yaml +4 -4
  2. data/CLAUDE.md +13 -0
  3. data/docs/application.md +9 -0
  4. data/docs/language_objects.md +78 -0
  5. data/docs/language_scripting.md +41 -0
  6. data/docs/objects.md +1 -1
  7. data/docs/verbs.md +36 -2
  8. data/lib/VERSION +1 -1
  9. data/lib/VERSION_NOTES +13 -0
  10. data/lib/gloo/app/engine.rb +5 -1
  11. data/lib/gloo/app/log.rb +5 -5
  12. data/lib/gloo/app/settings.rb +4 -1
  13. data/lib/gloo/core/obj.rb +60 -1
  14. data/lib/gloo/core/parser.rb +30 -1
  15. data/lib/gloo/core/tokens.rb +44 -18
  16. data/lib/gloo/expr/l_string.rb +8 -4
  17. data/lib/gloo/objs/basic/script.rb +28 -2
  18. data/lib/gloo/objs/web/json.rb +4 -1
  19. data/lib/gloo/persist/comment_buffer.rb +58 -0
  20. data/lib/gloo/persist/declaration_ledger.rb +61 -0
  21. data/lib/gloo/persist/disc_mech.rb +15 -2
  22. data/lib/gloo/persist/file_loader.rb +208 -102
  23. data/lib/gloo/persist/file_saver.rb +251 -6
  24. data/lib/gloo/persist/file_storage.rb +10 -4
  25. data/lib/gloo/persist/indent_stack.rb +90 -0
  26. data/lib/gloo/persist/line_splitter.rb +18 -3
  27. data/lib/gloo/persist/persist_man.rb +193 -26
  28. data/lib/gloo/persist/script_body_collector.rb +102 -0
  29. data/lib/gloo/persist/shorthand_expander.rb +51 -0
  30. data/lib/gloo/persist/source/blank_node.rb +27 -0
  31. data/lib/gloo/persist/source/comment_node.rb +27 -0
  32. data/lib/gloo/persist/source/directive_node.rb +26 -0
  33. data/lib/gloo/persist/source/obj_node.rb +91 -0
  34. data/lib/gloo/persist/source/source_doc.rb +41 -0
  35. data/lib/gloo/verbs/list.rb +24 -2
  36. data/lib/gloo/verbs/load.rb +9 -1
  37. data/lib/gloo/verbs/reload.rb +3 -0
  38. data/lib/gloo/verbs/save.rb +57 -10
  39. data/test.gloo/ctrl/each.test.gloo +28 -30
  40. data/test.gloo/dt/date.test.gloo +69 -71
  41. data/test.gloo/dt/datetime.test.gloo +55 -57
  42. data/test.gloo/dt/time.test.gloo +70 -72
  43. data/test.gloo/lang/continuation.test.gloo +25 -27
  44. data/test.gloo/lang/convert.test.gloo +50 -52
  45. data/test.gloo/lang/dt_comparisons.test.gloo +87 -89
  46. data/test.gloo/lang/exceptions.test.gloo +42 -44
  47. data/test.gloo/lang/gloo_sys.test.gloo +100 -102
  48. data/test.gloo/lang/here.test.gloo +32 -34
  49. data/test.gloo/lang/it.test.gloo +27 -29
  50. data/test.gloo/lang/literal.test.gloo +55 -57
  51. data/test.gloo/lang/load_lib_directive.test.gloo +18 -20
  52. data/test.gloo/lang/naming.test.gloo +28 -30
  53. data/test.gloo/lang/ops.test.gloo +53 -55
  54. data/test.gloo/lang/shorthand.test.gloo +27 -0
  55. data/test.gloo/math/add.test.gloo +40 -42
  56. data/test.gloo/math/div.test.gloo +23 -25
  57. data/test.gloo/math/mult.test.gloo +23 -25
  58. data/test.gloo/math/sub.test.gloo +23 -25
  59. data/test.gloo/objs/alias.test.gloo +15 -17
  60. data/test.gloo/objs/bool.test.gloo +54 -56
  61. data/test.gloo/objs/can.test.gloo +33 -35
  62. data/test.gloo/objs/cipher.test.gloo +39 -41
  63. data/test.gloo/objs/decimal.test.gloo +27 -29
  64. data/test.gloo/objs/erb.test.gloo +47 -49
  65. data/test.gloo/objs/file.test.gloo +68 -70
  66. data/test.gloo/objs/function.test.gloo +37 -39
  67. data/test.gloo/objs/int.test.gloo +54 -56
  68. data/test.gloo/objs/json.test.gloo +57 -50
  69. data/test.gloo/objs/obj.test.gloo +68 -48
  70. data/test.gloo/objs/outline.test.gloo +48 -50
  71. data/test.gloo/objs/password.test.gloo +34 -36
  72. data/test.gloo/objs/repeat.test.gloo +42 -44
  73. data/test.gloo/objs/script.test.gloo +13 -15
  74. data/test.gloo/objs/string.test.gloo +82 -84
  75. data/test.gloo/objs/text.test.gloo +90 -92
  76. data/test.gloo/objs/untyped.test.gloo +36 -38
  77. data/test.gloo/objs/uri.test.gloo +37 -39
  78. data/test.gloo/string/str.test.gloo +15 -0
  79. data/test.gloo/verbs/break.test.gloo +12 -14
  80. data/test.gloo/verbs/check.test.gloo +22 -24
  81. data/test.gloo/verbs/context.test.gloo +11 -13
  82. data/test.gloo/verbs/create.test.gloo +7 -9
  83. data/test.gloo/verbs/eval.test.gloo +10 -12
  84. data/test.gloo/verbs/exists.test.gloo +43 -45
  85. data/test.gloo/verbs/if.test.gloo +8 -10
  86. data/test.gloo/verbs/invoke.test.gloo +73 -75
  87. data/test.gloo/verbs/list.test.gloo +21 -23
  88. data/test.gloo/verbs/load.test.gloo +27 -21
  89. data/test.gloo/verbs/log.test.gloo +7 -9
  90. data/test.gloo/verbs/move.test.gloo +12 -14
  91. data/test.gloo/verbs/put.test.gloo +10 -12
  92. data/test.gloo/verbs/reload.test.gloo +55 -0
  93. data/test.gloo/verbs/run.test.gloo +8 -10
  94. data/test.gloo/verbs/save.test.gloo +111 -0
  95. data/test.gloo/verbs/show.test.gloo +26 -28
  96. data/test.gloo/verbs/tell.test.gloo +8 -10
  97. data/test.gloo/verbs/throw.test.gloo +31 -33
  98. data/test.gloo/verbs/unless.test.gloo +13 -15
  99. data/test.gloo/verbs/unload.test.gloo +10 -12
  100. metadata +14 -1
@@ -5,28 +5,34 @@
5
5
  # its effect is observable through 'exists?'.
6
6
  #
7
7
 
8
- tests [can] :
9
- verbs [can] :
10
- load [can] :
8
+ tests.verbs.load [can] :
11
9
 
12
- err_fired [bool] : false
13
- on_error [script] :
14
- put true into ^.err_fired
10
+ err_fired [bool] : false
11
+ on_error [script] :
12
+ put true into ^.err_fired
15
13
 
16
- load_lib_registers_type [test] :
17
- description [string] : load lib registers that library's object types.
18
- on_test [script] :
19
- exists? object markdown
20
- refute "markdown type should not be registered before load"
14
+ load_lib_registers_type [test] :
15
+ description [string] : load lib registers that library's object types.
16
+ on_test [script] :
17
+ exists? object markdown
18
+ refute "markdown type should not be registered before load"
21
19
 
22
- load lib md
23
- exists? object markdown
24
- assert "expected the markdown type to be registered after 'load lib md'"
20
+ load lib md
21
+ exists? object markdown
22
+ assert "expected the markdown type to be registered after 'load lib md'"
25
23
 
26
- load_no_args_errors [test] :
27
- description [string] : load with no arguments fires on_error.
28
- on_test [script] :
29
- put false into ^^.err_fired
30
- load
31
- eval ^^.err_fired = true
32
- assert "expected 'load' with no arguments to fire on_error"
24
+ load_no_args_errors [test] :
25
+ description [string] : load with no arguments fires on_error.
26
+ on_test [script] :
27
+ put false into ^^.err_fired
28
+ load
29
+ eval ^^.err_fired = true
30
+ assert "expected 'load' with no arguments to fire on_error"
31
+
32
+ load_missing_file_errors [test] :
33
+ description [string] : load of a file that can't be found fires on_error.
34
+ on_test [script] :
35
+ put false into ^^.err_fired
36
+ load no_such_file_xyz
37
+ eval ^^.err_fired = true
38
+ assert "expected 'load' of a missing file to fire on_error"
@@ -2,13 +2,11 @@
2
2
  # Log verb tests
3
3
  #
4
4
 
5
- tests [can] :
6
- verbs [can] :
7
- log [can] :
5
+ tests.verbs.log [can] :
8
6
 
9
- write_log [test] :
10
- description [string] : Write to the log.
11
- on_test [script] :
12
- log 'debug' (debug)
13
- eval it = 'debug'
14
- assert "expected it to be 'debug'"
7
+ write_log [test] :
8
+ description [string] : Write to the log.
9
+ on_test [script] :
10
+ log 'debug' (debug)
11
+ eval it = 'debug'
12
+ assert "expected it to be 'debug'"
@@ -2,19 +2,17 @@
2
2
  # Move verb tests
3
3
  #
4
4
 
5
- tests [can] :
6
- verbs [can] :
7
- move [can] :
5
+ tests.verbs.move [can] :
8
6
 
9
- c [container] :
10
- a [string] : "a"
11
- t [container] :
7
+ c [container] :
8
+ a [string] : "a"
9
+ t [container] :
12
10
 
13
- move_a [test] :
14
- description [string] : Move an object and verify.
15
- on_test [script] :
16
- move tests.verbs.move.c.a to tests.verbs.move.t
17
- exists? instance tests.verbs.move.t.a
18
- assert "expected a to be in t"
19
- exists? instance tests.verbs.move.c.a
20
- refute "expected a not to be in c"
11
+ move_a [test] :
12
+ description [string] : Move an object and verify.
13
+ on_test [script] :
14
+ move tests.verbs.move.c.a to tests.verbs.move.t
15
+ exists? instance tests.verbs.move.t.a
16
+ assert "expected a to be in t"
17
+ exists? instance tests.verbs.move.c.a
18
+ refute "expected a not to be in c"
@@ -2,18 +2,16 @@
2
2
  # Put verb tests
3
3
  #
4
4
 
5
- tests [can] :
6
- verbs [can] :
7
- put [can] :
5
+ tests.verbs.put [can] :
8
6
 
9
- s [string] : abc
7
+ s [string] : abc
10
8
 
11
- put_into [test] :
12
- description [string] : Assign a value.
13
- on_test [script] :
14
- eval ^^.s = 'abc'
15
- assert 'initial value is abc'
9
+ put_into [test] :
10
+ description [string] : Assign a value.
11
+ on_test [script] :
12
+ eval ^^.s = 'abc'
13
+ assert 'initial value is abc'
16
14
 
17
- put 'xyz' into ^^.s
18
- eval it = ^^.s
19
- assert "expected it to be 'xyz'"
15
+ put 'xyz' into ^^.s
16
+ eval it = ^^.s
17
+ assert "expected it to be 'xyz'"
@@ -0,0 +1,55 @@
1
+ #
2
+ # Reload message tests -- 'tell {obj} to reload' re-reads the file.
3
+ #
4
+ # The bare 'reload' verb restarts the engine (covered by the unit
5
+ # tests). These exercise per-object reload against a /tmp scratch file
6
+ # that gets rewritten between load and reload.
7
+ #
8
+
9
+ tests.verbs.reload [can] :
10
+
11
+ f [file] : /tmp/gloo_reload_test.gloo
12
+ v1 [text] : BEGIN
13
+ demo [container] :
14
+ msg [string] : original
15
+ END
16
+
17
+ v2 [text] : BEGIN
18
+ demo [container] :
19
+ msg [string] : edited outside gloo
20
+ added [string] : brand new
21
+ END
22
+
23
+ reload_picks_up_an_external_change [test] :
24
+ description [string] : editing the file on disk then reloading takes effect.
25
+ on_test [script] :
26
+ tell ^^.f to write ( ^^.v1 )
27
+ load /tmp/gloo_reload_test.gloo
28
+ eval demo.msg = 'original'
29
+ assert "sanity: loaded the first version"
30
+
31
+ tell ^^.f to write ( ^^.v2 )
32
+ tell demo to reload
33
+
34
+ eval demo.msg = 'edited outside gloo'
35
+ assert "reload should pick up the changed value"
36
+ eval demo.added = 'brand new'
37
+ assert "reload should pick up a newly added child"
38
+
39
+ tell demo to unload
40
+ tell ^^.f to delete
41
+
42
+ reload_discards_an_in_memory_edit [test] :
43
+ description [string] : an unsaved change is thrown away by reload.
44
+ on_test [script] :
45
+ tell ^^.f to write ( ^^.v1 )
46
+ load /tmp/gloo_reload_test.gloo
47
+
48
+ put 'not saved' into demo.msg
49
+ tell demo to reload
50
+
51
+ eval demo.msg = 'original'
52
+ assert "reload should restore the on-disk value"
53
+
54
+ tell demo to unload
55
+ tell ^^.f to delete
@@ -2,15 +2,13 @@
2
2
  # Run verb tests
3
3
  #
4
4
 
5
- tests [can] :
6
- verbs [can] :
7
- run [can] :
5
+ tests.verbs.run [can] :
8
6
 
9
- s [script] :
10
- eval true
7
+ s [script] :
8
+ eval true
11
9
 
12
- run [test] :
13
- description [string] : Run a script.
14
- on_test [script] :
15
- run ^^.s
16
- assert "expected it to be true"
10
+ run [test] :
11
+ description [string] : Run a script.
12
+ on_test [script] :
13
+ run ^^.s
14
+ assert "expected it to be true"
@@ -0,0 +1,111 @@
1
+ #
2
+ # Save verb tests -- real load -> edit -> save round trips.
3
+ #
4
+ # Each test writes a .gloo fixture to /tmp, loads it, does something,
5
+ # saves, reads the file back, and asserts on the raw text. Every test
6
+ # unloads its object and deletes its scratch file at the end so the
7
+ # next one starts clean.
8
+ #
9
+
10
+ tests.verbs.save [can] :
11
+
12
+ f [file] : /tmp/gloo_save_test.gloo
13
+ g [file] : /tmp/gloo_save_test_2.gloo
14
+ to_target [file] : /tmp/gloo_save_test_to.gloo
15
+ out [string] :
16
+ err [bool] : false
17
+
18
+ on_error [script] :
19
+ put true into ^.err
20
+
21
+ #
22
+ # The fixture used by most tests: two comments, a changed-in-place
23
+ # value, and an untouched sibling.
24
+ #
25
+ fixture [text] : BEGIN
26
+ #
27
+ # a comment above demo
28
+ #
29
+ demo [container] :
30
+ msg [string] : hello
31
+ # a comment above other
32
+ other [string] : world
33
+ END
34
+
35
+ round_trip_preserves_comments_and_untouched_lines [test] :
36
+ description [string] : load, change one value, save -- comments and the untouched sibling survive.
37
+ on_test [script] :
38
+ put false into ^^.err
39
+ tell ^^.f to write ( ^^.fixture )
40
+ load /tmp/gloo_save_test.gloo
41
+ put 'changed' into demo.msg
42
+ save demo
43
+ eval ^^.err = false
44
+ assert "save should not error"
45
+ tell ^^.f to read ( ^^.out )
46
+ check ^^.out for substring? ( "# a comment above demo" )
47
+ assert "the leading comment block should survive"
48
+ check ^^.out for substring? ( "# a comment above other" )
49
+ assert "the inner comment should survive"
50
+ check ^^.out for substring? ( "msg [string] : changed" )
51
+ assert "the changed value should be written"
52
+ check ^^.out for substring? ( "other [string] : world" )
53
+ assert "the untouched sibling should be unchanged"
54
+ tell demo to unload
55
+ tell ^^.f to delete
56
+
57
+ unchanged_file_round_trips_byte_for_byte [test] :
58
+ description [string] : load then save with no change reproduces the file exactly.
59
+ on_test [script] :
60
+ tell ^^.f to write ( ^^.fixture )
61
+ load /tmp/gloo_save_test.gloo
62
+ save demo
63
+ tell ^^.f to read ( ^^.out )
64
+ eval ^^.out = ^^.fixture
65
+ assert "an unchanged save should reproduce the original text"
66
+ tell demo to unload
67
+ tell ^^.f to delete
68
+
69
+ deleting_an_object_drops_its_line [test] :
70
+ description [string] : removing a child and saving drops just that declaration.
71
+ on_test [script] :
72
+ tell ^^.f to write ( ^^.fixture )
73
+ load /tmp/gloo_save_test.gloo
74
+ tell demo.other to unload
75
+ save demo
76
+ tell ^^.f to read ( ^^.out )
77
+ check ^^.out for substring? ( "msg [string] : hello" )
78
+ assert "the kept sibling should still be there"
79
+ check ^^.out for substring? ( "other [string]" )
80
+ refute "the removed child's line should be gone"
81
+ tell demo to unload
82
+ tell ^^.f to delete
83
+
84
+ save_to_a_new_path_creates_the_file [test] :
85
+ description [string] : save {obj} to {path} writes a new file and registers it.
86
+ on_test [script] :
87
+ tell ^^.f to write ( ^^.fixture )
88
+ load /tmp/gloo_save_test.gloo
89
+ save demo to /tmp/gloo_save_test_to
90
+ check ^^.to_target for exists?
91
+ assert "save ... to should create the target file"
92
+ tell ^^.to_target to read ( ^^.out )
93
+ check ^^.out for substring? ( "msg [string] : hello" )
94
+ assert "the new file should hold the object"
95
+ tell demo to unload
96
+ tell ^^.f to delete
97
+ tell ^^.to_target to delete
98
+
99
+ reload_discards_unsaved_changes [test] :
100
+ description [string] : reload throws away edits that were not saved.
101
+ on_test [script] :
102
+ tell ^^.f to write ( ^^.fixture )
103
+ load /tmp/gloo_save_test.gloo
104
+ put 'not saved' into demo.msg
105
+ eval demo.msg = 'not saved'
106
+ assert "sanity: the edit landed"
107
+ tell demo to reload
108
+ eval demo.msg = 'hello'
109
+ assert "reload should restore the on-disk value"
110
+ tell demo to unload
111
+ tell ^^.f to delete
@@ -2,36 +2,34 @@
2
2
  # Show verb tests
3
3
  #
4
4
 
5
- tests [can] :
6
- verbs [can] :
7
- show [can] :
5
+ tests.verbs.show [can] :
8
6
 
9
- msg [string] : hello
7
+ msg [string] : hello
10
8
 
11
- show_literal [test] :
12
- description [string] : Show a literal sets it to that literal.
13
- on_test [script] :
14
- show 'hello'
15
- eval it = 'hello'
16
- assert "expected it to be 'hello'"
9
+ show_literal [test] :
10
+ description [string] : Show a literal sets it to that literal.
11
+ on_test [script] :
12
+ show 'hello'
13
+ eval it = 'hello'
14
+ assert "expected it to be 'hello'"
17
15
 
18
- show_object [test] :
19
- description [string] : Show an object sets it to the object's value.
20
- on_test [script] :
21
- show ^^.msg
22
- eval it = 'hello'
23
- assert "expected it to be the value of msg"
16
+ show_object [test] :
17
+ description [string] : Show an object sets it to the object's value.
18
+ on_test [script] :
19
+ show ^^.msg
20
+ eval it = 'hello'
21
+ assert "expected it to be the value of msg"
24
22
 
25
- show_expression [test] :
26
- description [string] : Show evaluates an expression before showing it.
27
- on_test [script] :
28
- show 3 + 4
29
- eval it = 7
30
- assert "expected it to be 7"
23
+ show_expression [test] :
24
+ description [string] : Show evaluates an expression before showing it.
25
+ on_test [script] :
26
+ show 3 + 4
27
+ eval it = 7
28
+ assert "expected it to be 7"
31
29
 
32
- show_concat [test] :
33
- description [string] : Show evaluates a string concatenation.
34
- on_test [script] :
35
- show 'a' + 'b'
36
- eval it = 'ab'
37
- assert "expected it to be 'ab'"
30
+ show_concat [test] :
31
+ description [string] : Show evaluates a string concatenation.
32
+ on_test [script] :
33
+ show 'a' + 'b'
34
+ eval it = 'ab'
35
+ assert "expected it to be 'ab'"
@@ -2,15 +2,13 @@
2
2
  # Tell verb tests
3
3
  #
4
4
 
5
- tests [can] :
6
- verbs [can] :
7
- tell [can] :
5
+ tests.verbs.tell [can] :
8
6
 
9
- s [string] : abc123d
7
+ s [string] : abc123d
10
8
 
11
- tell [test] :
12
- description [string] : Tell verb sets value to it
13
- on_test [script] :
14
- tell ^^.s to count_chars
15
- eval it = 7
16
- assert "expected it to be 7"
9
+ tell [test] :
10
+ description [string] : Tell verb sets value to it
11
+ on_test [script] :
12
+ tell ^^.s to count_chars
13
+ eval it = 7
14
+ assert "expected it to be 7"
@@ -9,36 +9,34 @@
9
9
  # the console by design.
10
10
  #
11
11
 
12
- tests [can] :
13
- verbs [can] :
14
- throw [can] :
15
-
16
- on_exception [script] :
17
- put ^.exception_data.message into ^.caught
18
-
19
- exception_data [can] :
20
- message [string] :
21
- backtrace [string] :
22
-
23
- caught [string] :
24
-
25
- default_message [test] :
26
- description [string] : bare throw uses the default message and execution continues.
27
- on_test [script] :
28
- put '' into tests.verbs.throw.caught
29
- eval false
30
-
31
- throw
32
- eval true
33
- assert "expected execution to continue after a bare throw"
34
-
35
- eval tests.verbs.throw.caught = 'Thrown by throw verb'
36
- assert "expected the default thrown message"
37
-
38
- custom_message [test] :
39
- description [string] : throw evaluates its argument as the message.
40
- on_test [script] :
41
- put '' into tests.verbs.throw.caught
42
- throw 'boom ' + '42'
43
- eval tests.verbs.throw.caught = 'boom 42'
44
- assert "expected the evaluated custom message"
12
+ tests.verbs.throw [can] :
13
+
14
+ on_exception [script] :
15
+ put ^.exception_data.message into ^.caught
16
+
17
+ exception_data [can] :
18
+ message [string] :
19
+ backtrace [string] :
20
+
21
+ caught [string] :
22
+
23
+ default_message [test] :
24
+ description [string] : bare throw uses the default message and execution continues.
25
+ on_test [script] :
26
+ put '' into tests.verbs.throw.caught
27
+ eval false
28
+
29
+ throw
30
+ eval true
31
+ assert "expected execution to continue after a bare throw"
32
+
33
+ eval tests.verbs.throw.caught = 'Thrown by throw verb'
34
+ assert "expected the default thrown message"
35
+
36
+ custom_message [test] :
37
+ description [string] : throw evaluates its argument as the message.
38
+ on_test [script] :
39
+ put '' into tests.verbs.throw.caught
40
+ throw 'boom ' + '42'
41
+ eval tests.verbs.throw.caught = 'boom 42'
42
+ assert "expected the evaluated custom message"
@@ -2,21 +2,19 @@
2
2
  # Unless verb tests
3
3
  #
4
4
 
5
- tests [can] :
6
- verbs [can] :
7
- unless [can] :
5
+ tests.verbs.unless [can] :
8
6
 
9
- b [bool] : false
7
+ b [bool] : false
10
8
 
11
- unless_false [test] :
12
- description [string] : Unless false, do block runs.
13
- on_test [script] :
14
- unless ^^.b do eval true
15
- assert "expected do block to run when condition is false"
9
+ unless_false [test] :
10
+ description [string] : Unless false, do block runs.
11
+ on_test [script] :
12
+ unless ^^.b do eval true
13
+ assert "expected do block to run when condition is false"
16
14
 
17
- unless_true [test] :
18
- description [string] : Unless true, do block is skipped.
19
- on_test [script] :
20
- eval false
21
- unless true do eval true
22
- refute "expected do block to be skipped when condition is true"
15
+ unless_true [test] :
16
+ description [string] : Unless true, do block is skipped.
17
+ on_test [script] :
18
+ eval false
19
+ unless true do eval true
20
+ refute "expected do block to be skipped when condition is true"
@@ -5,17 +5,15 @@
5
5
  # unit tests). Per-object unload is the 'unload' message, tested here.
6
6
  #
7
7
 
8
- tests [can] :
9
- verbs [can] :
10
- unload [can] :
8
+ tests.verbs.unload [can] :
11
9
 
12
- unload_removes_object [test] :
13
- description [string] : sending 'unload' to an object removes it from the tree.
14
- on_test [script] :
15
- create tests.verbs.unload.temp as string : 'x'
16
- exists? instance tests.verbs.unload.temp
17
- assert "temp should exist after create"
10
+ unload_removes_object [test] :
11
+ description [string] : sending 'unload' to an object removes it from the tree.
12
+ on_test [script] :
13
+ create tests.verbs.unload.temp as string : 'x'
14
+ exists? instance tests.verbs.unload.temp
15
+ assert "temp should exist after create"
18
16
 
19
- tell tests.verbs.unload.temp to unload
20
- exists? instance tests.verbs.unload.temp
21
- refute "temp should be gone after unload"
17
+ tell tests.verbs.unload.temp to unload
18
+ exists? instance tests.verbs.unload.temp
19
+ refute "temp should be gone after unload"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gloo
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.3.1
4
+ version: 6.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Crane
@@ -384,12 +384,22 @@ files:
384
384
  - lib/gloo/objs/web/http_post.rb
385
385
  - lib/gloo/objs/web/json.rb
386
386
  - lib/gloo/objs/web/uri.rb
387
+ - lib/gloo/persist/comment_buffer.rb
388
+ - lib/gloo/persist/declaration_ledger.rb
387
389
  - lib/gloo/persist/disc_mech.rb
388
390
  - lib/gloo/persist/file_loader.rb
389
391
  - lib/gloo/persist/file_saver.rb
390
392
  - lib/gloo/persist/file_storage.rb
393
+ - lib/gloo/persist/indent_stack.rb
391
394
  - lib/gloo/persist/line_splitter.rb
392
395
  - lib/gloo/persist/persist_man.rb
396
+ - lib/gloo/persist/script_body_collector.rb
397
+ - lib/gloo/persist/shorthand_expander.rb
398
+ - lib/gloo/persist/source/blank_node.rb
399
+ - lib/gloo/persist/source/comment_node.rb
400
+ - lib/gloo/persist/source/directive_node.rb
401
+ - lib/gloo/persist/source/obj_node.rb
402
+ - lib/gloo/persist/source/source_doc.rb
393
403
  - lib/gloo/plugin/base.rb
394
404
  - lib/gloo/plugin/callback.rb
395
405
  - lib/gloo/plugin/ext_manager.rb
@@ -443,6 +453,7 @@ files:
443
453
  - test.gloo/lang/load_lib_directive.test.gloo
444
454
  - test.gloo/lang/naming.test.gloo
445
455
  - test.gloo/lang/ops.test.gloo
456
+ - test.gloo/lang/shorthand.test.gloo
446
457
  - test.gloo/math/add.test.gloo
447
458
  - test.gloo/math/div.test.gloo
448
459
  - test.gloo/math/mult.test.gloo
@@ -481,7 +492,9 @@ files:
481
492
  - test.gloo/verbs/log.test.gloo
482
493
  - test.gloo/verbs/move.test.gloo
483
494
  - test.gloo/verbs/put.test.gloo
495
+ - test.gloo/verbs/reload.test.gloo
484
496
  - test.gloo/verbs/run.test.gloo
497
+ - test.gloo/verbs/save.test.gloo
485
498
  - test.gloo/verbs/show.test.gloo
486
499
  - test.gloo/verbs/tell.test.gloo
487
500
  - test.gloo/verbs/throw.test.gloo