gloo 0.5.4 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (178) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile.lock +1 -1
  4. data/lib/gloo/app/args.rb +48 -6
  5. data/lib/gloo/app/engine.rb +60 -38
  6. data/lib/gloo/app/help.rb +137 -16
  7. data/lib/gloo/app/info.rb +3 -1
  8. data/lib/gloo/app/log.rb +23 -0
  9. data/lib/gloo/app/mode.rb +2 -0
  10. data/lib/gloo/app/settings.rb +98 -47
  11. data/lib/gloo/convert/converter.rb +35 -0
  12. data/lib/gloo/convert/string_to_datetime.rb +1 -1
  13. data/lib/gloo/convert/string_to_decimal.rb +1 -1
  14. data/lib/gloo/convert/string_to_integer.rb +1 -1
  15. data/lib/gloo/core/dictionary.rb +99 -22
  16. data/lib/gloo/core/error.rb +19 -8
  17. data/lib/gloo/core/event_manager.rb +4 -0
  18. data/lib/gloo/core/factory.rb +11 -0
  19. data/lib/gloo/core/gloo_system.rb +1 -1
  20. data/lib/gloo/core/heap.rb +11 -3
  21. data/lib/gloo/core/here.rb +36 -0
  22. data/lib/gloo/core/it.rb +6 -0
  23. data/lib/gloo/core/literal.rb +5 -0
  24. data/lib/gloo/core/obj.rb +22 -0
  25. data/lib/gloo/core/op.rb +7 -0
  26. data/lib/gloo/core/parser.rb +6 -0
  27. data/lib/gloo/core/pn.rb +38 -0
  28. data/lib/gloo/core/tokens.rb +66 -22
  29. data/lib/gloo/core/verb.rb +12 -0
  30. data/lib/gloo/exec/action.rb +48 -0
  31. data/lib/gloo/exec/dispatch.rb +15 -5
  32. data/lib/gloo/exec/exec_env.rb +74 -0
  33. data/lib/gloo/exec/runner.rb +4 -2
  34. data/lib/gloo/{core → exec}/script.rb +21 -9
  35. data/lib/gloo/exec/stack.rb +78 -0
  36. data/lib/gloo/expr/expression.rb +26 -4
  37. data/lib/gloo/expr/l_boolean.rb +6 -0
  38. data/lib/gloo/expr/l_decimal.rb +5 -0
  39. data/lib/gloo/expr/l_integer.rb +7 -0
  40. data/lib/gloo/expr/l_string.rb +7 -0
  41. data/lib/gloo/expr/op_div.rb +2 -0
  42. data/lib/gloo/expr/op_minus.rb +2 -0
  43. data/lib/gloo/expr/op_mult.rb +2 -0
  44. data/lib/gloo/expr/op_plus.rb +2 -0
  45. data/lib/gloo/help/app/application.txt +22 -0
  46. data/lib/gloo/help/app/configuration.txt +7 -0
  47. data/lib/gloo/help/app/default_help.txt +14 -0
  48. data/lib/gloo/help/app/logging.txt +16 -0
  49. data/lib/gloo/help/core/color.txt +31 -0
  50. data/lib/gloo/help/core/error.txt +33 -0
  51. data/lib/gloo/help/core/events.txt +21 -0
  52. data/lib/gloo/help/core/gloo_system.txt +54 -0
  53. data/lib/gloo/help/core/here.txt +30 -0
  54. data/lib/gloo/help/core/it.txt +23 -0
  55. data/lib/gloo/help/core/ops.txt +16 -0
  56. data/lib/gloo/help/core/pathname.txt +29 -0
  57. data/lib/gloo/help/objs/basic/alias.txt +36 -0
  58. data/lib/gloo/help/objs/basic/boolean.txt +28 -0
  59. data/lib/gloo/help/objs/basic/container.txt +33 -0
  60. data/lib/gloo/help/objs/basic/decimal.txt +28 -0
  61. data/lib/gloo/help/objs/basic/integer.txt +27 -0
  62. data/lib/gloo/help/objs/basic/script.txt +29 -0
  63. data/lib/gloo/help/objs/basic/string.txt +28 -0
  64. data/lib/gloo/help/objs/basic/text.txt +27 -0
  65. data/lib/gloo/help/objs/basic/untyped.txt +22 -0
  66. data/lib/gloo/help/objs/cli/banner.txt +49 -0
  67. data/lib/gloo/help/objs/cli/bar.txt +34 -0
  68. data/lib/gloo/help/objs/cli/colorize.txt +33 -0
  69. data/lib/gloo/help/objs/cli/confirm.txt +26 -0
  70. data/lib/gloo/help/objs/cli/menu.txt +44 -0
  71. data/lib/gloo/help/objs/cli/menu_item.txt +26 -0
  72. data/lib/gloo/help/objs/cli/pastel.txt +43 -0
  73. data/lib/gloo/help/objs/cli/prompt.txt +27 -0
  74. data/lib/gloo/help/objs/cli/select.txt +34 -0
  75. data/lib/gloo/help/objs/ctrl/each.txt +48 -0
  76. data/lib/gloo/help/objs/ctrl/repeat.txt +38 -0
  77. data/lib/gloo/help/objs/data/markdown.txt +25 -0
  78. data/lib/gloo/help/objs/data/table.txt +46 -0
  79. data/lib/gloo/help/objs/dev/git_repo.txt +35 -0
  80. data/lib/gloo/help/objs/dt/date.txt +23 -0
  81. data/lib/gloo/help/objs/dt/datetime.txt +24 -0
  82. data/lib/gloo/help/objs/dt/time.txt +23 -0
  83. data/lib/gloo/help/objs/ror/erb.txt +37 -0
  84. data/lib/gloo/help/objs/ror/eval.txt +24 -0
  85. data/lib/gloo/help/objs/snd/play.txt +23 -0
  86. data/lib/gloo/help/objs/snd/say.txt +28 -0
  87. data/lib/gloo/help/objs/system/file.txt +41 -0
  88. data/lib/gloo/help/objs/system/system.txt +32 -0
  89. data/lib/gloo/help/objs/web/http_get.txt +35 -0
  90. data/lib/gloo/help/objs/web/http_post.txt +32 -0
  91. data/lib/gloo/help/objs/web/json.txt +34 -0
  92. data/lib/gloo/help/objs/web/slack.txt +33 -0
  93. data/lib/gloo/help/objs/web/teams.txt +30 -0
  94. data/lib/gloo/help/objs/web/uri.txt +37 -0
  95. data/lib/gloo/help/verbs/alert.txt +33 -0
  96. data/lib/gloo/help/verbs/beep.txt +25 -0
  97. data/lib/gloo/help/verbs/cls.txt +24 -0
  98. data/lib/gloo/help/verbs/context.txt +43 -0
  99. data/lib/gloo/help/verbs/create.txt +33 -0
  100. data/lib/gloo/help/verbs/execute.txt +27 -0
  101. data/lib/gloo/help/verbs/help.txt +34 -0
  102. data/lib/gloo/help/verbs/if.txt +37 -0
  103. data/lib/gloo/help/verbs/list.txt +34 -0
  104. data/lib/gloo/help/verbs/load.txt +38 -0
  105. data/lib/gloo/help/verbs/move.txt +42 -0
  106. data/lib/gloo/help/verbs/put.txt +38 -0
  107. data/lib/gloo/help/verbs/quit.txt +25 -0
  108. data/lib/gloo/help/verbs/run.txt +41 -0
  109. data/lib/gloo/help/verbs/save.txt +26 -0
  110. data/lib/gloo/help/verbs/show.txt +30 -0
  111. data/lib/gloo/help/verbs/tell.txt +34 -0
  112. data/lib/gloo/help/verbs/unless.txt +38 -0
  113. data/lib/gloo/help/verbs/version.txt +32 -0
  114. data/lib/gloo/help/verbs/wait.txt +29 -0
  115. data/lib/gloo/objs/basic/alias.rb +0 -33
  116. data/lib/gloo/objs/basic/boolean.rb +6 -27
  117. data/lib/gloo/objs/basic/container.rb +0 -33
  118. data/lib/gloo/objs/basic/decimal.rb +8 -28
  119. data/lib/gloo/objs/basic/integer.rb +5 -26
  120. data/lib/gloo/objs/basic/script.rb +1 -27
  121. data/lib/gloo/objs/basic/string.rb +6 -26
  122. data/lib/gloo/objs/basic/text.rb +0 -25
  123. data/lib/gloo/objs/basic/untyped.rb +0 -26
  124. data/lib/gloo/objs/cli/banner.rb +0 -29
  125. data/lib/gloo/objs/cli/bar.rb +0 -29
  126. data/lib/gloo/objs/cli/colorize.rb +4 -34
  127. data/lib/gloo/objs/cli/confirm.rb +6 -36
  128. data/lib/gloo/objs/cli/menu.rb +6 -36
  129. data/lib/gloo/objs/cli/menu_item.rb +0 -33
  130. data/lib/gloo/objs/cli/pastel.rb +4 -27
  131. data/lib/gloo/objs/cli/prompt.rb +4 -28
  132. data/lib/gloo/objs/cli/select.rb +4 -31
  133. data/lib/gloo/objs/ctrl/each.rb +33 -33
  134. data/lib/gloo/objs/ctrl/repeat.rb +8 -29
  135. data/lib/gloo/objs/data/markdown.rb +0 -25
  136. data/lib/gloo/objs/data/table.rb +4 -32
  137. data/lib/gloo/objs/dev/git.rb +12 -30
  138. data/lib/gloo/objs/dt/date.rb +3 -25
  139. data/lib/gloo/objs/dt/datetime.rb +4 -26
  140. data/lib/gloo/objs/dt/time.rb +3 -25
  141. data/lib/gloo/objs/ror/erb.rb +11 -45
  142. data/lib/gloo/objs/ror/eval.rb +11 -38
  143. data/lib/gloo/objs/snd/play.rb +2 -25
  144. data/lib/gloo/objs/snd/say.rb +9 -31
  145. data/lib/gloo/objs/system/file_handle.rb +0 -38
  146. data/lib/gloo/objs/system/system.rb +16 -46
  147. data/lib/gloo/objs/web/http_get.rb +57 -83
  148. data/lib/gloo/objs/web/http_post.rb +8 -31
  149. data/lib/gloo/objs/web/json.rb +11 -31
  150. data/lib/gloo/objs/web/slack.rb +7 -34
  151. data/lib/gloo/objs/web/teams.rb +13 -48
  152. data/lib/gloo/objs/web/uri.rb +0 -29
  153. data/lib/gloo/persist/file_loader.rb +8 -0
  154. data/lib/gloo/persist/file_saver.rb +6 -0
  155. data/lib/gloo/persist/file_storage.rb +2 -0
  156. data/lib/gloo/persist/line_splitter.rb +2 -0
  157. data/lib/gloo/persist/persist_man.rb +6 -0
  158. data/lib/gloo/verbs/alert.rb +30 -44
  159. data/lib/gloo/verbs/beep.rb +0 -30
  160. data/lib/gloo/verbs/cls.rb +0 -30
  161. data/lib/gloo/verbs/context.rb +9 -39
  162. data/lib/gloo/verbs/create.rb +17 -32
  163. data/lib/gloo/verbs/execute.rb +52 -0
  164. data/lib/gloo/verbs/help.rb +151 -115
  165. data/lib/gloo/verbs/if.rb +46 -44
  166. data/lib/gloo/verbs/list.rb +36 -54
  167. data/lib/gloo/verbs/load.rb +8 -37
  168. data/lib/gloo/verbs/move.rb +12 -51
  169. data/lib/gloo/verbs/put.rb +28 -52
  170. data/lib/gloo/verbs/quit.rb +0 -31
  171. data/lib/gloo/verbs/run.rb +23 -39
  172. data/lib/gloo/verbs/save.rb +0 -33
  173. data/lib/gloo/verbs/show.rb +6 -31
  174. data/lib/gloo/verbs/tell.rb +31 -31
  175. data/lib/gloo/verbs/unless.rb +47 -46
  176. data/lib/gloo/verbs/version.rb +0 -30
  177. data/lib/gloo/verbs/wait.rb +0 -31
  178. metadata +79 -3
@@ -11,31 +11,18 @@ module Gloo
11
11
  KEYWORD = 'if'.freeze
12
12
  KEYWORD_SHORT = 'if'.freeze
13
13
  THEN = 'then'.freeze
14
+ MISSING_EXPR_ERR = 'Missing Expression!'.freeze
14
15
 
15
16
  #
16
17
  # Run the verb.
17
18
  #
18
19
  def run
19
- value = @tokens.before_token( THEN )
20
- if value.count > 1
21
- # The first token is the verb, so we drop it.
22
- value = value[ 1..-1 ]
23
- end
20
+ value = value_tokens
21
+ return if value.nil?
24
22
 
25
- evals_true = false
26
- if value.count.positive?
27
- expr = Gloo::Expr::Expression.new( value )
28
- result = expr.evaluate
29
- evals_true = true if result == true
30
- evals_true = true if result.is_a?( Numeric ) && result != 0
31
- end
32
- return unless evals_true
23
+ return unless evals_true( value )
33
24
 
34
- cmd = @tokens.expr_after( THEN )
35
- i = $engine.parser.parse_immediate cmd
36
- return unless i
37
-
38
- i.run
25
+ run_then
39
26
  end
40
27
 
41
28
  #
@@ -53,36 +40,51 @@ module Gloo
53
40
  end
54
41
 
55
42
  # ---------------------------------------------------------------------
56
- # Help
43
+ # Private functions
57
44
  # ---------------------------------------------------------------------
58
45
 
46
+ private
47
+
59
48
  #
60
- # Get help for this verb.
49
+ # Get the list of tokens that represent the parameters
50
+ # of the if command.
61
51
  #
62
- def self.help
63
- return <<~TEXT
64
- IF VERB
65
- NAME: if
66
- SHORTCUT: if
67
-
68
- DESCRIPTION
69
- If an expression is true then do something.
70
-
71
- SYNTAX
72
- if <true> then <do>
73
-
74
- PARAMETERS
75
- true - Does the expression evaluate to true?
76
- do - Execute command if the expression is true.
77
-
78
- RESULT
79
- Unchanged if the expression is not true.
80
- If true, then the result will be based on the command
81
- specified after the 'then' keyword.
82
-
83
- ERRORS
84
- The errors depend on the object that is run.
85
- TEXT
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( 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
86
88
  end
87
89
 
88
90
  end
@@ -10,6 +10,7 @@ module Gloo
10
10
 
11
11
  KEYWORD = 'list'.freeze
12
12
  KEYWORD_SHORT = '.'.freeze
13
+ TARGET_MISSING_ERR = 'Object does not exist: '.freeze
13
14
 
14
15
  #
15
16
  # Run the verb.
@@ -19,30 +20,44 @@ module Gloo
19
20
  target = self.determine_target
20
21
  obj = target.resolve
21
22
  if obj
22
- self.show_target( obj, levels )
23
+ show_target( obj, levels )
23
24
  else
24
- $log.warn "Object #{target} does not exist"
25
+ $engine.err "#{TARGET_MISSING_ERR} #{target}"
25
26
  end
26
27
  end
27
28
 
28
- # Determine how many levels to show.
29
- def determine_levels
30
- # Check settings for the default value.
31
- levels = $settings.list_indent
32
- return levels if levels
33
-
34
- # Last chance: use the default
35
- return 1
36
- end
37
-
29
+ #
38
30
  # Determine the target object for the show command.
31
+ #
39
32
  def determine_target
40
33
  return $engine.heap.context if @tokens.token_count == 1
41
34
 
42
35
  return Gloo::Core::Pn.new( @tokens.second )
43
36
  end
44
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
+ #
45
59
  # Show the target object.
60
+ #
46
61
  def show_target( obj, levels, indent = '' )
47
62
  show_obj( obj, indent )
48
63
  return if levels.zero?
@@ -52,7 +67,9 @@ module Gloo
52
67
  end
53
68
  end
54
69
 
70
+ #
55
71
  # Show object in standard format.
72
+ #
56
73
  def show_obj( obj, indent = ' ' )
57
74
  if obj.multiline_value? && obj.value_is_array?
58
75
  $log.show "#{indent}#{obj.name} [#{obj.type_display}] :"
@@ -65,50 +82,15 @@ module Gloo
65
82
  end
66
83
 
67
84
  #
68
- # Get the Verb's keyword.
69
- #
70
- def self.keyword
71
- return KEYWORD
72
- end
73
-
74
- #
75
- # Get the Verb's keyword shortcut.
76
- #
77
- def self.keyword_shortcut
78
- return KEYWORD_SHORT
79
- end
80
-
81
- # ---------------------------------------------------------------------
82
- # Help
83
- # ---------------------------------------------------------------------
84
-
85
- #
86
- # Get help for this verb.
85
+ # Determine how many levels to show.
87
86
  #
88
- def self.help
89
- return <<~TEXT
90
- LIST VERB
91
- NAME: list
92
- SHORTCUT: .
93
-
94
- DESCRIPTION
95
- List out objects (and children) at the current context.
96
- When a path is provided, it will be listed instead of the
97
- current context.
98
-
99
- SYNTAX
100
- list <path.to.object>
101
-
102
- PARAMETERS
103
- path.to.object - Optional path to object that will be listed.
104
- When no path is provided, the current context is used.
105
-
106
- RESULT
107
- Object and children are listed out in the CLI.
87
+ def determine_levels
88
+ # Check settings for the default value.
89
+ levels = $settings.list_indent
90
+ return levels if levels
108
91
 
109
- ERRORS
110
- None
111
- TEXT
92
+ # Last chance: use the default
93
+ return 1
112
94
  end
113
95
 
114
96
  end
@@ -10,14 +10,20 @@ module Gloo
10
10
 
11
11
  KEYWORD = 'load'.freeze
12
12
  KEYWORD_SHORT = '<'.freeze
13
+ MISSING_EXPR_ERR = 'Missing Expression!'.freeze
13
14
 
14
15
  #
15
16
  # Run the verb.
16
17
  #
17
18
  def run
18
19
  fn = @tokens.second
19
- $log.debug "Getting ready to load file: #{fn}"
20
- $engine.persist_man.load fn
20
+
21
+ if fn
22
+ $log.debug "Getting ready to load file: #{fn}"
23
+ $engine.persist_man.load fn
24
+ else
25
+ $engine.err MISSING_EXPR_ERR
26
+ end
21
27
  end
22
28
 
23
29
  #
@@ -34,41 +40,6 @@ module Gloo
34
40
  return KEYWORD_SHORT
35
41
  end
36
42
 
37
- # ---------------------------------------------------------------------
38
- # Help
39
- # ---------------------------------------------------------------------
40
-
41
- #
42
- # Get help for this verb.
43
- #
44
- def self.help
45
- return <<~TEXT
46
- LOAD VERB
47
- NAME: load
48
- SHORTCUT: <
49
-
50
- DESCRIPTION
51
- Load an object file.
52
- There are two ways to specify the file. Give either the full path and file name or use a relative path from the gloo project folder. For the latter, the extension is not needed. For the former, the
53
- file extension is necessary.
54
- Using * instead of a file name will load all gloo files in the folder.
55
-
56
- SYNTAX
57
- load <file_name>
58
-
59
- PARAMETERS
60
- file_name - Name of the object file that is to be loaded.
61
-
62
- RESULT
63
- Objects are loaded into the heap.
64
- on_load scripts are run within the loaded objects.
65
-
66
- ERRORS
67
- If the file specified can't be found or can't be loaded,
68
- an error condition will result.
69
- TEXT
70
- end
71
-
72
43
  end
73
44
  end
74
45
  end
@@ -11,6 +11,10 @@ module Gloo
11
11
  KEYWORD = 'move'.freeze
12
12
  KEYWORD_SHORT = 'mv'.freeze
13
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
14
18
 
15
19
  #
16
20
  # Run the verb.
@@ -41,28 +45,26 @@ module Gloo
41
45
  end
42
46
 
43
47
  # ---------------------------------------------------------------------
44
- # Helper functions
48
+ # Private functions
45
49
  # ---------------------------------------------------------------------
46
50
 
51
+ private
52
+
47
53
  #
48
54
  # Lookup the object that we're moving.
49
55
  #
50
56
  def lookup_obj
51
57
  arr = @tokens.before_token( TO )
52
58
  if arr.count == 1
53
- msg = 'object to move was not specified'
54
- $log.error msg, nil, $engine
59
+ $engine.err MISSING_SRC_ERR
60
+ return
55
61
  end
56
62
 
57
63
  name = arr[ 1 ]
58
64
  pn = Gloo::Core::Pn.new name
59
65
  o = pn.resolve
60
66
 
61
- unless o
62
- msg = "could not find object to move: #{name}"
63
- $log.error msg, nil, $engine
64
- end
65
-
67
+ $engine.err( "#{MISSING_SRC_OBJ_ERR} #{name}" ) unless o
66
68
  return o
67
69
  end
68
70
 
@@ -72,57 +74,16 @@ module Gloo
72
74
  def lookup_dst
73
75
  dst = @tokens.after_token( TO )
74
76
  unless dst
75
- msg = "'move' must include 'to' parent object"
76
- $log.error msg, nil, $engine
77
+ $engine.err MISSING_DST_ERR
77
78
  return nil
78
79
  end
79
80
 
80
81
  pn = Gloo::Core::Pn.new dst
81
82
  o = pn.resolve
82
- unless o
83
- msg = "could not resolve '#{dst}'"
84
- $log.error msg, nil, $engine
85
- return nil
86
- end
87
-
83
+ $engine.err( "#{MISSING_DST_OBJ_ERR} '#{dst}'" ) unless o
88
84
  return o
89
85
  end
90
86
 
91
- # ---------------------------------------------------------------------
92
- # Help
93
- # ---------------------------------------------------------------------
94
-
95
- #
96
- # Get help for this verb.
97
- #
98
- def self.help
99
- return <<~TEXT
100
- MOVE VERB
101
- NAME: move
102
- SHORTCUT: mv
103
-
104
- DESCRIPTION
105
- Move an object to a new parent.
106
-
107
- SYNTAX
108
- move <path.to.object> to <new.parent>
109
-
110
- PARAMETERS
111
- path.to.object - The object that we want to move.
112
- new.parent - The new location for the object.
113
-
114
- RESULT
115
- The object will now be in the new location.
116
-
117
- ERRORS
118
- The <path.to.object> is not specified.
119
- The <path.to.object> cannot be resolved.
120
- The <new.parent> is not specified.
121
- The <new.parent> cannot be resolved.
122
- The 'to' keyword is missing.
123
- TEXT
124
- end
125
-
126
87
  end
127
88
  end
128
89
  end
@@ -11,6 +11,9 @@ module Gloo
11
11
  KEYWORD = 'put'.freeze
12
12
  KEYWORD_SHORT = 'p'.freeze
13
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
14
17
 
15
18
  #
16
19
  # Run the verb.
@@ -22,17 +25,7 @@ module Gloo
22
25
  target = lookup_target
23
26
  return if target.nil?
24
27
 
25
- pn = Gloo::Core::Pn.new target
26
- o = pn.resolve
27
- if o.nil?
28
- msg = "could not find target of put: #{target}"
29
- $log.error msg, nil, $engine
30
- elsif value.count.positive?
31
- expr = Gloo::Expr::Expression.new( value )
32
- result = expr.evaluate
33
- o.set_value result
34
- $engine.heap.it.set_to result
35
- end
28
+ update_target target, value
36
29
  end
37
30
 
38
31
  #
@@ -50,67 +43,50 @@ module Gloo
50
43
  end
51
44
 
52
45
  # ---------------------------------------------------------------------
53
- # Helper functions
46
+ # Private functions
54
47
  # ---------------------------------------------------------------------
55
48
 
49
+ private
50
+
51
+ #
56
52
  # Get the value that is being put.
53
+ #
57
54
  def fetch_value_tokens
58
55
  value = @tokens.before_token( INTO )
59
- if value.nil?
60
- msg = "'put' must include 'into'"
61
- $log.error msg, nil, $engine
56
+ if value.nil? || ( value.count <= 1 )
57
+ $engine.err MISSING_EXPR_ERR
62
58
  return nil
63
59
  end
64
60
 
65
- if value.count > 1
66
- # The first token is the verb, so we drop it.
67
- value = value[ 1..-1 ]
68
- end
69
- return value
61
+ # The first token is the verb, so we drop it.
62
+ return value[ 1..-1 ]
70
63
  end
71
64
 
65
+ #
72
66
  # Lookup the target of the put command.
67
+ #
73
68
  def lookup_target
74
69
  target = @tokens.after_token( INTO )
75
70
  return target if target
76
71
 
77
- msg = "'put' must include 'into' target"
78
- $log.error msg, nil, $engine
72
+ $engine.err INTO_MISSING_ERR
79
73
  return nil
80
74
  end
81
75
 
82
- # ---------------------------------------------------------------------
83
- # Help
84
- # ---------------------------------------------------------------------
85
-
86
76
  #
87
- # Get help for this verb.
77
+ # Update the target with the new value.
88
78
  #
89
- def self.help
90
- return <<~TEXT
91
- PUT VERB
92
- NAME: put
93
- SHORTCUT: p
94
-
95
- DESCRIPTION
96
- Put a value into an object.
97
- The value is the result of an expression.
98
-
99
- SYNTAX
100
- put <expression> into <dst.path>
101
-
102
- PARAMETERS
103
- expression - The expression that is evaluated.
104
- dst.path - The path to the destination object.
105
-
106
- RESULT
107
- <it> will contain the result of the evaluation.
108
-
109
- ERRORS
110
- The destination is not specified.
111
- The destination cannot be resolved.
112
- The 'into' keyword is missing.
113
- TEXT
79
+ def update_target( target, value )
80
+ pn = Gloo::Core::Pn.new 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( value )
86
+ result = expr.evaluate
87
+ o.set_value result
88
+ $engine.heap.it.set_to result
89
+ end
114
90
  end
115
91
 
116
92
  end