gloo 1.4.2 → 2.0.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 (131) hide show
  1. checksums.yaml +4 -4
  2. data/.DS_Store +0 -0
  3. data/.gitignore +1 -0
  4. data/gloo.gemspec +0 -2
  5. data/lib/VERSION +1 -1
  6. data/lib/dependencies.rb +4 -4
  7. data/lib/gloo/app/args.rb +112 -0
  8. data/lib/gloo/app/engine.rb +247 -0
  9. data/lib/gloo/app/engine_context.rb +25 -0
  10. data/lib/gloo/app/info.rb +20 -3
  11. data/lib/gloo/app/log.rb +73 -1
  12. data/lib/gloo/app/mode.rb +27 -0
  13. data/lib/gloo/app/platform.rb +8 -1
  14. data/lib/gloo/app/settings.rb +202 -0
  15. data/lib/gloo/convert/converter.rb +42 -0
  16. data/lib/gloo/convert/string_to_date.rb +21 -0
  17. data/lib/gloo/convert/string_to_datetime.rb +21 -0
  18. data/lib/gloo/convert/string_to_decimal.rb +20 -0
  19. data/lib/gloo/convert/string_to_integer.rb +20 -0
  20. data/lib/gloo/convert/string_to_time.rb +21 -0
  21. data/lib/gloo/core/baseo.rb +31 -0
  22. data/lib/gloo/core/dictionary.rb +245 -0
  23. data/lib/gloo/core/error.rb +61 -0
  24. data/lib/gloo/core/event_manager.rb +45 -0
  25. data/lib/gloo/core/factory.rb +211 -0
  26. data/lib/gloo/core/gloo_system.rb +267 -0
  27. data/lib/gloo/core/heap.rb +53 -0
  28. data/lib/gloo/core/here.rb +36 -0
  29. data/lib/gloo/core/it.rb +36 -0
  30. data/lib/gloo/core/literal.rb +30 -0
  31. data/lib/gloo/core/obj.rb +318 -0
  32. data/lib/gloo/core/obj_finder.rb +30 -0
  33. data/lib/gloo/core/op.rb +40 -0
  34. data/lib/gloo/core/parser.rb +60 -0
  35. data/lib/gloo/core/pn.rb +212 -0
  36. data/lib/gloo/core/tokens.rb +165 -0
  37. data/lib/gloo/core/verb.rb +87 -0
  38. data/lib/gloo/exec/action.rb +48 -0
  39. data/lib/gloo/exec/dispatch.rb +40 -0
  40. data/lib/gloo/exec/exec_env.rb +75 -0
  41. data/lib/gloo/exec/runner.rb +45 -0
  42. data/lib/gloo/exec/script.rb +50 -0
  43. data/lib/gloo/exec/stack.rb +79 -0
  44. data/lib/gloo/expr/expression.rb +119 -0
  45. data/lib/gloo/expr/l_boolean.rb +36 -0
  46. data/lib/gloo/expr/l_decimal.rb +39 -0
  47. data/lib/gloo/expr/l_integer.rb +37 -0
  48. data/lib/gloo/expr/l_string.rb +58 -0
  49. data/lib/gloo/expr/op_div.rb +22 -0
  50. data/lib/gloo/expr/op_minus.rb +22 -0
  51. data/lib/gloo/expr/op_mult.rb +22 -0
  52. data/lib/gloo/expr/op_plus.rb +24 -0
  53. data/lib/gloo/objs/basic/alias.rb +78 -0
  54. data/lib/gloo/objs/basic/boolean.rb +120 -0
  55. data/lib/gloo/objs/basic/container.rb +65 -0
  56. data/lib/gloo/objs/basic/decimal.rb +76 -0
  57. data/lib/gloo/objs/basic/integer.rb +73 -0
  58. data/lib/gloo/objs/basic/script.rb +99 -0
  59. data/lib/gloo/objs/basic/string.rb +77 -0
  60. data/lib/gloo/objs/basic/text.rb +79 -0
  61. data/lib/gloo/objs/basic/untyped.rb +41 -0
  62. data/lib/gloo/objs/cli/banner.rb +1 -1
  63. data/lib/gloo/objs/cli/bar.rb +3 -3
  64. data/lib/gloo/objs/cli/colorize.rb +1 -1
  65. data/lib/gloo/objs/cli/confirm.rb +1 -1
  66. data/lib/gloo/objs/cli/menu.rb +6 -6
  67. data/lib/gloo/objs/cli/menu_item.rb +1 -1
  68. data/lib/gloo/objs/cli/pastel.rb +1 -1
  69. data/lib/gloo/objs/cli/prompt.rb +1 -1
  70. data/lib/gloo/objs/cli/select.rb +2 -2
  71. data/lib/gloo/objs/ctrl/each.rb +279 -0
  72. data/lib/gloo/objs/ctrl/repeat.rb +108 -0
  73. data/lib/gloo/objs/data/markdown.rb +79 -0
  74. data/lib/gloo/objs/data/mysql.rb +5 -5
  75. data/lib/gloo/objs/data/query.rb +4 -4
  76. data/lib/gloo/objs/data/sqlite.rb +1 -1
  77. data/lib/gloo/objs/data/table.rb +112 -0
  78. data/lib/gloo/objs/dev/git.rb +2 -2
  79. data/lib/gloo/objs/dev/stats.rb +4 -4
  80. data/lib/gloo/objs/dt/date.rb +65 -0
  81. data/lib/gloo/objs/dt/datetime.rb +120 -0
  82. data/lib/gloo/objs/dt/dt_tools.rb +100 -0
  83. data/lib/gloo/objs/dt/time.rb +65 -0
  84. data/lib/gloo/objs/ror/erb.rb +116 -0
  85. data/lib/gloo/objs/ror/eval.rb +107 -0
  86. data/lib/gloo/objs/snd/play.rb +1 -1
  87. data/lib/gloo/objs/snd/say.rb +1 -1
  88. data/lib/gloo/objs/system/file_handle.rb +4 -4
  89. data/lib/gloo/objs/system/ssh_exec.rb +1 -1
  90. data/lib/gloo/objs/system/system.rb +1 -1
  91. data/lib/gloo/objs/web/http_get.rb +159 -0
  92. data/lib/gloo/objs/web/http_post.rb +183 -0
  93. data/lib/gloo/objs/web/json.rb +135 -0
  94. data/lib/gloo/objs/web/slack.rb +130 -0
  95. data/lib/gloo/objs/web/teams.rb +117 -0
  96. data/lib/gloo/objs/web/uri.rb +148 -0
  97. data/lib/gloo/persist/disc_mech.rb +87 -0
  98. data/lib/gloo/persist/file_loader.rb +193 -0
  99. data/lib/gloo/persist/file_saver.rb +51 -0
  100. data/lib/gloo/persist/file_storage.rb +46 -0
  101. data/lib/gloo/persist/line_splitter.rb +81 -0
  102. data/lib/gloo/persist/persist_man.rb +153 -0
  103. data/lib/gloo/utils/format.rb +21 -0
  104. data/lib/gloo/utils/stats.rb +206 -0
  105. data/lib/gloo/utils/words.rb +19 -0
  106. data/lib/gloo/verbs/alert.rb +2 -2
  107. data/lib/gloo/verbs/beep.rb +1 -1
  108. data/lib/gloo/verbs/cls.rb +1 -1
  109. data/lib/gloo/verbs/context.rb +62 -0
  110. data/lib/gloo/verbs/create.rb +68 -0
  111. data/lib/gloo/verbs/execute.rb +56 -0
  112. data/lib/gloo/verbs/files.rb +49 -0
  113. data/lib/gloo/verbs/help.rb +1 -1
  114. data/lib/gloo/verbs/if.rb +92 -0
  115. data/lib/gloo/verbs/list.rb +98 -0
  116. data/lib/gloo/verbs/load.rb +45 -0
  117. data/lib/gloo/verbs/move.rb +89 -0
  118. data/lib/gloo/verbs/put.rb +94 -0
  119. data/lib/gloo/verbs/quit.rb +40 -0
  120. data/lib/gloo/verbs/reload.rb +43 -0
  121. data/lib/gloo/verbs/run.rb +75 -0
  122. data/lib/gloo/verbs/save.rb +39 -0
  123. data/lib/gloo/verbs/show.rb +63 -0
  124. data/lib/gloo/verbs/tell.rb +80 -0
  125. data/lib/gloo/verbs/unless.rb +92 -0
  126. data/lib/gloo/verbs/unload.rb +46 -0
  127. data/lib/gloo/verbs/version.rb +3 -3
  128. data/lib/gloo/verbs/wait.rb +42 -0
  129. data/lib/gloo.rb +2 -2
  130. data/lib/run.rb +2 -2
  131. metadata +97 -22
@@ -0,0 +1,92 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
+ #
4
+ # If something is true, do something.
5
+ #
6
+
7
+ module Gloo
8
+ module Verbs
9
+ class If < Gloo::Core::Verb
10
+
11
+ KEYWORD = 'if'.freeze
12
+ KEYWORD_SHORT = 'if'.freeze
13
+ THEN = 'then'.freeze
14
+ MISSING_EXPR_ERR = 'Missing Expression!'.freeze
15
+
16
+ #
17
+ # Run the verb.
18
+ #
19
+ def run
20
+ value = value_tokens
21
+ return if value.nil?
22
+
23
+ return unless evals_true( value )
24
+
25
+ run_then
26
+ end
27
+
28
+ #
29
+ # Get the Verb's keyword.
30
+ #
31
+ def self.keyword
32
+ return KEYWORD
33
+ end
34
+
35
+ #
36
+ # Get the Verb's keyword shortcut.
37
+ #
38
+ def self.keyword_shortcut
39
+ return KEYWORD_SHORT
40
+ end
41
+
42
+ # ---------------------------------------------------------------------
43
+ # Private functions
44
+ # ---------------------------------------------------------------------
45
+
46
+ private
47
+
48
+ #
49
+ # Get the list of tokens that represent the parameters
50
+ # of the if command.
51
+ #
52
+ def value_tokens
53
+ value = @tokens.before_token( THEN )
54
+ if value && value.count > 1
55
+ # The first token is the verb, so we drop it.
56
+ value = value[ 1..-1 ]
57
+ else
58
+ @engine.err MISSING_EXPR_ERR
59
+ end
60
+
61
+ return value
62
+ end
63
+
64
+ #
65
+ # Does the given value evalute to true?
66
+ #
67
+ def evals_true( value )
68
+ eval_result = false
69
+ if value.count.positive?
70
+ expr = Gloo::Expr::Expression.new( @engine, value )
71
+ result = expr.evaluate
72
+ eval_result = true if result == true
73
+ eval_result = true if result.is_a?( Numeric ) && result != 0
74
+ end
75
+
76
+ return eval_result
77
+ end
78
+
79
+ #
80
+ # Run the 'then' command.
81
+ #
82
+ def run_then
83
+ cmd = @tokens.expr_after( THEN )
84
+ i = @engine.parser.parse_immediate cmd
85
+ return unless i
86
+
87
+ i.run
88
+ end
89
+
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,98 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
+ #
4
+ # List out an object and it's children.
5
+ #
6
+
7
+ module Gloo
8
+ module Verbs
9
+ class List < Gloo::Core::Verb
10
+
11
+ KEYWORD = 'list'.freeze
12
+ KEYWORD_SHORT = '.'.freeze
13
+ TARGET_MISSING_ERR = 'Object does not exist: '.freeze
14
+
15
+ #
16
+ # Run the verb.
17
+ #
18
+ def run
19
+ levels = determine_levels
20
+ target = self.determine_target
21
+ obj = target.resolve
22
+ if obj
23
+ show_target( obj, levels )
24
+ else
25
+ @engine.err "#{TARGET_MISSING_ERR} #{target}"
26
+ end
27
+ end
28
+
29
+ #
30
+ # Determine the target object for the show command.
31
+ #
32
+ def determine_target
33
+ return @engine.heap.context if @tokens.token_count == 1
34
+
35
+ return Gloo::Core::Pn.new( @engine, @tokens.second )
36
+ end
37
+
38
+ #
39
+ # Get the Verb's keyword.
40
+ #
41
+ def self.keyword
42
+ return KEYWORD
43
+ end
44
+
45
+ #
46
+ # Get the Verb's keyword shortcut.
47
+ #
48
+ def self.keyword_shortcut
49
+ return KEYWORD_SHORT
50
+ end
51
+
52
+ # ---------------------------------------------------------------------
53
+ # Private functions
54
+ # ---------------------------------------------------------------------
55
+
56
+ private
57
+
58
+ #
59
+ # Show the target object.
60
+ #
61
+ def show_target( obj, levels, indent = '' )
62
+ show_obj( obj, indent )
63
+ return if levels.zero?
64
+
65
+ obj.children.each do |o|
66
+ show_target( o, levels - 1, "#{indent} " )
67
+ end
68
+ end
69
+
70
+ #
71
+ # Show object in standard format.
72
+ #
73
+ def show_obj( obj, indent = ' ' )
74
+ if obj.multiline_value? && obj.value_is_array?
75
+ @engine.log.show "#{indent}#{obj.name} [#{obj.type_display}] :"
76
+ obj.value.each do |line|
77
+ @engine.log.show "#{indent} #{line}"
78
+ end
79
+ else
80
+ @engine.log.show "#{indent}#{obj.name} [#{obj.type_display}] : #{obj.value}"
81
+ end
82
+ end
83
+
84
+ #
85
+ # Determine how many levels to show.
86
+ #
87
+ def determine_levels
88
+ # Check settings for the default value.
89
+ levels = @engine.settings.list_indent
90
+ return levels if levels
91
+
92
+ # Last chance: use the default
93
+ return 1
94
+ end
95
+
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,45 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
+ #
4
+ # Save an object to a file or other persistance mechcanism.
5
+ #
6
+
7
+ module Gloo
8
+ module Verbs
9
+ class Load < Gloo::Core::Verb
10
+
11
+ KEYWORD = 'load'.freeze
12
+ KEYWORD_SHORT = '<'.freeze
13
+ MISSING_EXPR_ERR = 'Missing Expression!'.freeze
14
+
15
+ #
16
+ # Run the verb.
17
+ #
18
+ def run
19
+ fn = @tokens.second
20
+
21
+ if fn
22
+ @engine.log.debug "Getting ready to load file: #{fn}"
23
+ @engine.persist_man.load fn
24
+ else
25
+ @engine.err MISSING_EXPR_ERR
26
+ end
27
+ end
28
+
29
+ #
30
+ # Get the Verb's keyword.
31
+ #
32
+ def self.keyword
33
+ return KEYWORD
34
+ end
35
+
36
+ #
37
+ # Get the Verb's keyword shortcut.
38
+ #
39
+ def self.keyword_shortcut
40
+ return KEYWORD_SHORT
41
+ end
42
+
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,89 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
+ #
4
+ # Move an object to a new parent.
5
+ #
6
+
7
+ module Gloo
8
+ module Verbs
9
+ class Move < Gloo::Core::Verb
10
+
11
+ KEYWORD = 'move'.freeze
12
+ KEYWORD_SHORT = 'mv'.freeze
13
+ TO = 'to'.freeze
14
+ MISSING_SRC_ERR = 'Object to move was not specified!'.freeze
15
+ MISSING_SRC_OBJ_ERR = 'Could not find object to move: '.freeze
16
+ MISSING_DST_ERR = "Move' must include 'to' parent object!".freeze
17
+ MISSING_DST_OBJ_ERR = 'Could not resolve target: '.freeze
18
+
19
+ #
20
+ # Run the verb.
21
+ #
22
+ def run
23
+ dst = lookup_dst
24
+ return if dst.nil?
25
+
26
+ o = lookup_obj
27
+ return unless o
28
+
29
+ o.parent.remove_child o
30
+ dst.add_child o
31
+ end
32
+
33
+ #
34
+ # Get the Verb's keyword.
35
+ #
36
+ def self.keyword
37
+ return KEYWORD
38
+ end
39
+
40
+ #
41
+ # Get the Verb's keyword shortcut.
42
+ #
43
+ def self.keyword_shortcut
44
+ return KEYWORD_SHORT
45
+ end
46
+
47
+ # ---------------------------------------------------------------------
48
+ # Private functions
49
+ # ---------------------------------------------------------------------
50
+
51
+ private
52
+
53
+ #
54
+ # Lookup the object that we're moving.
55
+ #
56
+ def lookup_obj
57
+ arr = @tokens.before_token( TO )
58
+ if arr.count == 1
59
+ @engine.err MISSING_SRC_ERR
60
+ return
61
+ end
62
+
63
+ name = arr[ 1 ]
64
+ pn = Gloo::Core::Pn.new( @engine, name )
65
+ o = pn.resolve
66
+
67
+ @engine.err( "#{MISSING_SRC_OBJ_ERR} #{name}" ) unless o
68
+ return o
69
+ end
70
+
71
+ #
72
+ # Lookup destination, the new parent object.
73
+ #
74
+ def lookup_dst
75
+ dst = @tokens.after_token( TO )
76
+ unless dst
77
+ @engine.err MISSING_DST_ERR
78
+ return nil
79
+ end
80
+
81
+ pn = Gloo::Core::Pn.new( @engine, dst )
82
+ o = pn.resolve
83
+ @engine.err( "#{MISSING_DST_OBJ_ERR} '#{dst}'" ) unless o
84
+ return o
85
+ end
86
+
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,94 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
+ #
4
+ # Create an object, optionally of a type.
5
+ #
6
+
7
+ module Gloo
8
+ module Verbs
9
+ class Put < Gloo::Core::Verb
10
+
11
+ KEYWORD = 'put'.freeze
12
+ KEYWORD_SHORT = 'p'.freeze
13
+ INTO = 'into'.freeze
14
+ MISSING_EXPR_ERR = 'Missing Expression!'.freeze
15
+ INTO_MISSING_ERR = 'Target (into) missing!'.freeze
16
+ TARGET_ERR = 'Target could not be resolved: '.freeze
17
+
18
+ #
19
+ # Run the verb.
20
+ #
21
+ def run
22
+ value = fetch_value_tokens
23
+ return if value.nil?
24
+
25
+ target = lookup_target
26
+ return if target.nil?
27
+
28
+ update_target target, value
29
+ end
30
+
31
+ #
32
+ # Get the Verb's keyword.
33
+ #
34
+ def self.keyword
35
+ return KEYWORD
36
+ end
37
+
38
+ #
39
+ # Get the Verb's keyword shortcut.
40
+ #
41
+ def self.keyword_shortcut
42
+ return KEYWORD_SHORT
43
+ end
44
+
45
+ # ---------------------------------------------------------------------
46
+ # Private functions
47
+ # ---------------------------------------------------------------------
48
+
49
+ private
50
+
51
+ #
52
+ # Get the value that is being put.
53
+ #
54
+ def fetch_value_tokens
55
+ value = @tokens.before_token( INTO )
56
+ if value.nil? || ( value.count <= 1 )
57
+ @engine.err MISSING_EXPR_ERR
58
+ return nil
59
+ end
60
+
61
+ # The first token is the verb, so we drop it.
62
+ return value[ 1..-1 ]
63
+ end
64
+
65
+ #
66
+ # Lookup the target of the put command.
67
+ #
68
+ def lookup_target
69
+ target = @tokens.after_token( INTO )
70
+ return target if target
71
+
72
+ @engine.err INTO_MISSING_ERR
73
+ return nil
74
+ end
75
+
76
+ #
77
+ # Update the target with the new value.
78
+ #
79
+ def update_target( target, value )
80
+ pn = Gloo::Core::Pn.new( @engine, target )
81
+ o = pn.resolve
82
+ if o.nil?
83
+ @engine.err "#{TARGET_ERR} #{target}"
84
+ elsif value.count.positive?
85
+ expr = Gloo::Expr::Expression.new( @engine, value )
86
+ result = expr.evaluate
87
+ o.set_value result
88
+ @engine.heap.it.set_to result
89
+ end
90
+ end
91
+
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,40 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
+ #
4
+ # Quit the running gloo engine.
5
+ #
6
+
7
+ module Gloo
8
+ module Verbs
9
+ class Quit < Gloo::Core::Verb
10
+
11
+ KEYWORD = 'quit'.freeze
12
+ KEYWORD_SHORT = 'q'.freeze
13
+
14
+ #
15
+ # Run the verb.
16
+ #
17
+ # We'll mark the application as not running and let the
18
+ # engine stop gracefully next time through the loop.
19
+ #
20
+ def run
21
+ @engine.stop_running
22
+ end
23
+
24
+ #
25
+ # Get the Verb's keyword.
26
+ #
27
+ def self.keyword
28
+ return KEYWORD
29
+ end
30
+
31
+ #
32
+ # Get the Verb's keyword shortcut.
33
+ #
34
+ def self.keyword_shortcut
35
+ return KEYWORD_SHORT
36
+ end
37
+
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,43 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2022 Eric Crane. All rights reserved.
3
+ #
4
+ # Reload all files.
5
+ #
6
+
7
+ module Gloo
8
+ module Verbs
9
+ class Reload < Gloo::Core::Verb
10
+
11
+ KEYWORD = 'reload'.freeze
12
+ KEYWORD_SHORT = 'r!'.freeze
13
+
14
+ #
15
+ # Run the verb.
16
+ #
17
+ def run
18
+ @engine.persist_man.reload_all
19
+ end
20
+
21
+ #
22
+ # Get the Verb's keyword.
23
+ #
24
+ def self.keyword
25
+ return KEYWORD
26
+ end
27
+
28
+ #
29
+ # Get the Verb's keyword shortcut.
30
+ #
31
+ def self.keyword_shortcut
32
+ return KEYWORD_SHORT
33
+ end
34
+
35
+ # ---------------------------------------------------------------------
36
+ # Private functions
37
+ # ---------------------------------------------------------------------
38
+
39
+ private
40
+
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,75 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
+ #
4
+ # Run a script.
5
+ # Shortcut for telling a script to run.
6
+ #
7
+
8
+ module Gloo
9
+ module Verbs
10
+ class Run < Gloo::Core::Verb
11
+
12
+ KEYWORD = 'run'.freeze
13
+ KEYWORD_SHORT = 'r'.freeze
14
+ EVALUATE_RUN = '~>'.freeze
15
+ MISSING_EXPR_ERR = 'Missing Expression!'.freeze
16
+
17
+ #
18
+ # Run the verb.
19
+ #
20
+ def run
21
+ if @tokens.token_count < 2
22
+ @engine.err MISSING_EXPR_ERR
23
+ return
24
+ end
25
+
26
+ if @tokens.second == EVALUATE_RUN
27
+ run_expression
28
+ else
29
+ run_script
30
+ end
31
+ end
32
+
33
+ #
34
+ # Get the Verb's keyword.
35
+ #
36
+ def self.keyword
37
+ return KEYWORD
38
+ end
39
+
40
+ #
41
+ # Get the Verb's keyword shortcut.
42
+ #
43
+ def self.keyword_shortcut
44
+ return KEYWORD_SHORT
45
+ end
46
+
47
+ # ---------------------------------------------------------------------
48
+ # Private functions
49
+ # ---------------------------------------------------------------------
50
+
51
+ private
52
+
53
+ #
54
+ # Run a script specified by pathname
55
+ #
56
+ def run_script
57
+ Gloo::Exec::Runner.run( @engine, @tokens.second )
58
+ end
59
+
60
+ #
61
+ # Evaluate an expression and run that.
62
+ #
63
+ def run_expression
64
+ unless @tokens.token_count > 2
65
+ @engine.err MISSING_EXPR_ERR
66
+ return
67
+ end
68
+
69
+ expr = Gloo::Expr::Expression.new( @engine, @tokens.params[ 1..-1 ] )
70
+ @engine.parser.run expr.evaluate
71
+ end
72
+
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,39 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
+ #
4
+ # Save an object to a file or other persistance mechcanism.
5
+ #
6
+
7
+ module Gloo
8
+ module Verbs
9
+ class Save < Gloo::Core::Verb
10
+
11
+ KEYWORD = 'save'.freeze
12
+ KEYWORD_SHORT = '>'.freeze
13
+
14
+ #
15
+ # Run the verb.
16
+ #
17
+ def run
18
+ # TODO: Not currently using folders or keeping
19
+ # track of where the object was loaded from.
20
+ @engine.persist_man.save @tokens.second
21
+ end
22
+
23
+ #
24
+ # Get the Verb's keyword.
25
+ #
26
+ def self.keyword
27
+ return KEYWORD
28
+ end
29
+
30
+ #
31
+ # Get the Verb's keyword shortcut.
32
+ #
33
+ def self.keyword_shortcut
34
+ return KEYWORD_SHORT
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,63 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
+ #
4
+ # Show a single object's value.
5
+ #
6
+
7
+ module Gloo
8
+ module Verbs
9
+ class Show < Gloo::Core::Verb
10
+
11
+ KEYWORD = 'show'.freeze
12
+ KEYWORD_SHORT = '='.freeze
13
+
14
+ #
15
+ # Run the verb.
16
+ #
17
+ def run
18
+ if @tokens.token_count > 1
19
+ expr = Gloo::Expr::Expression.new( @engine, @tokens.params )
20
+ result = expr.evaluate
21
+ @engine.log.show get_formatted_string( result )
22
+ @engine.heap.it.set_to result
23
+ else
24
+ @engine.log.show ''
25
+ end
26
+ end
27
+
28
+ #
29
+ # Get the Verb's keyword.
30
+ #
31
+ def self.keyword
32
+ return KEYWORD
33
+ end
34
+
35
+ #
36
+ # Get the Verb's keyword shortcut.
37
+ #
38
+ def self.keyword_shortcut
39
+ return KEYWORD_SHORT
40
+ end
41
+
42
+ # ---------------------------------------------------------------------
43
+ # Private functions
44
+ # ---------------------------------------------------------------------
45
+
46
+ private
47
+
48
+ #
49
+ # Get the formatted string.
50
+ #
51
+ def get_formatted_string( str )
52
+ if @params&.token_count&.positive?
53
+ expr = Gloo::Expr::Expression.new( @engine, @params.tokens )
54
+ val = expr.evaluate
55
+ color = val.to_sym
56
+ return @engine.platform.getColorizedString( str, color )
57
+ end
58
+ return str
59
+ end
60
+
61
+ end
62
+ end
63
+ end