gloo 3.1.1 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/gloo.gemspec +1 -0
- data/lib/VERSION +1 -1
- data/lib/VERSION_NOTES +13 -0
- data/lib/gloo/app/log.rb +46 -6
- data/lib/gloo/app/platform.rb +7 -1
- data/lib/gloo/app/running_app.rb +42 -1
- data/lib/gloo/convert/falseclass_to_integer.rb +20 -0
- data/lib/gloo/convert/nilclass_to_date.rb +21 -0
- data/lib/gloo/convert/nilclass_to_datetime.rb +21 -0
- data/lib/gloo/convert/nilclass_to_integer.rb +21 -0
- data/lib/gloo/convert/nilclass_to_string.rb +21 -0
- data/lib/gloo/convert/nilclass_to_time.rb +21 -0
- data/lib/gloo/convert/trueclass_to_integer.rb +20 -0
- data/lib/gloo/core/error.rb +7 -0
- data/lib/gloo/core/it.rb +7 -0
- data/lib/gloo/core/obj.rb +41 -1
- data/lib/gloo/core/parser.rb +6 -3
- data/lib/gloo/exec/exec_env.rb +4 -0
- data/lib/gloo/exec/script.rb +9 -1
- data/lib/gloo/objs/basic/container.rb +18 -2
- data/lib/gloo/objs/basic/integer.rb +1 -0
- data/lib/gloo/objs/cli/menu.rb +9 -3
- data/lib/gloo/objs/{basic → ctrl}/function.rb +12 -0
- data/lib/gloo/objs/data/markdown.rb +60 -2
- data/lib/gloo/objs/data/mysql.rb +35 -7
- data/lib/gloo/objs/data/pg.rb +8 -0
- data/lib/gloo/objs/data/query.rb +66 -11
- data/lib/gloo/objs/data/query_result.rb +22 -1
- data/lib/gloo/objs/data/sqlite.rb +17 -2
- data/lib/gloo/objs/data/table.rb +143 -4
- data/lib/gloo/objs/web/json.rb +2 -0
- data/lib/gloo/objs/web_svr/element.rb +13 -5
- data/lib/gloo/objs/web_svr/page.rb +44 -2
- data/lib/gloo/objs/web_svr/partial.rb +7 -2
- data/lib/gloo/objs/web_svr/svr.rb +71 -4
- data/lib/gloo/verbs/break.rb +44 -0
- data/lib/gloo/verbs/create.rb +6 -0
- data/lib/gloo/verbs/invoke.rb +80 -0
- data/lib/gloo/verbs/log.rb +26 -5
- data/lib/gloo/verbs/redirect.rb +54 -6
- data/lib/gloo/web_svr/asset.rb +51 -23
- data/lib/gloo/web_svr/handler.rb +4 -2
- data/lib/gloo/web_svr/request.rb +35 -2
- data/lib/gloo/web_svr/routing/resource_router.rb +47 -0
- data/lib/gloo/web_svr/routing/router.rb +218 -0
- data/lib/gloo/web_svr/routing/show_routes.rb +98 -0
- data/lib/gloo/web_svr/server.rb +10 -2
- data/lib/gloo/web_svr/table_renderer.rb +147 -0
- data/lib/gloo/web_svr/web_method.rb +54 -0
- metadata +31 -4
- data/lib/gloo/web_svr/router.rb +0 -179
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 02f90941d4a489efde1a15b50d55c85af80e1ac02e012102644a21613ce23e90
|
4
|
+
data.tar.gz: 3216f0732a0e59b258453ce5d929f751477a264586e73f668ced1332cb601d61
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b68948e64413281d9a1f51542888b6818adf28adfb0a625e0c8415c596600207365d761a6c5ebe36c5cebbeb6ab7ee6a6244dc1e8f215b58f5b7000909032d18
|
7
|
+
data.tar.gz: 9cef0e42026158497bf424828e691958a196ff7a6cd65771dff504a59c2a205691b997485e7cd1b50e8882d349076b0d8f8b8564f794d953021cf2e4a2310667
|
data/gloo.gemspec
CHANGED
data/lib/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.
|
1
|
+
3.3.0
|
data/lib/VERSION_NOTES
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
3.3.0 - 2024.08.16
|
2
|
+
- Adds nil converters to string and integer.
|
3
|
+
- Adds render to markdown object to convert to html
|
4
|
+
- Adds invoke verb to call a function from a script
|
5
|
+
- Web updates: singular name conventions
|
6
|
+
|
7
|
+
|
8
|
+
3.2.0 - 2024.07.07
|
9
|
+
- Update with more web server functionality, http methods, resource routing
|
10
|
+
- Expands query with additional html table support
|
11
|
+
- Other web additions and expansion
|
12
|
+
|
13
|
+
|
1
14
|
3.1.1 - 2024.04.26
|
2
15
|
- Clean build
|
3
16
|
|
data/lib/gloo/app/log.rb
CHANGED
@@ -17,6 +17,8 @@ module Gloo
|
|
17
17
|
ERROR = 'error'.freeze
|
18
18
|
LEVELS = [ DEBUG, INFO, WARN, ERROR ].freeze
|
19
19
|
|
20
|
+
CLEARED = "\n\n --- Log files cleared. --- \n\n".freeze
|
21
|
+
|
20
22
|
LOG_FILE = 'gloo.log'.freeze
|
21
23
|
ERROR_FILE = 'error.log'.freeze
|
22
24
|
|
@@ -46,15 +48,32 @@ module Gloo
|
|
46
48
|
# Create the default [file] logger.
|
47
49
|
#
|
48
50
|
def create_loggers
|
49
|
-
|
50
|
-
@logger = Logger.new( f )
|
51
|
+
@logger = Logger.new( log_file )
|
51
52
|
@logger.level = Logger::DEBUG
|
52
53
|
|
53
|
-
|
54
|
-
@error = Logger.new( err )
|
54
|
+
@error = Logger.new( err_file )
|
55
55
|
@error.level = Logger::WARN
|
56
56
|
end
|
57
57
|
|
58
|
+
# ---------------------------------------------------------------------
|
59
|
+
# Files
|
60
|
+
# ---------------------------------------------------------------------
|
61
|
+
|
62
|
+
#
|
63
|
+
# Get the log file.
|
64
|
+
#
|
65
|
+
def log_file
|
66
|
+
return File.join( @engine.settings.log_path, LOG_FILE )
|
67
|
+
end
|
68
|
+
|
69
|
+
#
|
70
|
+
# Get the error log file.
|
71
|
+
#
|
72
|
+
def err_file
|
73
|
+
return File.join( @engine.settings.log_path, ERROR_FILE )
|
74
|
+
end
|
75
|
+
|
76
|
+
|
58
77
|
# ---------------------------------------------------------------------
|
59
78
|
# Static Helpers
|
60
79
|
# ---------------------------------------------------------------------
|
@@ -67,6 +86,21 @@ module Gloo
|
|
67
86
|
return LEVELS.include? str.strip.downcase
|
68
87
|
end
|
69
88
|
|
89
|
+
# ---------------------------------------------------------------------
|
90
|
+
# Log file clearing
|
91
|
+
# ---------------------------------------------------------------------
|
92
|
+
|
93
|
+
#
|
94
|
+
# Clear the log files.
|
95
|
+
#
|
96
|
+
def clear
|
97
|
+
File.write( log_file, CLEARED )
|
98
|
+
File.write( err_file, CLEARED )
|
99
|
+
|
100
|
+
create_loggers
|
101
|
+
end
|
102
|
+
|
103
|
+
|
70
104
|
# ---------------------------------------------------------------------
|
71
105
|
# Standard Output
|
72
106
|
# ---------------------------------------------------------------------
|
@@ -74,8 +108,14 @@ module Gloo
|
|
74
108
|
#
|
75
109
|
# Show a message unless we're in quite mode.
|
76
110
|
#
|
77
|
-
def show( msg )
|
78
|
-
|
111
|
+
def show( msg, color=nil )
|
112
|
+
return if @quiet
|
113
|
+
|
114
|
+
if color
|
115
|
+
puts ColorizedString[ msg ].colorize( color.to_sym )
|
116
|
+
else
|
117
|
+
puts msg
|
118
|
+
end
|
79
119
|
end
|
80
120
|
|
81
121
|
# ---------------------------------------------------------------------
|
data/lib/gloo/app/platform.rb
CHANGED
@@ -35,7 +35,13 @@ module Gloo
|
|
35
35
|
#
|
36
36
|
def show( msg, md=false, page=false )
|
37
37
|
if md
|
38
|
-
|
38
|
+
# 2024.08.16 - TTY::Markdown.parse msg was not working.
|
39
|
+
# Tried with redcarpet and it was not working either.
|
40
|
+
# So just leaving it for now. Not sure I even really need it.
|
41
|
+
# TODO: Revisit and clean up.
|
42
|
+
|
43
|
+
# msg = TTY::Markdown.parse msg
|
44
|
+
# msg = Gloo::Objs::Markdown.md_2_manpage( msg )
|
39
45
|
end
|
40
46
|
|
41
47
|
if page
|
data/lib/gloo/app/running_app.rb
CHANGED
@@ -10,7 +10,7 @@ module Gloo
|
|
10
10
|
module App
|
11
11
|
class RunningApp
|
12
12
|
|
13
|
-
attr_reader :obj
|
13
|
+
attr_reader :obj, :db_time
|
14
14
|
|
15
15
|
#
|
16
16
|
# Set up the running app for the given object.
|
@@ -19,6 +19,8 @@ module Gloo
|
|
19
19
|
@engine = engine
|
20
20
|
@log = @engine.log
|
21
21
|
@obj = obj
|
22
|
+
|
23
|
+
@db_clients = {}
|
22
24
|
end
|
23
25
|
|
24
26
|
#
|
@@ -36,6 +38,45 @@ module Gloo
|
|
36
38
|
@log.debug "running app stopped for #{@obj.pn}"
|
37
39
|
end
|
38
40
|
|
41
|
+
|
42
|
+
# ---------------------------------------------------------------------
|
43
|
+
# DB function timer
|
44
|
+
# ---------------------------------------------------------------------
|
45
|
+
|
46
|
+
#
|
47
|
+
# Add the given time to the db time.
|
48
|
+
#
|
49
|
+
def add_db_time time
|
50
|
+
@db_time = 0 unless @db_time
|
51
|
+
@db_time += time
|
52
|
+
end
|
53
|
+
|
54
|
+
#
|
55
|
+
# Reset the db time to zero
|
56
|
+
#
|
57
|
+
def reset_db_time
|
58
|
+
@db_time = 0
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
# ---------------------------------------------------------------------
|
63
|
+
# Cached Database Connections
|
64
|
+
# ---------------------------------------------------------------------
|
65
|
+
|
66
|
+
#
|
67
|
+
# Cache the given DB client for the given object.
|
68
|
+
#
|
69
|
+
def cache_db_client( obj, client )
|
70
|
+
@db_clients[ obj.pn ] = client
|
71
|
+
end
|
72
|
+
|
73
|
+
#
|
74
|
+
# Get the DB client for the given object.
|
75
|
+
#
|
76
|
+
def db_client_for_obj( obj )
|
77
|
+
return @db_clients[ obj.pn ]
|
78
|
+
end
|
79
|
+
|
39
80
|
end
|
40
81
|
end
|
41
82
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Author:: Eric Crane (mailto:eric.crane@mac.com)
|
2
|
+
# Copyright:: Copyright (c) 2024 Eric Crane. All rights reserved.
|
3
|
+
#
|
4
|
+
# Conversion tool: FALSE to Integer.
|
5
|
+
#
|
6
|
+
|
7
|
+
module Gloo
|
8
|
+
module Convert
|
9
|
+
class FalseClassToInteger
|
10
|
+
|
11
|
+
#
|
12
|
+
# Convert the given FALSE value to an integer.
|
13
|
+
#
|
14
|
+
def convert( value )
|
15
|
+
return 0
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Author:: Eric Crane (mailto:eric.crane@mac.com)
|
2
|
+
# Copyright:: Copyright (c) 2024 Eric Crane. All rights reserved.
|
3
|
+
#
|
4
|
+
# Conversion tool: Nil to Date.
|
5
|
+
#
|
6
|
+
require 'chronic'
|
7
|
+
|
8
|
+
module Gloo
|
9
|
+
module Convert
|
10
|
+
class NilClassToDate
|
11
|
+
|
12
|
+
#
|
13
|
+
# Convert a nil to a date.
|
14
|
+
#
|
15
|
+
def convert( value )
|
16
|
+
return Chronic.parse( '' )
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Author:: Eric Crane (mailto:eric.crane@mac.com)
|
2
|
+
# Copyright:: Copyright (c) 2024 Eric Crane. All rights reserved.
|
3
|
+
#
|
4
|
+
# Conversion tool: Nil to DateTime.
|
5
|
+
#
|
6
|
+
require 'chronic'
|
7
|
+
|
8
|
+
module Gloo
|
9
|
+
module Convert
|
10
|
+
class NilClassToDateTime
|
11
|
+
|
12
|
+
#
|
13
|
+
# Convert a nil to a date.
|
14
|
+
#
|
15
|
+
def convert( value )
|
16
|
+
return Chronic.parse( '' )
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Author:: Eric Crane (mailto:eric.crane@mac.com)
|
2
|
+
# Copyright:: Copyright (c) 2024 Eric Crane. All rights reserved.
|
3
|
+
#
|
4
|
+
# Conversion tool: Nil to Integer.
|
5
|
+
#
|
6
|
+
require 'chronic'
|
7
|
+
|
8
|
+
module Gloo
|
9
|
+
module Convert
|
10
|
+
class NilClassToInteger
|
11
|
+
|
12
|
+
#
|
13
|
+
# Convert a nil to a string.
|
14
|
+
#
|
15
|
+
def convert( value )
|
16
|
+
return 0
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Author:: Eric Crane (mailto:eric.crane@mac.com)
|
2
|
+
# Copyright:: Copyright (c) 2024 Eric Crane. All rights reserved.
|
3
|
+
#
|
4
|
+
# Conversion tool: Nil to String.
|
5
|
+
#
|
6
|
+
require 'chronic'
|
7
|
+
|
8
|
+
module Gloo
|
9
|
+
module Convert
|
10
|
+
class NilClassToString
|
11
|
+
|
12
|
+
#
|
13
|
+
# Convert a nil to a string.
|
14
|
+
#
|
15
|
+
def convert( value )
|
16
|
+
return ''
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Author:: Eric Crane (mailto:eric.crane@mac.com)
|
2
|
+
# Copyright:: Copyright (c) 2024 Eric Crane. All rights reserved.
|
3
|
+
#
|
4
|
+
# Conversion tool: Nil to Time.
|
5
|
+
#
|
6
|
+
require 'chronic'
|
7
|
+
|
8
|
+
module Gloo
|
9
|
+
module Convert
|
10
|
+
class NilClassToTime
|
11
|
+
|
12
|
+
#
|
13
|
+
# Convert a nil to a date.
|
14
|
+
#
|
15
|
+
def convert( value )
|
16
|
+
return Chronic.parse( '' )
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Author:: Eric Crane (mailto:eric.crane@mac.com)
|
2
|
+
# Copyright:: Copyright (c) 2024 Eric Crane. All rights reserved.
|
3
|
+
#
|
4
|
+
# Conversion tool: TRUE to Integer.
|
5
|
+
#
|
6
|
+
|
7
|
+
module Gloo
|
8
|
+
module Convert
|
9
|
+
class TrueClassToInteger
|
10
|
+
|
11
|
+
#
|
12
|
+
# Convert the given TRUE value to an integer.
|
13
|
+
#
|
14
|
+
def convert( value )
|
15
|
+
return 1
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/gloo/core/error.rb
CHANGED
data/lib/gloo/core/it.rb
CHANGED
data/lib/gloo/core/obj.rb
CHANGED
@@ -137,6 +137,21 @@ module Gloo
|
|
137
137
|
return self.value.to_s.strip.empty?
|
138
138
|
end
|
139
139
|
|
140
|
+
#
|
141
|
+
# Is this an alias to another object?
|
142
|
+
#
|
143
|
+
def is_alias?
|
144
|
+
return self.type_display == Gloo::Objs::Alias.typename
|
145
|
+
end
|
146
|
+
|
147
|
+
#
|
148
|
+
# Is this a function object?
|
149
|
+
#
|
150
|
+
def is_function?
|
151
|
+
return self.type_display == Gloo::Objs::Function.typename
|
152
|
+
end
|
153
|
+
|
154
|
+
|
140
155
|
# ---------------------------------------------------------------------
|
141
156
|
# Children
|
142
157
|
# ---------------------------------------------------------------------
|
@@ -193,7 +208,7 @@ module Gloo
|
|
193
208
|
return o if name.downcase == o.name.downcase
|
194
209
|
end
|
195
210
|
|
196
|
-
if
|
211
|
+
if is_alias?
|
197
212
|
ln = Gloo::Core::Pn.new( @engine, self.value )
|
198
213
|
redirect = ln.resolve
|
199
214
|
return redirect.find_child( name )
|
@@ -201,6 +216,16 @@ module Gloo
|
|
201
216
|
return nil
|
202
217
|
end
|
203
218
|
|
219
|
+
#
|
220
|
+
# Get the index of the child with the given name.
|
221
|
+
#
|
222
|
+
def child_index( name )
|
223
|
+
@children.each_with_index do |o, i|
|
224
|
+
return i if name.downcase == o.name.downcase
|
225
|
+
end
|
226
|
+
return nil
|
227
|
+
end
|
228
|
+
|
204
229
|
#
|
205
230
|
# Delete all children from the container.
|
206
231
|
#
|
@@ -300,6 +325,21 @@ module Gloo
|
|
300
325
|
@engine.persist_man.reload self
|
301
326
|
end
|
302
327
|
|
328
|
+
|
329
|
+
# ---------------------------------------------------------------------
|
330
|
+
# Render
|
331
|
+
# ---------------------------------------------------------------------
|
332
|
+
|
333
|
+
#
|
334
|
+
# Render the object.
|
335
|
+
# By default this is just the object's value.
|
336
|
+
# The render_ƒ is 'render_html', 'render_text', 'render_json', etc.
|
337
|
+
#
|
338
|
+
def render render_ƒ
|
339
|
+
return self.value.to_s
|
340
|
+
end
|
341
|
+
|
342
|
+
|
303
343
|
# ---------------------------------------------------------------------
|
304
344
|
# Help
|
305
345
|
# ---------------------------------------------------------------------
|
data/lib/gloo/core/parser.rb
CHANGED
@@ -20,8 +20,11 @@ module Gloo
|
|
20
20
|
#
|
21
21
|
# Parse a command from the immediate execution context.
|
22
22
|
#
|
23
|
-
def parse_immediate(
|
24
|
-
|
23
|
+
def parse_immediate( full_cmd )
|
24
|
+
# Break the full command into verb and params
|
25
|
+
cmd, params = split_params full_cmd
|
26
|
+
|
27
|
+
# Params are the parenthetical part of the command at the end
|
25
28
|
params = Gloo::Core::Tokens.new( params ) if params
|
26
29
|
tokens = Gloo::Core::Tokens.new( cmd )
|
27
30
|
dic = Gloo::Core::Dictionary.instance
|
@@ -42,7 +45,7 @@ module Gloo
|
|
42
45
|
if i && cmd.strip.end_with?( ')' )
|
43
46
|
pstr = cmd[ i + 1..-1 ]
|
44
47
|
params = pstr.strip[ 0..-2 ] if pstr
|
45
|
-
cmd = cmd[ 0, i
|
48
|
+
cmd = cmd[ 0, i].strip
|
46
49
|
end
|
47
50
|
return cmd, params
|
48
51
|
end
|
data/lib/gloo/exec/exec_env.rb
CHANGED
@@ -10,6 +10,7 @@ module Gloo
|
|
10
10
|
class ExecEnv
|
11
11
|
|
12
12
|
attr_accessor :verbs, :actions, :scripts, :here
|
13
|
+
attr_reader :running_script
|
13
14
|
|
14
15
|
VERB_STACK = 'verbs'.freeze
|
15
16
|
ACTION_STACK = 'actions'.freeze
|
@@ -22,6 +23,7 @@ module Gloo
|
|
22
23
|
def initialize( engine )
|
23
24
|
@engine = engine
|
24
25
|
@engine.log.debug 'exec env intialized...'
|
26
|
+
@running_script = nil
|
25
27
|
|
26
28
|
@verbs = Gloo::Exec::Stack.new( @engine, VERB_STACK )
|
27
29
|
@actions = Gloo::Exec::Stack.new( @engine, ACTION_STACK )
|
@@ -43,6 +45,7 @@ module Gloo
|
|
43
45
|
#
|
44
46
|
def push_script( script )
|
45
47
|
@scripts.push script
|
48
|
+
@running_script = script
|
46
49
|
@here.push script.obj
|
47
50
|
end
|
48
51
|
|
@@ -51,6 +54,7 @@ module Gloo
|
|
51
54
|
#
|
52
55
|
def pop_script
|
53
56
|
@scripts.pop
|
57
|
+
@running_script = @scripts.stack.last
|
54
58
|
@here.pop
|
55
59
|
end
|
56
60
|
|
data/lib/gloo/exec/script.rb
CHANGED
@@ -9,13 +9,13 @@ module Gloo
|
|
9
9
|
class Script
|
10
10
|
|
11
11
|
attr_accessor :obj
|
12
|
-
|
13
12
|
#
|
14
13
|
# Set up the script.
|
15
14
|
#
|
16
15
|
def initialize( engine, obj )
|
17
16
|
@engine = engine
|
18
17
|
@obj = obj
|
18
|
+
@break_out = false
|
19
19
|
end
|
20
20
|
|
21
21
|
#
|
@@ -30,6 +30,7 @@ module Gloo
|
|
30
30
|
@engine.parser.run @obj.value
|
31
31
|
elsif @obj.value.is_a? Array
|
32
32
|
@obj.value.each do |line|
|
33
|
+
break if @break_out
|
33
34
|
@engine.parser.run line
|
34
35
|
end
|
35
36
|
end
|
@@ -45,6 +46,13 @@ module Gloo
|
|
45
46
|
return @obj.pn
|
46
47
|
end
|
47
48
|
|
49
|
+
#
|
50
|
+
# Stop running this script.
|
51
|
+
#
|
52
|
+
def break_out
|
53
|
+
@break_out = true
|
54
|
+
end
|
55
|
+
|
48
56
|
end
|
49
57
|
end
|
50
58
|
end
|
@@ -33,7 +33,7 @@ module Gloo
|
|
33
33
|
# Get a list of message names that this object receives.
|
34
34
|
#
|
35
35
|
def self.messages
|
36
|
-
return super + %w[count delete_children show_key_value_table]
|
36
|
+
return super + %w[count delete_children child_exists show_key_value_table]
|
37
37
|
end
|
38
38
|
|
39
39
|
#
|
@@ -57,9 +57,25 @@ module Gloo
|
|
57
57
|
#
|
58
58
|
def msg_show_key_value_table
|
59
59
|
data = self.children.map { |o| [ o.name, o.value ] }
|
60
|
-
|
60
|
+
|
61
|
+
# TODO: this doesn't work:
|
62
|
+
# @engine.platform.show_table nil, data, title
|
61
63
|
end
|
62
64
|
|
65
|
+
#
|
66
|
+
# Check to see if there is a child with the given name.
|
67
|
+
#
|
68
|
+
def msg_child_exists
|
69
|
+
if @params&.token_count&.positive?
|
70
|
+
expr = Gloo::Expr::Expression.new( @engine, @params.tokens )
|
71
|
+
data = expr.evaluate
|
72
|
+
end
|
73
|
+
return unless data
|
74
|
+
|
75
|
+
val = self.contains_child?( data )
|
76
|
+
@engine.heap.it.set_to val
|
77
|
+
return val
|
78
|
+
end
|
63
79
|
end
|
64
80
|
end
|
65
81
|
end
|
data/lib/gloo/objs/cli/menu.rb
CHANGED
@@ -68,7 +68,10 @@ module Gloo
|
|
68
68
|
#
|
69
69
|
def add_loop_child
|
70
70
|
o = find_child LOOP
|
71
|
-
|
71
|
+
if o
|
72
|
+
o.set_value true
|
73
|
+
return
|
74
|
+
end
|
72
75
|
|
73
76
|
fac = @engine.factory
|
74
77
|
fac.create_bool LOOP, true, self
|
@@ -324,7 +327,7 @@ module Gloo
|
|
324
327
|
# Run the selected command.
|
325
328
|
#
|
326
329
|
def run_command( cmd )
|
327
|
-
@engine.log.
|
330
|
+
@engine.log.info "Menu Command: #{cmd}"
|
328
331
|
obj = find_cmd cmd
|
329
332
|
|
330
333
|
if obj
|
@@ -335,15 +338,18 @@ module Gloo
|
|
335
338
|
s.run
|
336
339
|
else
|
337
340
|
if cmd == '?'
|
341
|
+
@engine.log.debug 'Showing options'
|
338
342
|
show_options
|
339
343
|
elsif cmd == 'q!'
|
340
|
-
@engine.log.
|
344
|
+
@engine.log.debug 'Quitting Gloo'
|
341
345
|
@engine.stop_running
|
342
346
|
elsif cmd == 'qq'
|
347
|
+
@engine.log.debug 'Quitting to top level menu'
|
343
348
|
pop_to_top_level_menu
|
344
349
|
elsif cmd.starts_with? ':'
|
345
350
|
gloo_cmd = cmd[1..-1].strip
|
346
351
|
if gloo_cmd.blank?
|
352
|
+
@engine.log.debug 'Quitting all menus and dropping into Gloo'
|
347
353
|
quit_all_menus
|
348
354
|
else
|
349
355
|
@engine.log.debug "Running Gloo command: #{gloo_cmd}"
|
@@ -14,6 +14,7 @@ module Gloo
|
|
14
14
|
|
15
15
|
# Events
|
16
16
|
ON_INVOKE = 'on_invoke'.freeze
|
17
|
+
AFTER_INVOKE = 'after_invoke'.freeze
|
17
18
|
|
18
19
|
# Parameters to the function invocation.
|
19
20
|
PARAMS = 'params'.freeze
|
@@ -132,6 +133,16 @@ module Gloo
|
|
132
133
|
Gloo::Exec::Dispatch.message( @engine, 'run', o )
|
133
134
|
end
|
134
135
|
|
136
|
+
#
|
137
|
+
# Run the after invoke script if there is one.
|
138
|
+
#
|
139
|
+
def run_after_invoke
|
140
|
+
o = find_child AFTER_INVOKE
|
141
|
+
return unless o
|
142
|
+
|
143
|
+
Gloo::Exec::Dispatch.message( @engine, 'run', o )
|
144
|
+
end
|
145
|
+
|
135
146
|
|
136
147
|
# ---------------------------------------------------------------------
|
137
148
|
# Messages
|
@@ -147,6 +158,7 @@ module Gloo
|
|
147
158
|
run_on_invoke
|
148
159
|
return_value = result
|
149
160
|
@engine.heap.it.set_to return_value
|
161
|
+
run_after_invoke
|
150
162
|
|
151
163
|
return return_value
|
152
164
|
end
|