gloo 7.0 → 7.0.2
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 +4 -4
- data/.gitignore +1 -0
- data/CLAUDE.md +4 -98
- data/README.md +2 -0
- data/docs/development.md +100 -0
- data/docs/objects.md +1 -1
- data/docs/plugins.md +2 -2
- data/lib/VERSION +1 -1
- data/lib/VERSION_NOTES +8 -0
- data/lib/gloo/core/gloo_system.rb +3 -2
- data/lib/gloo/core/obj.rb +2 -1
- data/lib/gloo/verbs/execute.rb +3 -3
- data/test.gloo/dt/datetime.test.gloo +5 -3
- data/test.gloo/lang/convert.test.gloo +1 -0
- data/test.gloo/lang/declaration.test.gloo +16 -5
- data/test.gloo/lang/exceptions.test.gloo +8 -0
- data/test.gloo/lang/failures.test.gloo +4 -0
- data/test.gloo/lang/gloo_sys.test.gloo +14 -9
- data/test.gloo/lang/it.test.gloo +6 -0
- data/test.gloo/lang/naming.test.gloo +13 -3
- data/test.gloo/math/div.test.gloo +2 -2
- data/test.gloo/math/mult.test.gloo +4 -4
- data/test.gloo/objs/can.test.gloo +3 -0
- data/test.gloo/objs/function.test.gloo +1 -0
- data/test.gloo/verbs/check.test.gloo +10 -1
- data/test.gloo/verbs/create.test.gloo +1 -0
- data/test.gloo/verbs/exists.test.gloo +1 -0
- data/test.gloo/verbs/invoke.test.gloo +1 -0
- data/test.gloo/verbs/list.test.gloo +1 -0
- data/test.gloo/verbs/load.test.gloo +5 -2
- data/test.gloo/verbs/reload.test.gloo +1 -0
- data/test.gloo/verbs/save.test.gloo +2 -0
- data/test.gloo/verbs/throw.test.gloo +2 -0
- data/test.gloo/verbs/unload.test.gloo +1 -0
- metadata +7 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d5045c234db8c56f00b865ece8f59b3d55e002c8a1592dea54f7528acca778e9
|
|
4
|
+
data.tar.gz: e5c379c09ffad63c40c9a7596e925b8a85b43c2991b56d840c0a92778c204574
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a97103b2953424e82464268cbd661e96ebd5492650b0fe7adc398fce221dc3550c1fab0c218984b329bc7ac0396d5b429a94e132f0d5f525e4f21953c93100ab
|
|
7
|
+
data.tar.gz: be9df3af8db8fd595b036ee8287665734cfa0ec07266ae8d659fdaf6d84e99c0366d99b7c2d0542050225704b33188cdbb615f95879d5560d79a56a952801992
|
data/.gitignore
CHANGED
data/CLAUDE.md
CHANGED
|
@@ -1,103 +1,9 @@
|
|
|
1
1
|
# Gloo — Core Interpreter
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The gloo language interpreter, packaged as a Ruby gem.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Source layout, how to run both test suites (`rake test` and `ruby lib/run.rb --test --quiet test.gloo/` — not `bundle exec`), documentation conventions and the error-reporting rule are in the development guide:
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
gloo/
|
|
9
|
-
├── lib/gloo/
|
|
10
|
-
│ ├── core/ Parser, Obj base class, Dictionary, path names (PN)
|
|
11
|
-
│ ├── exec/ Execution engine, dispatcher, runner
|
|
12
|
-
│ ├── expr/ Expression evaluator and operators
|
|
13
|
-
│ ├── objs/ Object type implementations
|
|
14
|
-
│ │ ├── basic/ string, int, bool, container, text, decimal, untyped, alias
|
|
15
|
-
│ │ ├── ctrl/ script, function (ƒ), each, repeat
|
|
16
|
-
│ │ ├── dt/ date, time, datetime
|
|
17
|
-
│ │ ├── str_utils/
|
|
18
|
-
│ │ ├── system/ ruby, file_handle, system
|
|
19
|
-
│ │ └── web/ http_get, http_post, json, uri, erb
|
|
20
|
-
│ ├── verbs/ One file per verb (29 total)
|
|
21
|
-
│ ├── persist/ File loading/saving
|
|
22
|
-
│ ├── convert/ Type conversion
|
|
23
|
-
│ └── plugin/ Plugin system
|
|
24
|
-
├── test/ Ruby unit tests (minitest)
|
|
25
|
-
└── test.gloo/ Gloo-language integration tests
|
|
26
|
-
```
|
|
7
|
+
@docs/development.md
|
|
27
8
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
This project is the authoritative source for gloo language documentation — not the `vaults/gloo` Obsidian vault, whose old `doc/` folder was renamed to `doc_deprecated/` and retired.
|
|
31
|
-
|
|
32
|
-
- **Narrative reference** — `docs/*.md`, eleven flat files: `getting_started.md`, `application.md`, `language_objects.md`, `language_syntax.md`, `language_scripting.md`, `operators.md`, `iterators.md`, `objects.md`, `verbs.md`, `plugins.md`, `web_app.md`. Linked from the root `README.md`. Convention: no markdown link syntax between pages (plain-text pointers instead, e.g. "see Put" not `[Put](put.md)`) since these are read both on GitHub and in a terminal; `---` separates sections that came from different source material.
|
|
33
|
-
- **Verb/object reference** — each verb (`lib/gloo/verbs/*.rb`) and object type (`lib/gloo/objs/**/*.rb`) class defines `self.doc_data` (name, shortcut, description, syntax, parameters, result, errors, examples, notes — see `lib/gloo/docs/doc_data.rb`), rendered by the in-app interactive help shell (`help`/`?`, see `lib/gloo/docs/help_shell.rb`). When adding or changing a verb or object type, add/update its `doc_data` too.
|
|
34
|
-
- **Error handling** — report problems with `@engine.syntax_err` (couldn't be understood), `@engine.err` (understood, couldn't be done) or `@engine.warn` (done, but probably not what was meant); a question answered "no" is just a result. Never `@engine.log.error`/`log.warn` for these (scripts can't see them). "Not found" messages use `Gloo::Core::NotFound`. See `docs/language_syntax.md`, Errors and Warnings.
|
|
35
|
-
- Core-lib gems (`gloo_core_libraries`) follow the same `doc_data` pattern for their own verbs/objects; a narrative `doc/` folder per gem is planned but not yet built.
|
|
36
|
-
|
|
37
|
-
## Test Suites
|
|
38
|
-
|
|
39
|
-
### Ruby unit tests — `test/`
|
|
40
|
-
Run with: `rake test`
|
|
41
|
-
|
|
42
|
-
File naming: `test/<area>/<name>_test.rb`
|
|
43
|
-
Structure mirrors `lib/gloo/` — a test file per class/verb.
|
|
44
|
-
|
|
45
|
-
```
|
|
46
|
-
test/
|
|
47
|
-
├── verbs/ One *_test.rb per verb
|
|
48
|
-
├── objs/basic/ One *_test.rb per object type
|
|
49
|
-
├── objs/ctrl/
|
|
50
|
-
├── objs/dt/
|
|
51
|
-
├── core/
|
|
52
|
-
├── exec/
|
|
53
|
-
├── expr/
|
|
54
|
-
└── ...
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
Base classes: inherit from `GlooTest` (defined in `test/base_test.rb`).
|
|
58
|
-
|
|
59
|
-
### Gloo integration tests — `test.gloo/`
|
|
60
|
-
Written in gloo itself. Each file contains `[test]` objects with `on_test` scripts using `assert` and `refute`.
|
|
61
|
-
|
|
62
|
-
Run with `ruby lib/run.rb --test --quiet <paths...>` — **not** `bundle exec` (the Gemfile doesn't carry `gloo-test` / `gloo-md` / the other core-lib gems, so `[test]` and `load lib` fail under bundler; plain `ruby` uses the system gem env where they're installed).
|
|
63
|
-
|
|
64
|
-
- Interpreter suite only:
|
|
65
|
-
`ruby ~/dev/gloo/lib/run.rb --test --quiet ~/dev/gloo/test.gloo/`
|
|
66
|
-
- Interpreter **plus** every extension and core library:
|
|
67
|
-
```
|
|
68
|
-
ruby ~/dev/gloo/lib/run.rb --test --quiet \
|
|
69
|
-
~/dev/gloo/test.gloo/ \
|
|
70
|
-
~/gloo/extensions/{alert,beep,git,ruby,slack,stats,teams}/test/ \
|
|
71
|
-
~/dev/gloo_core_libraries/gloo-{beep,cli,db,email,md,mysql,pg,sqlite,test,web,yaml}/test/
|
|
72
|
-
```
|
|
73
|
-
(brace expansion is shell sugar for the full explicit path list)
|
|
74
|
-
|
|
75
|
-
```
|
|
76
|
-
test.gloo/
|
|
77
|
-
├── basic.test.gloo
|
|
78
|
-
├── dt/
|
|
79
|
-
├── lang/
|
|
80
|
-
├── math/
|
|
81
|
-
├── objs/
|
|
82
|
-
├── string/
|
|
83
|
-
└── verbs/
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
Test object pattern:
|
|
87
|
-
```gloo
|
|
88
|
-
tests [can] :
|
|
89
|
-
group [can] :
|
|
90
|
-
my_test [test] :
|
|
91
|
-
description [string] : What this verifies
|
|
92
|
-
on_test [script] :
|
|
93
|
-
# ... setup ...
|
|
94
|
-
eval some.value = expected
|
|
95
|
-
assert "description of passing condition"
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
## Adding a Missing Unit Test
|
|
99
|
-
|
|
100
|
-
1. Find the relevant `test/<area>/*_test.rb` file (or create one mirroring the `lib/` path)
|
|
101
|
-
2. Inherit from `GlooTest`
|
|
102
|
-
3. Run the full suite with `rake test` to verify nothing is broken
|
|
103
|
-
4. Check `test.gloo/` to see if a corresponding gloo-level integration test is also needed
|
|
9
|
+
This project is the authoritative source for gloo language documentation: the narrative pages in `docs/` and the `doc_data` on each verb and object class.
|
data/README.md
CHANGED
|
@@ -49,6 +49,8 @@ Read in order for a guided tour of the language, top to bottom, or jump straight
|
|
|
49
49
|
10. [Plugins](docs/plugins.md) — core libraries and user extensions
|
|
50
50
|
11. [A Trivial Web App](docs/web_app.md) — a two-page "Hello World" built with the `gloo-web` core library
|
|
51
51
|
|
|
52
|
+
Working on gloo itself? See [Development](docs/development.md) — source layout, running the tests, and conventions.
|
|
53
|
+
|
|
52
54
|
|
|
53
55
|
## Related Projects
|
|
54
56
|
|
data/docs/development.md
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Development
|
|
2
|
+
|
|
3
|
+
How the interpreter's source is laid out, how to run its tests, and the conventions to follow when changing it. This page is for working on gloo itself; for using gloo, start with Getting Started.
|
|
4
|
+
|
|
5
|
+
**Contents**
|
|
6
|
+
|
|
7
|
+
- Source Layout
|
|
8
|
+
- Tests
|
|
9
|
+
- Documentation
|
|
10
|
+
- Reporting Errors
|
|
11
|
+
|
|
12
|
+
## Source Layout
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
lib/gloo/
|
|
16
|
+
├── app/ Engine, application modes, logging
|
|
17
|
+
├── core/ Parser, Obj base class, Dictionary, path names (PN)
|
|
18
|
+
├── exec/ Execution engine, dispatcher, runner
|
|
19
|
+
├── expr/ Expression evaluator and operators
|
|
20
|
+
├── objs/ Object type implementations
|
|
21
|
+
│ ├── basic/ string, int, bool, container, text, decimal, untyped, alias
|
|
22
|
+
│ ├── ctrl/ script, function (ƒ), each, repeat
|
|
23
|
+
│ ├── dt/ date, time, datetime
|
|
24
|
+
│ ├── str_utils/ cipher, csrf_token, outline, password
|
|
25
|
+
│ ├── system/ ruby, file_handle, system
|
|
26
|
+
│ └── web/ http_get, http_post, json, uri, erb
|
|
27
|
+
├── verbs/ One file per verb
|
|
28
|
+
├── docs/ doc_data and the in-app help shell
|
|
29
|
+
├── shell/ Interactive shell support
|
|
30
|
+
├── persist/ File loading and saving
|
|
31
|
+
├── convert/ Type conversion
|
|
32
|
+
└── plugin/ Plugin system
|
|
33
|
+
test/ Ruby unit tests (minitest)
|
|
34
|
+
test.gloo/ Gloo-language integration tests
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Tests
|
|
38
|
+
|
|
39
|
+
There are two automated suites. Run both when making a change, and add to both: a change to the interpreter gets a unit test and a gloo test.
|
|
40
|
+
|
|
41
|
+
### Unit tests — `test/`
|
|
42
|
+
|
|
43
|
+
Standard Ruby minitest tests. The layout mirrors `lib/gloo/`, one test file per class or verb: `test/<area>/<name>_test.rb`, for example `test/verbs/show_test.rb` for `lib/gloo/verbs/show.rb`. Test classes inherit from `GlooTest` (in `test/base_test.rb`).
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
rake test
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Gloo tests — `test.gloo/`
|
|
50
|
+
|
|
51
|
+
Integration tests written in gloo itself, using the `[test]` object from the `gloo-test` core library. The suite also loads the `gloo-yaml` and `gloo-md` core libraries, so install all three first:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
gem install gloo-test gloo-yaml gloo-md
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Each `*.test.gloo` file holds `[test]` objects whose `on_test` script uses `assert` and `refute`:
|
|
58
|
+
|
|
59
|
+
```gloo
|
|
60
|
+
tests [can] :
|
|
61
|
+
group [can] :
|
|
62
|
+
my_test [test] :
|
|
63
|
+
description [string] : What this verifies
|
|
64
|
+
on_test [script] :
|
|
65
|
+
# ... setup ...
|
|
66
|
+
eval some.value = expected
|
|
67
|
+
assert "description of passing condition"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Run them with the interpreter in this repo, passing any mix of folders and single test files:
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
ruby lib/run.rb --test --quiet test.gloo/
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Use plain `ruby`, not `bundle exec`. The Gemfile doesn't include `gloo-test` or the other core libraries, so under bundler the `[test]` type and any `load lib` in a test file can't be found. Plain `ruby` uses the installed gems. If one of the core libraries is missing, gloo runs `gem install` for it in the middle of the test run, which fails without a network connection.
|
|
77
|
+
|
|
78
|
+
The same command runs the gloo tests of core libraries and extensions; add their `test/` folders to the list of paths.
|
|
79
|
+
|
|
80
|
+
## Documentation
|
|
81
|
+
|
|
82
|
+
The narrative documentation is the set of flat pages in `docs/`, linked from the README. Two conventions keep them readable both on GitHub and in a terminal:
|
|
83
|
+
|
|
84
|
+
- No markdown links between pages. Refer to another page or section in plain text instead, for example "see Put" or "see Application, Help".
|
|
85
|
+
- A `---` line separates sections that came from different source material.
|
|
86
|
+
|
|
87
|
+
Reference documentation for each verb and object type lives in the code. Every verb (`lib/gloo/verbs/*.rb`) and object type (`lib/gloo/objs/**/*.rb`) defines `self.doc_data`, a hash of name, shortcut, description, syntax, parameters, result, errors, examples and notes (see `lib/gloo/docs/doc_data.rb`). It's rendered by the in-app help shell (`help` or `?`). When adding or changing a verb or object type, add or update its `doc_data` too.
|
|
88
|
+
|
|
89
|
+
Core libraries follow the same `doc_data` pattern for their own verbs and objects.
|
|
90
|
+
|
|
91
|
+
## Reporting Errors
|
|
92
|
+
|
|
93
|
+
Gloo reports every problem in a way scripts can see (see Language, Syntax, Errors and Warnings). In the interpreter that means:
|
|
94
|
+
|
|
95
|
+
- `@engine.syntax_err` — the command couldn't be understood.
|
|
96
|
+
- `@engine.err` — the command was understood but couldn't be done.
|
|
97
|
+
- `@engine.warn` — the command was done, but probably not the way it was meant.
|
|
98
|
+
- A question whose answer is "no" is just a result, not an error.
|
|
99
|
+
|
|
100
|
+
Don't use `@engine.log.error` or `@engine.log.warn` for these; they only write to the log, and scripts can't see them. Build "not found" messages with `Gloo::Core::NotFound` (for example `NotFound.object( name )`) so they always read the same way.
|
data/docs/objects.md
CHANGED
|
@@ -4,7 +4,7 @@ Everything in gloo is an object. Strings, numbers, containers, scripts, function
|
|
|
4
4
|
|
|
5
5
|
Gloo ships with a large set of built-in object types, and core libraries and extensions can add more. This page doesn't try to cover them all — it walks through three common ones to get a feel for how objects work. For the complete list of object types, and every message each one supports, use the in-app help: enter `help` (or `?`), then `objects` to list them all, or `object {name}` for detail on one (see Application, Help).
|
|
6
6
|
|
|
7
|
-
An object's **type declares which messages it can receive** — `up` and `trim` for a `string`, `inc` for an `integer`, `run` for a `script`. An object doesn't have to have a type: with none it is `untyped` (short `any`), declared with a bare colon (`slot :`), with `[any]`, or by `create` with no `as`. An untyped object still takes the messages every object understands (`blank?`, `contains?`, `responds_to?`, `doc`, `reload`, `unload`) — just not the type-specific ones. Untyped is the right choice when you only need to hold, compare, or show a value: a generic result slot, a config value passed straight through, or a field whose kind of value changes over its life.
|
|
7
|
+
An object's **type declares which messages it can receive** — `up` and `trim` for a `string`, `inc` for an `integer`, `run` for a `script`. An object doesn't have to have a type: with none it is `untyped` (short `any`), declared with a bare colon (`slot :`), with `[any]`, or by `create` with no `as`. An untyped object still takes the messages every object understands (`blank?`, `contains?`, `responds_to?`, `doc`, `reload`, `unload`) — just not the type-specific ones. Of those, `blank?` asks about the object's simple value only, and `contains?` asks whether it has children: a container with children but no value of its own is blank, and contains. Untyped is the right choice when you only need to hold, compare, or show a value: a generic result slot, a config value passed straight through, or a field whose kind of value changes over its life.
|
|
8
8
|
|
|
9
9
|
**Contents**
|
|
10
10
|
|
data/docs/plugins.md
CHANGED
|
@@ -104,7 +104,7 @@ An extension is structured thus:
|
|
|
104
104
|
- `ext_name_ext.rb` — the extension's entry point. Loaded and registered when `load ext ext_name` runs.
|
|
105
105
|
- `src/` — the verb and/or object classes themselves, one file per class.
|
|
106
106
|
- `doc/` — narrative markdown for the extension (a `README.md` at the extension root plus optional per-object/verb `.md` files under `doc/` are the convention used by the built-in extensions — see e.g. `extensions/beep/`).
|
|
107
|
-
- `test/` — both Ruby unit tests (`*_test.rb`, minitest, same conventions as this project's own `test/` — see
|
|
107
|
+
- `test/` — both Ruby unit tests (`*_test.rb`, minitest, same conventions as this project's own `test/` — see Development, Tests) and/or a gloo-language integration test (`*.test.gloo`).
|
|
108
108
|
|
|
109
109
|
Be sure to load an extension (or core library) prior to loading a gloo file that includes object types defined in the extension.
|
|
110
110
|
|
|
@@ -374,7 +374,7 @@ Add `self.doc_data` to every verb/object class (see the `beep` and `stats` examp
|
|
|
374
374
|
|
|
375
375
|
### Testing an extension
|
|
376
376
|
|
|
377
|
-
Add a Ruby unit test per verb/object class under `test/` (
|
|
377
|
+
Add a Ruby unit test per verb/object class under `test/` (the same conventions as the interpreter's own tests, see Development, Tests — inherit from the project's `GlooTest`/`BaseEngineTest` base), and add a `*.test.gloo` integration test that loads the extension and exercises it end to end, e.g. `extensions/beep/test/beep.test.gloo`:
|
|
378
378
|
|
|
379
379
|
```gloo
|
|
380
380
|
tests [can] :
|
data/lib/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
7.0
|
|
1
|
+
7.0.2
|
data/lib/VERSION_NOTES
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
7.0.2 - 2026.10.15
|
|
2
|
+
- Fix execute on Linux/Windows; make args tests portable.
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
7.0.1 - 2026.10.02
|
|
6
|
+
- Fixes bugs exposed by changes to the gloo-test core library.
|
|
7
|
+
|
|
8
|
+
|
|
1
9
|
7.0 - 2026.10.01
|
|
2
10
|
- Error handling (and warnings) revamp.
|
|
3
11
|
- String adds index_of message.
|
|
@@ -246,7 +246,7 @@ module Gloo
|
|
|
246
246
|
|
|
247
247
|
# Is the platform Linux?
|
|
248
248
|
def msg_platform_linux?
|
|
249
|
-
return OS.
|
|
249
|
+
return OS.linux?
|
|
250
250
|
end
|
|
251
251
|
|
|
252
252
|
# Is the platform Mac?
|
|
@@ -322,7 +322,8 @@ module Gloo
|
|
|
322
322
|
'platform_windows? — Is the platform Windows?',
|
|
323
323
|
'platform_unix? — Is the platform Unix?',
|
|
324
324
|
'platform_linux? — Is the platform Linux?',
|
|
325
|
-
'platform_mac? — Is the platform Mac?'
|
|
325
|
+
'platform_mac? — Is the platform Mac?',
|
|
326
|
+
'platform_wsl? — Is the platform WSL (Linux on Windows)?'
|
|
326
327
|
],
|
|
327
328
|
:examples => <<~EXAMPLES.strip
|
|
328
329
|
> show gloo.user
|
data/lib/gloo/core/obj.rb
CHANGED
data/lib/gloo/verbs/execute.rb
CHANGED
|
@@ -25,11 +25,11 @@ module Gloo
|
|
|
25
25
|
cmd = expr.evaluate
|
|
26
26
|
@engine.log.debug "starting cmd: #{cmd}"
|
|
27
27
|
|
|
28
|
-
if OS.
|
|
28
|
+
if OS.windows?
|
|
29
|
+
system( cmd )
|
|
30
|
+
else
|
|
29
31
|
pid = fork { exec( cmd ) }
|
|
30
32
|
Process.wait pid
|
|
31
|
-
else
|
|
32
|
-
exec cmd
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
@engine.log.debug "done executing cmd: #{cmd}"
|
|
@@ -5,15 +5,17 @@
|
|
|
5
5
|
tests.dt.datetime [can] :
|
|
6
6
|
|
|
7
7
|
d [dt] :
|
|
8
|
+
# Only the now test uses this; the others set d, and tests run in random order.
|
|
9
|
+
fresh [dt] :
|
|
8
10
|
|
|
9
11
|
now [test] :
|
|
10
12
|
description [string] : Get the current datetime
|
|
11
13
|
on_test [script] :
|
|
12
|
-
check ^^.
|
|
14
|
+
check ^^.fresh for blank?
|
|
13
15
|
assert "expected new datetime to be blank"
|
|
14
16
|
|
|
15
|
-
tell ^^.
|
|
16
|
-
check ^^.
|
|
17
|
+
tell ^^.fresh to now
|
|
18
|
+
check ^^.fresh for blank?
|
|
17
19
|
refute "expected datetime to not be blank after now"
|
|
18
20
|
|
|
19
21
|
is_today [test] :
|
|
@@ -4,22 +4,33 @@
|
|
|
4
4
|
|
|
5
5
|
tests.lang.declaration [can] :
|
|
6
6
|
|
|
7
|
-
#
|
|
8
|
-
# syntax error
|
|
7
|
+
# A fixture deliberately missing the ']' after its type, loaded inside
|
|
8
|
+
# its test so the syntax error it reports belongs to that test.
|
|
9
|
+
# Loading reads the type as 'int' anyway.
|
|
10
|
+
unclosed_file [file] : /tmp/gloo_declaration_test.gloo
|
|
11
|
+
unclosed_src [text] : BEGIN
|
|
12
|
+
declaration_fixture [container] :
|
|
9
13
|
unclosed [int : 7
|
|
14
|
+
END
|
|
10
15
|
|
|
11
16
|
closed_then_colon [int]: 8
|
|
12
17
|
|
|
13
18
|
type_missing_its_closing_bracket [test] :
|
|
14
19
|
description [string] : a type missing its ']' is still read as that type, with its value.
|
|
20
|
+
expect_errors [bool] : true
|
|
15
21
|
on_test [script] :
|
|
16
|
-
|
|
22
|
+
tell ^^.unclosed_file to write ( ^^.unclosed_src )
|
|
23
|
+
load /tmp/gloo_declaration_test.gloo
|
|
24
|
+
eval declaration_fixture.unclosed = 7
|
|
17
25
|
assert "expected the value 7"
|
|
18
26
|
|
|
19
|
-
put '12' into
|
|
20
|
-
eval
|
|
27
|
+
put '12' into declaration_fixture.unclosed
|
|
28
|
+
eval declaration_fixture.unclosed = 12
|
|
21
29
|
assert "expected it to still be an integer"
|
|
22
30
|
|
|
31
|
+
tell declaration_fixture to unload
|
|
32
|
+
tell ^^.unclosed_file to delete
|
|
33
|
+
|
|
23
34
|
closed_type_followed_by_the_colon [test] :
|
|
24
35
|
description [string] : a ']' followed directly by ':' is a normal declaration.
|
|
25
36
|
on_test [script] :
|
|
@@ -25,6 +25,7 @@ tests.lang.exceptions [can] :
|
|
|
25
25
|
|
|
26
26
|
confirm_throw_fires_on_exception [test] :
|
|
27
27
|
description [string] : Confirm throw fires on_exception and populates exception_data, but does not fire on_error.
|
|
28
|
+
expect_errors [bool] : true
|
|
28
29
|
on_test [script] :
|
|
29
30
|
put false into ^^.exc_fired
|
|
30
31
|
put false into ^^.err_fired
|
|
@@ -42,6 +43,7 @@ tests.lang.exceptions [can] :
|
|
|
42
43
|
|
|
43
44
|
confirm_execution_continues_after_throw [test] :
|
|
44
45
|
description [string] : Confirm execution continues with the next line after a throw.
|
|
46
|
+
expect_errors [bool] : true
|
|
45
47
|
on_test [script] :
|
|
46
48
|
throw "boom"
|
|
47
49
|
eval 2 + 2
|
|
@@ -50,6 +52,7 @@ tests.lang.exceptions [can] :
|
|
|
50
52
|
|
|
51
53
|
confirm_on_error_still_works [test] :
|
|
52
54
|
description [string] : Confirm on_error still fires for a genuine gloo-level error, independent of on_exception.
|
|
55
|
+
expect_errors [bool] : true
|
|
53
56
|
on_test [script] :
|
|
54
57
|
put false into ^^.exc_fired
|
|
55
58
|
put false into ^^.err_fired
|
|
@@ -64,6 +67,7 @@ tests.lang.exceptions [can] :
|
|
|
64
67
|
|
|
65
68
|
confirm_missing_value_fires_on_error [test] :
|
|
66
69
|
description [string] : Using a missing object as a value is a runtime error, but asking whether it exists is not.
|
|
70
|
+
expect_errors [bool] : true
|
|
67
71
|
on_test [script] :
|
|
68
72
|
put false into ^^.err_fired
|
|
69
73
|
exists? instance ^^.no_such_value
|
|
@@ -81,6 +85,7 @@ tests.lang.exceptions [can] :
|
|
|
81
85
|
|
|
82
86
|
confirm_put_of_missing_value_keeps_target [test] :
|
|
83
87
|
description [string] : A put whose value uses a missing object leaves the target unchanged.
|
|
88
|
+
expect_errors [bool] : true
|
|
84
89
|
on_test [script] :
|
|
85
90
|
put 'keep me' into ^^.kept
|
|
86
91
|
put ^^.no_such_value into ^^.kept
|
|
@@ -89,6 +94,7 @@ tests.lang.exceptions [can] :
|
|
|
89
94
|
|
|
90
95
|
confirm_error_kind [test] :
|
|
91
96
|
description [string] : error_data.kind says whether the command couldn't be understood (syntax) or couldn't be done (runtime).
|
|
97
|
+
expect_errors [bool] : true
|
|
92
98
|
on_test [script] :
|
|
93
99
|
nosuchverb
|
|
94
100
|
eval ^^.error_data.kind = 'syntax'
|
|
@@ -100,6 +106,7 @@ tests.lang.exceptions [can] :
|
|
|
100
106
|
|
|
101
107
|
confirm_error_location [test] :
|
|
102
108
|
description [string] : error_data.location names the script and line that failed.
|
|
109
|
+
expect_errors [bool] : true
|
|
103
110
|
on_test [script] :
|
|
104
111
|
show 1
|
|
105
112
|
show ^^.no_such_value
|
|
@@ -110,6 +117,7 @@ tests.lang.exceptions [can] :
|
|
|
110
117
|
|
|
111
118
|
confirm_bad_value_is_a_warning [test] :
|
|
112
119
|
description [string] : A value that isn't really of its type is a warning, not an error; the best guess is used.
|
|
120
|
+
expect_errors [bool] : true
|
|
113
121
|
on_test [script] :
|
|
114
122
|
put false into ^^.err_fired
|
|
115
123
|
put 'x' into ^^.num
|
|
@@ -34,6 +34,7 @@ tests.lang.failures [can] :
|
|
|
34
34
|
|
|
35
35
|
invalid_json_is_an_error [test] :
|
|
36
36
|
description [string] : Pretty-printing invalid JSON fires on_error, not on_exception, and it is false.
|
|
37
|
+
expect_errors [bool] : true
|
|
37
38
|
on_test [script] :
|
|
38
39
|
put false into ^^.err_fired
|
|
39
40
|
put false into ^^.exc_fired
|
|
@@ -52,6 +53,7 @@ tests.lang.failures [can] :
|
|
|
52
53
|
|
|
53
54
|
template_syntax_error_is_an_error [test] :
|
|
54
55
|
description [string] : An erb template with a syntax error is a gloo error, and gloo keeps running.
|
|
56
|
+
expect_errors [bool] : true
|
|
55
57
|
on_test [script] :
|
|
56
58
|
put false into ^^.err_fired
|
|
57
59
|
put false into ^^.exc_fired
|
|
@@ -66,6 +68,7 @@ tests.lang.failures [can] :
|
|
|
66
68
|
|
|
67
69
|
not_a_date_is_an_error [test] :
|
|
68
70
|
description [string] : A date message on a value that isn't a date fires on_error, and it is false.
|
|
71
|
+
expect_errors [bool] : true
|
|
69
72
|
on_test [script] :
|
|
70
73
|
put '' into ^^.d
|
|
71
74
|
put false into ^^.err_fired
|
|
@@ -81,6 +84,7 @@ tests.lang.failures [can] :
|
|
|
81
84
|
|
|
82
85
|
unknown_unit_is_an_error [test] :
|
|
83
86
|
description [string] : Adding an amount with an unknown unit fires on_error, and it is false.
|
|
87
|
+
expect_errors [bool] : true
|
|
84
88
|
on_test [script] :
|
|
85
89
|
put '2026-01-01' into ^^.d
|
|
86
90
|
put false into ^^.err_fired
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
tests.lang.gloo_sys [can] :
|
|
6
6
|
|
|
7
|
+
# How many of the platform_*? checks are true.
|
|
8
|
+
platforms [int] : 0
|
|
9
|
+
|
|
7
10
|
get_platform_info [test] :
|
|
8
11
|
description [string] : Get the platform info.
|
|
9
12
|
on_test [script] :
|
|
@@ -89,16 +92,18 @@ tests.lang.gloo_sys [can] :
|
|
|
89
92
|
assert "expected screen_cols to be greater than 0"
|
|
90
93
|
|
|
91
94
|
get_platform_os [test] :
|
|
92
|
-
description [string] :
|
|
95
|
+
description [string] : Exactly one of mac, windows and linux is true, on any platform.
|
|
93
96
|
on_test [script] :
|
|
94
|
-
|
|
95
|
-
|
|
97
|
+
put 0 into ^^.platforms
|
|
98
|
+
|
|
99
|
+
eval $.platform_mac?
|
|
100
|
+
if it then tell ^^.platforms to inc
|
|
96
101
|
|
|
97
|
-
eval $.platform_windows?
|
|
98
|
-
|
|
102
|
+
eval $.platform_windows?
|
|
103
|
+
if it then tell ^^.platforms to inc
|
|
99
104
|
|
|
100
|
-
eval $.platform_linux?
|
|
101
|
-
|
|
105
|
+
eval $.platform_linux?
|
|
106
|
+
if it then tell ^^.platforms to inc
|
|
102
107
|
|
|
103
|
-
eval
|
|
104
|
-
assert "expected
|
|
108
|
+
eval ^^.platforms = 1
|
|
109
|
+
assert "expected exactly one of platform_mac, platform_windows and platform_linux to be true"
|
data/test.gloo/lang/it.test.gloo
CHANGED
|
@@ -59,6 +59,7 @@ tests.lang.it_read_only [can] :
|
|
|
59
59
|
|
|
60
60
|
message_to_it_is_an_error [test] :
|
|
61
61
|
description [string] : Sending it a message reports an error that says what to do instead.
|
|
62
|
+
expect_errors [bool] : true
|
|
62
63
|
on_test [script] :
|
|
63
64
|
put false into ^^.err_fired
|
|
64
65
|
eval 'abc'
|
|
@@ -71,6 +72,7 @@ tests.lang.it_read_only [can] :
|
|
|
71
72
|
|
|
72
73
|
put_into_it_is_an_error [test] :
|
|
73
74
|
description [string] : Putting a value into it is an error.
|
|
75
|
+
expect_errors [bool] : true
|
|
74
76
|
on_test [script] :
|
|
75
77
|
put false into ^^.err_fired
|
|
76
78
|
put 'x' into it
|
|
@@ -105,6 +107,7 @@ tests.lang.it_rule [can] :
|
|
|
105
107
|
|
|
106
108
|
failed_put_sets_it_false [test] :
|
|
107
109
|
description [string] : A put whose value can't be worked out sets it to false and keeps the target.
|
|
110
|
+
expect_errors [bool] : true
|
|
108
111
|
on_test [script] :
|
|
109
112
|
put false into ^^.err_fired
|
|
110
113
|
eval 'before'
|
|
@@ -120,6 +123,7 @@ tests.lang.it_rule [can] :
|
|
|
120
123
|
|
|
121
124
|
put_into_missing_object_sets_it_false [test] :
|
|
122
125
|
description [string] : A put into an object that doesn't exist sets it to false.
|
|
126
|
+
expect_errors [bool] : true
|
|
123
127
|
on_test [script] :
|
|
124
128
|
eval 'before'
|
|
125
129
|
put 'x' into ^^.no_such_target
|
|
@@ -141,6 +145,7 @@ tests.lang.it_rule [can] :
|
|
|
141
145
|
|
|
142
146
|
failed_function_sets_it_false [test] :
|
|
143
147
|
description [string] : A function whose on_invoke fails sets it to false.
|
|
148
|
+
expect_errors [bool] : true
|
|
144
149
|
on_test [script] :
|
|
145
150
|
eval 'before'
|
|
146
151
|
invoke ^^.failing
|
|
@@ -155,6 +160,7 @@ tests.lang.it_rule [can] :
|
|
|
155
160
|
|
|
156
161
|
message_to_missing_object_sets_it_false [test] :
|
|
157
162
|
description [string] : A message that can't be delivered leaves no stale value in it.
|
|
163
|
+
expect_errors [bool] : true
|
|
158
164
|
on_test [script] :
|
|
159
165
|
eval 'stale'
|
|
160
166
|
tell ^^.no_such_obj to get_parent
|
|
@@ -14,9 +14,13 @@ tests.lang.naming [can] :
|
|
|
14
14
|
string [string] : a type keyword as a name
|
|
15
15
|
put [string] : a verb keyword as a name
|
|
16
16
|
|
|
17
|
-
#
|
|
18
|
-
#
|
|
17
|
+
# A fixture with a deliberately nameless object, loaded inside its
|
|
18
|
+
# test so the syntax error it reports belongs to that test.
|
|
19
|
+
nameless_file [file] : /tmp/gloo_naming_test.gloo
|
|
20
|
+
nameless_src [text] : BEGIN
|
|
21
|
+
naming_fixture [container] :
|
|
19
22
|
[string] : no name given
|
|
23
|
+
END
|
|
20
24
|
|
|
21
25
|
first_of_a_duplicate_name_wins [test] :
|
|
22
26
|
description [string] : when two siblings share a name, the path always reaches the first.
|
|
@@ -47,7 +51,13 @@ tests.lang.naming [can] :
|
|
|
47
51
|
|
|
48
52
|
declaration_with_no_name_gets_a_placeholder [test] :
|
|
49
53
|
description [string] : a declaration with no name loads under the placeholder name unnamed_1.
|
|
54
|
+
expect_errors [bool] : true
|
|
50
55
|
on_test [script] :
|
|
51
|
-
|
|
56
|
+
tell ^^.nameless_file to write ( ^^.nameless_src )
|
|
57
|
+
load /tmp/gloo_naming_test.gloo
|
|
58
|
+
eval naming_fixture.unnamed_1 = 'no name given'
|
|
52
59
|
assert "expected the nameless object to be reached as unnamed_1"
|
|
53
60
|
|
|
61
|
+
tell naming_fixture to unload
|
|
62
|
+
tell ^^.nameless_file to delete
|
|
63
|
+
|
|
@@ -28,8 +28,8 @@ tests.math.div [can] :
|
|
|
28
28
|
eval 10.5 / 5 = 2.1
|
|
29
29
|
assert 'expected 10.5 / 5 = 2.1'
|
|
30
30
|
|
|
31
|
-
eval 100.5 /
|
|
32
|
-
assert 'expected 100.5 /
|
|
31
|
+
eval 100.5 / 201 = 0.5
|
|
32
|
+
assert 'expected 100.5 / 201 = 0.5'
|
|
33
33
|
|
|
34
34
|
eval 1.5 / 10.5 = 0.1
|
|
35
35
|
refute 'expected 1.5 / 10.5 != 0.1'
|
|
@@ -25,11 +25,11 @@ tests.math.mult [can] :
|
|
|
25
25
|
eval 1.5 * 5.5 = 8.25
|
|
26
26
|
assert 'expected 1.5 * 5.5 = 8.25'
|
|
27
27
|
|
|
28
|
-
eval 10.5 * 20.5 =
|
|
29
|
-
assert 'expected 10.5 * 20.5 =
|
|
28
|
+
eval 10.5 * 20.5 = 215.25
|
|
29
|
+
assert 'expected 10.5 * 20.5 = 215.25'
|
|
30
30
|
|
|
31
|
-
eval 100.5 * 200.5 =
|
|
32
|
-
assert 'expected 100.5 * 200.5 =
|
|
31
|
+
eval 100.5 * 200.5 = 20150.25
|
|
32
|
+
assert 'expected 100.5 * 200.5 = 20150.25'
|
|
33
33
|
|
|
34
34
|
eval 1.5 * 10.5 = 10
|
|
35
35
|
refute 'expected 1.5 * 10.5 != 10'
|
|
@@ -92,6 +92,7 @@ tests.objs.can_child [can] :
|
|
|
92
92
|
|
|
93
93
|
value_at_container_child [test] :
|
|
94
94
|
description [string] : child_value_at on a container child is an error, and it is false.
|
|
95
|
+
expect_errors [bool] : true
|
|
95
96
|
on_test [script] :
|
|
96
97
|
tell ^^.list to child_value_at ( 2 )
|
|
97
98
|
eval it = false
|
|
@@ -111,6 +112,7 @@ tests.objs.can_child [can] :
|
|
|
111
112
|
|
|
112
113
|
out_of_range [test] :
|
|
113
114
|
description [string] : An out-of-range index is an error, and it is false.
|
|
115
|
+
expect_errors [bool] : true
|
|
114
116
|
on_test [script] :
|
|
115
117
|
tell ^^.list to child_path_at ( 3 )
|
|
116
118
|
eval it = false
|
|
@@ -126,6 +128,7 @@ tests.objs.can_child [can] :
|
|
|
126
128
|
|
|
127
129
|
random_empty [test] :
|
|
128
130
|
description [string] : random_child_value on an empty container is an error, and it is false.
|
|
131
|
+
expect_errors [bool] : true
|
|
129
132
|
on_test [script] :
|
|
130
133
|
tell ^^.empty to random_child_value
|
|
131
134
|
eval it = false
|
|
@@ -4,9 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
tests.verbs.check [can] :
|
|
6
6
|
|
|
7
|
-
c [container] :
|
|
7
|
+
c [container] : has a value
|
|
8
8
|
a [string] : "a"
|
|
9
9
|
t [container] :
|
|
10
|
+
# Children but no simple value: blank? looks at the value only.
|
|
11
|
+
kids [container] :
|
|
12
|
+
a [string] : "a"
|
|
10
13
|
|
|
11
14
|
check_contains [test] :
|
|
12
15
|
description [string] : Check an object for containment
|
|
@@ -31,3 +34,9 @@ tests.verbs.check [can] :
|
|
|
31
34
|
|
|
32
35
|
check ^^.c.a for blank?
|
|
33
36
|
refute "expected a to not be blank"
|
|
37
|
+
|
|
38
|
+
blank_ignores_children [test] :
|
|
39
|
+
description [string] : blank? asks about the simple value only; contains? asks about children
|
|
40
|
+
on_test [script] :
|
|
41
|
+
check ^^.kids for blank?
|
|
42
|
+
assert "expected kids to be blank: it has children but no simple value"
|
|
@@ -24,6 +24,7 @@ tests.verbs.create_names [can] :
|
|
|
24
24
|
|
|
25
25
|
parenthesised_name_is_an_error [test] :
|
|
26
26
|
description [string] : create doesn't compute a name; a parenthesised one is reported and nothing is created.
|
|
27
|
+
expect_errors [bool] : true
|
|
27
28
|
on_test [script] :
|
|
28
29
|
tell ^^.list to count
|
|
29
30
|
put it into ^^.before
|
|
@@ -69,6 +69,7 @@ tests.verbs.exists_unknown_kind [can] :
|
|
|
69
69
|
|
|
70
70
|
unknown_kind_is_an_error [test] :
|
|
71
71
|
description [string] : A misspelled kind is reported, not answered false.
|
|
72
|
+
expect_errors [bool] : true
|
|
72
73
|
on_test [script] :
|
|
73
74
|
put false into ^^.err_fired
|
|
74
75
|
exists? instanse tests.verbs.exists_unknown_kind
|
|
@@ -70,6 +70,7 @@ tests.verbs.invoke [can] :
|
|
|
70
70
|
|
|
71
71
|
inline_invoke_error_test [test] :
|
|
72
72
|
description [string] : Inline invoke( ... ) reports an error for an unresolved target, same as the standalone verb.
|
|
73
|
+
expect_errors [bool] : true
|
|
73
74
|
on_test [script] :
|
|
74
75
|
put false into ^^.err_fired
|
|
75
76
|
show invoke( tests.verbs.invoke.no_such_function )
|
|
@@ -14,8 +14,9 @@ tests.verbs.load [can] :
|
|
|
14
14
|
load_lib_registers_type [test] :
|
|
15
15
|
description [string] : load lib registers that library's object types.
|
|
16
16
|
on_test [script] :
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
# TODO: once we fix the reset_state we can uncomment this part
|
|
18
|
+
# exists? object markdown
|
|
19
|
+
# refute "markdown type should not be registered before load"
|
|
19
20
|
|
|
20
21
|
load lib md
|
|
21
22
|
exists? object markdown
|
|
@@ -23,6 +24,7 @@ tests.verbs.load [can] :
|
|
|
23
24
|
|
|
24
25
|
load_no_args_errors [test] :
|
|
25
26
|
description [string] : load with no arguments fires on_error.
|
|
27
|
+
expect_errors [bool] : true
|
|
26
28
|
on_test [script] :
|
|
27
29
|
put false into ^^.err_fired
|
|
28
30
|
load
|
|
@@ -31,6 +33,7 @@ tests.verbs.load [can] :
|
|
|
31
33
|
|
|
32
34
|
load_missing_file_errors [test] :
|
|
33
35
|
description [string] : load of a file that can't be found fires on_error.
|
|
36
|
+
expect_errors [bool] : true
|
|
34
37
|
on_test [script] :
|
|
35
38
|
put false into ^^.err_fired
|
|
36
39
|
load no_such_file_xyz
|
|
@@ -163,6 +163,7 @@ END
|
|
|
163
163
|
|
|
164
164
|
extracting_a_subtree_spanning_multiple_files_is_an_error [test] :
|
|
165
165
|
description [string] : save {obj} to {path} refuses when obj's own subtree has declarations in more than one file.
|
|
166
|
+
expect_errors [bool] : true
|
|
166
167
|
on_test [script] :
|
|
167
168
|
put false into ^^.err
|
|
168
169
|
tell ^^.f to write ( ^^.fixture )
|
|
@@ -184,6 +185,7 @@ END
|
|
|
184
185
|
|
|
185
186
|
reload_discards_unsaved_changes [test] :
|
|
186
187
|
description [string] : reload throws away edits that were not saved.
|
|
188
|
+
expect_errors [bool] : true
|
|
187
189
|
on_test [script] :
|
|
188
190
|
tell ^^.f to write ( ^^.fixture )
|
|
189
191
|
load /tmp/gloo_save_test.gloo
|
|
@@ -22,6 +22,7 @@ tests.verbs.throw [can] :
|
|
|
22
22
|
|
|
23
23
|
default_message [test] :
|
|
24
24
|
description [string] : bare throw uses the default message and execution continues.
|
|
25
|
+
expect_errors [bool] : true
|
|
25
26
|
on_test [script] :
|
|
26
27
|
put '' into tests.verbs.throw.caught
|
|
27
28
|
eval false
|
|
@@ -35,6 +36,7 @@ tests.verbs.throw [can] :
|
|
|
35
36
|
|
|
36
37
|
custom_message [test] :
|
|
37
38
|
description [string] : throw evaluates its argument as the message.
|
|
39
|
+
expect_errors [bool] : true
|
|
38
40
|
on_test [script] :
|
|
39
41
|
put '' into tests.verbs.throw.caught
|
|
40
42
|
throw 'boom ' + '42'
|
|
@@ -39,6 +39,7 @@ tests.verbs.unload_no_object [can] :
|
|
|
39
39
|
|
|
40
40
|
unload_with_an_object_unloads_nothing [test] :
|
|
41
41
|
description [string] : 'unload x' reports an error, points to 'tell x to unload', and unloads nothing.
|
|
42
|
+
expect_errors [bool] : true
|
|
42
43
|
on_test [script] :
|
|
43
44
|
put false into ^^.err_fired
|
|
44
45
|
unload tests.verbs.unload_no_object.temp
|
metadata
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: gloo
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 7.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Eric Crane
|
|
8
|
+
autorequire:
|
|
8
9
|
bindir: exe
|
|
9
10
|
cert_chain: []
|
|
10
|
-
date:
|
|
11
|
+
date: 2026-10-15 00:00:00.000000000 Z
|
|
11
12
|
dependencies:
|
|
12
13
|
- !ruby/object:Gem::Dependency
|
|
13
14
|
name: bundler
|
|
@@ -265,6 +266,7 @@ files:
|
|
|
265
266
|
- bin/run
|
|
266
267
|
- bin/setup
|
|
267
268
|
- docs/application.md
|
|
269
|
+
- docs/development.md
|
|
268
270
|
- docs/getting_started.md
|
|
269
271
|
- docs/iterators.md
|
|
270
272
|
- docs/language_objects.md
|
|
@@ -510,6 +512,7 @@ licenses:
|
|
|
510
512
|
- MIT
|
|
511
513
|
metadata:
|
|
512
514
|
documentation_uri: https://github.com/ecrane/gloo
|
|
515
|
+
post_install_message:
|
|
513
516
|
rdoc_options: []
|
|
514
517
|
require_paths:
|
|
515
518
|
- lib
|
|
@@ -524,7 +527,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
524
527
|
- !ruby/object:Gem::Version
|
|
525
528
|
version: '0'
|
|
526
529
|
requirements: []
|
|
527
|
-
rubygems_version:
|
|
530
|
+
rubygems_version: 3.5.16
|
|
531
|
+
signing_key:
|
|
528
532
|
specification_version: 4
|
|
529
533
|
summary: Gloo scripting language. A scripting language built on ruby.
|
|
530
534
|
test_files: []
|