gloo 0.5.3 → 0.7.1

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 +13 -2
  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 +22 -29
  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 +46 -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
@@ -35,37 +35,6 @@ module Gloo
35
35
  return KEYWORD_SHORT
36
36
  end
37
37
 
38
- # ---------------------------------------------------------------------
39
- # Help
40
- # ---------------------------------------------------------------------
41
-
42
- #
43
- # Get help for this verb.
44
- #
45
- def self.help
46
- return <<~TEXT
47
- QUIT VERB
48
- NAME: quit
49
- SHORTCUT: q
50
-
51
- DESCRIPTION
52
- Stop running the gloo application.
53
- Cleanup and shutdown.
54
-
55
- SYNTAX
56
- quit
57
-
58
- PARAMETERS
59
- None
60
-
61
- RESULT
62
- None
63
-
64
- ERRORS
65
- None
66
- TEXT
67
- end
68
-
69
38
  end
70
39
  end
71
40
  end
@@ -12,11 +12,17 @@ module Gloo
12
12
  KEYWORD = 'run'.freeze
13
13
  KEYWORD_SHORT = 'r'.freeze
14
14
  EVALUATE_RUN = '~>'.freeze
15
+ MISSING_EXPR_ERR = 'Missing Expression!'.freeze
15
16
 
16
17
  #
17
18
  # Run the verb.
18
19
  #
19
20
  def run
21
+ if @tokens.token_count < 2
22
+ $engine.err MISSING_EXPR_ERR
23
+ return
24
+ end
25
+
20
26
  if @tokens.second == EVALUATE_RUN
21
27
  run_expression
22
28
  else
@@ -24,23 +30,6 @@ module Gloo
24
30
  end
25
31
  end
26
32
 
27
- #
28
- # Run a script specified by pathname
29
- #
30
- def run_script
31
- Gloo::Exec::Runner.run @tokens.second
32
- end
33
-
34
- #
35
- # Evaluate an expression and run that.
36
- #
37
- def run_expression
38
- return unless @tokens.token_count > 2
39
-
40
- expr = Gloo::Expr::Expression.new( @tokens.params[ 1..-1 ] )
41
- $engine.parser.run expr.evaluate
42
- end
43
-
44
33
  #
45
34
  # Get the Verb's keyword.
46
35
  #
@@ -56,34 +45,29 @@ module Gloo
56
45
  end
57
46
 
58
47
  # ---------------------------------------------------------------------
59
- # Help
48
+ # Private functions
60
49
  # ---------------------------------------------------------------------
61
50
 
51
+ private
52
+
62
53
  #
63
- # Get help for this verb.
54
+ # Run a script specified by pathname
64
55
  #
65
- def self.help
66
- return <<~TEXT
67
- RUN VERB
68
- NAME: run
69
- SHORTCUT: r
70
-
71
- DESCRIPTION
72
- Run a script or other object.
73
- This is the same as sending a 'run' message to the object.
74
-
75
- SYNTAX
76
- run <path.to.object>
77
-
78
- PARAMETERS
79
- path.to.object - Reference to the object which will be run.
56
+ def run_script
57
+ Gloo::Exec::Runner.run @tokens.second
58
+ end
80
59
 
81
- RESULT
82
- The result depends on the object that is run.
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
83
68
 
84
- ERRORS
85
- The errors depend on the object that is run.
86
- TEXT
69
+ expr = Gloo::Expr::Expression.new( @tokens.params[ 1..-1 ] )
70
+ $engine.parser.run expr.evaluate
87
71
  end
88
72
 
89
73
  end
@@ -34,39 +34,6 @@ module Gloo
34
34
  return KEYWORD_SHORT
35
35
  end
36
36
 
37
- # ---------------------------------------------------------------------
38
- # Help
39
- # ---------------------------------------------------------------------
40
-
41
- #
42
- # Get help for this verb.
43
- #
44
- def self.help
45
- return <<~TEXT
46
- SAVE VERB
47
- NAME: save
48
- SHORTCUT: >
49
-
50
- DESCRIPTION
51
- Stop running the gloo application.
52
- Cleanup and shutdown.
53
-
54
- SYNTAX
55
- save <path.to.object>
56
- Save a previously loaded object. The path will be for the
57
- root level object that was loaded earlier.
58
-
59
- PARAMETERS
60
- path.to.object - Name of the object file that is to be saved.
61
-
62
- RESULT
63
- The file is updated with the latest object state.
64
-
65
- ERRORS
66
- None
67
- TEXT
68
- end
69
-
70
37
  end
71
38
  end
72
39
  end
@@ -40,6 +40,12 @@ module Gloo
40
40
  return KEYWORD_SHORT
41
41
  end
42
42
 
43
+ # ---------------------------------------------------------------------
44
+ # Private functions
45
+ # ---------------------------------------------------------------------
46
+
47
+ private
48
+
43
49
  #
44
50
  # Get the formatted string.
45
51
  #
@@ -53,37 +59,6 @@ module Gloo
53
59
  return str
54
60
  end
55
61
 
56
- # ---------------------------------------------------------------------
57
- # Help
58
- # ---------------------------------------------------------------------
59
-
60
- #
61
- # Get help for this verb.
62
- #
63
- def self.help
64
- return <<~TEXT
65
- SHOW VERB
66
- NAME: show
67
- SHORTCUT: =
68
-
69
- DESCRIPTION
70
- Show an object's value.
71
-
72
- SYNTAX
73
- show <path.to.object>
74
-
75
- PARAMETERS
76
- path.to.object - The object that we want to see.
77
-
78
- RESULT
79
- The object's value is shown.
80
- <it> will contain the object's value.
81
-
82
- ERRORS
83
- None
84
- TEXT
85
- end
86
-
87
62
  end
88
63
  end
89
64
  end
@@ -11,21 +11,18 @@ module Gloo
11
11
  KEYWORD = 'tell'.freeze
12
12
  KEYWORD_SHORT = '->'.freeze
13
13
  TO = 'to'.freeze
14
+ OBJ_NOT_FOUND_ERR = 'Object was not found: '.freeze
15
+ UNKNOWN_MSG_ERR = 'Missing message!'.freeze
14
16
 
15
17
  #
16
18
  # Run the verb.
17
19
  #
18
20
  def run
19
- name = @tokens.second
20
- msg = @tokens.after_token( TO )
21
- pn = Gloo::Core::Pn.new name
22
- o = pn.resolve
21
+ setup_msg
22
+ return unless @msg
23
23
 
24
- if o
25
- Gloo::Exec::Dispatch.message msg, o, @params
26
- else
27
- $log.error "Could not send message to object. Bad path: #{name}"
28
- end
24
+ setup_target
25
+ dispatch_msg
29
26
  end
30
27
 
31
28
  #
@@ -43,35 +40,38 @@ module Gloo
43
40
  end
44
41
 
45
42
  # ---------------------------------------------------------------------
46
- # Help
43
+ # Private functions
47
44
  # ---------------------------------------------------------------------
48
45
 
46
+ private
47
+
49
48
  #
50
- # Get help for this verb.
49
+ # Lookup the message to send.
51
50
  #
52
- def self.help
53
- return <<~TEXT
54
- TELL VERB
55
- NAME: tell
56
- SHORTCUT: ->
57
-
58
- DESCRIPTION
59
- Send a message to an object.
60
- Ask the object to perform an action.
51
+ def setup_msg
52
+ @msg = @tokens.after_token( TO )
61
53
 
62
- SYNTAX
63
- tell <path.to.object> to <message>
64
-
65
- PARAMETERS
66
- path.to.object - The object that we want to see.
67
- message - The message to send.
54
+ $engine.err( UNKNOWN_MSG_ERR ) unless @msg
55
+ end
68
56
 
69
- RESULT
70
- The result depends on the message that is sent.
57
+ #
58
+ # Setup the target of the message.
59
+ #
60
+ def setup_target
61
+ @obj_name = @tokens.second
62
+ pn = Gloo::Core::Pn.new @obj_name
63
+ @target_obj = pn.resolve
64
+ end
71
65
 
72
- ERRORS
73
- Errors depend on the message that is sent.
74
- TEXT
66
+ #
67
+ # Dispatch the message to the target object.
68
+ #
69
+ def dispatch_msg
70
+ if @target_obj
71
+ Gloo::Exec::Dispatch.message @msg, @target_obj, @params
72
+ else
73
+ $engine.err "#{OBJ_NOT_FOUND_ERR} #{@obj_name}"
74
+ end
75
75
  end
76
76
 
77
77
  end
@@ -10,32 +10,19 @@ module Gloo
10
10
 
11
11
  KEYWORD = 'unless'.freeze
12
12
  KEYWORD_SHORT = 'if!'.freeze
13
- THEN = 'do'.freeze
13
+ DO = 'do'.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_false = false
26
- if value.count.positive?
27
- expr = Gloo::Expr::Expression.new( value )
28
- result = expr.evaluate
29
- evals_false = true if result == false
30
- evals_false = true if result.is_a?( Numeric ) && result.zero?
31
- end
32
- return unless evals_false
23
+ return unless evals_false( 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_do
39
26
  end
40
27
 
41
28
  #
@@ -53,37 +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 unless command.
61
51
  #
62
- def self.help
63
- return <<~TEXT
64
- UNLESS VERB
65
- NAME: unless
66
- SHORTCUT: if!
67
-
68
- DESCRIPTION
69
- Unless an expression is true, do something.
70
- This is the opposite of the if verb.
71
-
72
- SYNTAX
73
- unless <true> do <do>
74
-
75
- PARAMETERS
76
- true - Does the expression evaluate to true?
77
- do - Execute command if the expression is not true.
78
-
79
- RESULT
80
- Unchanged if the expression is true.
81
- If not true, then the result will be based on the command
82
- specified after the 'do' keyword.
83
-
84
- ERRORS
85
- The errors depend on the object that is run.
86
- TEXT
52
+ def value_tokens
53
+ value = @tokens.before_token( DO )
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_false( 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 == false
73
+ eval_result = true if result.is_a?( Numeric ) && result.zero?
74
+ end
75
+
76
+ return eval_result
77
+ end
78
+
79
+ #
80
+ # Run the 'do' command.
81
+ #
82
+ def run_do
83
+ cmd = @tokens.expr_after( DO )
84
+ i = $engine.parser.parse_immediate cmd
85
+ return unless i
86
+
87
+ i.run
87
88
  end
88
89
 
89
90
  end
@@ -32,36 +32,6 @@ module Gloo
32
32
  return KEYWORD_SHORT
33
33
  end
34
34
 
35
- # ---------------------------------------------------------------------
36
- # Help
37
- # ---------------------------------------------------------------------
38
-
39
- #
40
- # Get help for this verb.
41
- #
42
- def self.help
43
- return <<~TEXT
44
- VERSION VERB
45
- NAME: version
46
- SHORTCUT: v
47
-
48
- DESCRIPTION
49
- Show the application version information.
50
-
51
- SYNTAX
52
- version
53
-
54
- PARAMETERS
55
- None
56
-
57
- RESULT
58
- None
59
-
60
- ERRORS
61
- None
62
- TEXT
63
- end
64
-
65
35
  end
66
36
  end
67
37
  end