gloo 0.3.0 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/.DS_Store +0 -0
  3. data/.rubocop.yml +73 -0
  4. data/Gemfile +2 -2
  5. data/Gemfile.lock +86 -83
  6. data/Rakefile +7 -6
  7. data/bin/console +4 -4
  8. data/gloo.gemspec +22 -18
  9. data/lib/gloo.rb +6 -6
  10. data/lib/gloo/app/args.rb +30 -31
  11. data/lib/gloo/app/engine.rb +80 -30
  12. data/lib/gloo/app/help.rb +17 -11
  13. data/lib/gloo/app/info.rb +3 -3
  14. data/lib/gloo/app/log.rb +17 -17
  15. data/lib/gloo/app/mode.rb +4 -4
  16. data/lib/gloo/app/settings.rb +51 -41
  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/core/baseo.rb +7 -7
  21. data/lib/gloo/core/dictionary.rb +30 -27
  22. data/lib/gloo/core/error.rb +50 -0
  23. data/lib/gloo/core/event_manager.rb +17 -23
  24. data/lib/gloo/core/factory.rb +149 -39
  25. data/lib/gloo/core/gloo_system.rb +121 -54
  26. data/lib/gloo/core/heap.rb +15 -13
  27. data/lib/gloo/core/it.rb +5 -5
  28. data/lib/gloo/core/literal.rb +7 -7
  29. data/lib/gloo/core/obj.rb +138 -79
  30. data/lib/gloo/core/obj_finder.rb +9 -14
  31. data/lib/gloo/core/op.rb +8 -8
  32. data/lib/gloo/core/parser.rb +27 -26
  33. data/lib/gloo/core/pn.rb +68 -52
  34. data/lib/gloo/core/script.rb +7 -7
  35. data/lib/gloo/core/tokens.rb +39 -41
  36. data/lib/gloo/core/verb.rb +30 -19
  37. data/lib/gloo/exec/dispatch.rb +30 -0
  38. data/lib/gloo/exec/runner.rb +43 -0
  39. data/lib/gloo/expr/expression.rb +36 -43
  40. data/lib/gloo/expr/l_boolean.rb +7 -6
  41. data/lib/gloo/expr/l_decimal.rb +34 -0
  42. data/lib/gloo/expr/l_integer.rb +5 -4
  43. data/lib/gloo/expr/l_string.rb +13 -15
  44. data/lib/gloo/expr/op_div.rb +5 -5
  45. data/lib/gloo/expr/op_minus.rb +5 -5
  46. data/lib/gloo/expr/op_mult.rb +5 -5
  47. data/lib/gloo/expr/op_plus.rb +7 -7
  48. data/lib/gloo/objs/basic/alias.rb +111 -0
  49. data/lib/gloo/objs/basic/boolean.rb +63 -38
  50. data/lib/gloo/objs/basic/container.rb +71 -12
  51. data/lib/gloo/objs/basic/decimal.rb +96 -0
  52. data/lib/gloo/objs/basic/integer.rb +45 -16
  53. data/lib/gloo/objs/basic/script.rb +62 -38
  54. data/lib/gloo/objs/basic/string.rb +47 -15
  55. data/lib/gloo/objs/basic/text.rb +69 -21
  56. data/lib/gloo/objs/basic/untyped.rb +35 -10
  57. data/lib/gloo/objs/cli/banner.rb +137 -0
  58. data/lib/gloo/objs/cli/bar.rb +141 -0
  59. data/lib/gloo/objs/cli/colorize.rb +54 -24
  60. data/lib/gloo/objs/cli/confirm.rb +63 -29
  61. data/lib/gloo/objs/cli/menu.rb +236 -0
  62. data/lib/gloo/objs/cli/menu_item.rb +128 -0
  63. data/lib/gloo/objs/cli/pastel.rb +120 -0
  64. data/lib/gloo/objs/cli/prompt.rb +73 -31
  65. data/lib/gloo/objs/cli/select.rb +153 -0
  66. data/lib/gloo/objs/ctrl/each.rb +128 -61
  67. data/lib/gloo/objs/ctrl/repeat.rb +129 -0
  68. data/lib/gloo/objs/data/markdown.rb +109 -0
  69. data/lib/gloo/objs/data/table.rb +168 -0
  70. data/lib/gloo/objs/dev/git.rb +98 -64
  71. data/lib/gloo/objs/dt/date.rb +72 -0
  72. data/lib/gloo/objs/dt/datetime.rb +84 -0
  73. data/lib/gloo/objs/dt/time.rb +72 -0
  74. data/lib/gloo/objs/ror/erb.rb +82 -41
  75. data/lib/gloo/objs/ror/eval.rb +73 -31
  76. data/lib/gloo/objs/snd/play.rb +71 -0
  77. data/lib/gloo/objs/snd/say.rb +120 -0
  78. data/lib/gloo/objs/system/file_handle.rb +129 -48
  79. data/lib/gloo/objs/system/system.rb +84 -38
  80. data/lib/gloo/objs/web/http_get.rb +103 -46
  81. data/lib/gloo/objs/web/http_post.rb +70 -44
  82. data/lib/gloo/objs/web/json.rb +155 -0
  83. data/lib/gloo/objs/web/slack.rb +89 -58
  84. data/lib/gloo/objs/web/teams.rb +88 -53
  85. data/lib/gloo/objs/web/uri.rb +160 -0
  86. data/lib/gloo/persist/file_loader.rb +95 -85
  87. data/lib/gloo/persist/file_saver.rb +12 -12
  88. data/lib/gloo/persist/file_storage.rb +15 -15
  89. data/lib/gloo/persist/line_splitter.rb +79 -0
  90. data/lib/gloo/persist/persist_man.rb +63 -39
  91. data/lib/gloo/utils/words.rb +2 -2
  92. data/lib/gloo/verbs/alert.rb +67 -16
  93. data/lib/gloo/verbs/beep.rb +70 -0
  94. data/lib/gloo/verbs/cls.rb +67 -0
  95. data/lib/gloo/verbs/context.rb +61 -21
  96. data/lib/gloo/verbs/create.rb +52 -21
  97. data/lib/gloo/verbs/help.rb +186 -27
  98. data/lib/gloo/verbs/if.rb +55 -21
  99. data/lib/gloo/verbs/list.rb +55 -24
  100. data/lib/gloo/verbs/load.rb +47 -12
  101. data/lib/gloo/verbs/move.rb +128 -0
  102. data/lib/gloo/verbs/put.rb +90 -34
  103. data/lib/gloo/verbs/quit.rb +43 -12
  104. data/lib/gloo/verbs/run.rb +63 -18
  105. data/lib/gloo/verbs/save.rb +45 -10
  106. data/lib/gloo/verbs/show.rb +56 -22
  107. data/lib/gloo/verbs/tell.rb +45 -13
  108. data/lib/gloo/verbs/unless.rb +56 -21
  109. data/lib/gloo/verbs/version.rb +42 -12
  110. data/lib/gloo/verbs/wait.rb +73 -0
  111. data/lib/run.rb +5 -5
  112. metadata +90 -12
@@ -7,63 +7,222 @@
7
7
  module Gloo
8
8
  module Verbs
9
9
  class Help < Gloo::Core::Verb
10
-
11
- KEYWORD = 'help'
12
- KEYWORD_SHORT = '?'
13
10
 
14
- #
11
+ KEYWORD = 'help'.freeze
12
+ KEYWORD_SHORT = '?'.freeze
13
+
14
+ DISPATCH = {
15
+ settings: 'show_settings',
16
+ verb: 'show_verbs',
17
+ verbs: 'show_verbs',
18
+ v: 'show_verbs',
19
+ obj: 'show_objs',
20
+ object: 'show_objs',
21
+ objects: 'show_objs',
22
+ o: 'show_objs'
23
+ }.freeze
24
+
25
+ #
15
26
  # Run the verb.
16
- #
27
+ #
17
28
  def run
18
29
  opts = @tokens.second if @tokens
19
-
20
- if opts && opts.strip.downcase == 'verbs'
21
- show_verbs
22
- elsif opts && opts.strip.downcase == 'objects'
23
- show_objs
30
+ opts = opts.strip.downcase if opts
31
+
32
+ if opts
33
+ self.dispatch opts
34
+ else
35
+ show_default
36
+ end
37
+ end
38
+
39
+ #
40
+ # Dispatch the help to the right place.
41
+ #
42
+ def dispatch( opts )
43
+ cmd = DISPATCH[ opts.to_sym ]
44
+ if cmd
45
+ send cmd
24
46
  else
25
- $engine.run_help( true )
47
+ entity_help opts
48
+ end
49
+ rescue
50
+ report_help_error opts
51
+ end
52
+
53
+ #
54
+ # Dispatch the help command to a verb or object
55
+ # if we can find one matching the request.
56
+ #
57
+ def entity_help( opts )
58
+ return if try_verb_help opts
59
+ return if try_object_help opts
60
+
61
+ report_help_error opts
62
+ end
63
+
64
+ #
65
+ # See if there is a verb we can show help
66
+ # information about.
67
+ #
68
+ def try_verb_help( opts )
69
+ if $engine.dictionary.verb?( opts )
70
+ t = $engine.dictionary.find_verb( opts )
71
+ out = t.send 'help'
72
+ self.show_output out
73
+ return true
74
+ end
75
+
76
+ return false
77
+ end
78
+
79
+ #
80
+ # See if there is a verb we can show help
81
+ # information about.
82
+ #
83
+ def try_object_help( opts )
84
+ if $engine.dictionary.obj?( opts )
85
+ t = $engine.dictionary.find_obj( opts )
86
+ out = t.send 'help'
87
+ self.show_output out
88
+ return true
26
89
  end
90
+
91
+ return false
92
+ end
93
+
94
+ #
95
+ # Lookup the opts in the dispatch table.
96
+ #
97
+ def lookup_opts( opts )
98
+ return DISPATCH[ opts.to_sym ]
27
99
  end
28
-
29
- #
100
+
101
+ #
102
+ # Report an error with the inline help.
103
+ #
104
+ def report_help_error( opts )
105
+ msg = "Help command '#{opts}' could not be found"
106
+ $log.warn msg
107
+ $engine.heap.error.set_to msg
108
+ end
109
+
110
+ #
111
+ # If no parameter is given, show the default help page.
112
+ #
113
+ def show_default
114
+ $engine.run_help( true )
115
+ end
116
+
117
+ #
118
+ # Show application settings.
119
+ #
120
+ def show_settings
121
+ $settings.show
122
+ end
123
+
124
+ #
30
125
  # List the verbs
31
- #
126
+ #
32
127
  def show_verbs
33
- return if $engine.args.quiet?
128
+ out = self.get_verb_list
129
+ self.show_output out
130
+ end
34
131
 
35
- puts "Verbs:"
132
+ #
133
+ # Get the text for the list of verbs.
134
+ #
135
+ def get_verb_list
136
+ out = "Verbs:\n"
36
137
  $engine.dictionary.get_verbs.each do |v|
37
- puts " \t #{v.keyword_shortcut} \t #{v.keyword}"
138
+ out << " #{v.keyword_shortcut} - #{v.keyword}\n"
38
139
  end
140
+ return out
39
141
  end
40
142
 
41
- #
143
+ #
42
144
  # List the object types
43
- #
145
+ #
44
146
  def show_objs
45
- return if $engine.args.quiet?
147
+ out = self.get_obj_list
148
+ self.show_output out
149
+ end
46
150
 
47
- puts "Object Types:"
151
+ #
152
+ # Get the text for the list of verbs.
153
+ #
154
+ def get_obj_list
155
+ out = "Object Types:\n"
48
156
  $engine.dictionary.get_obj_types.each do |v|
49
- puts " \t #{v.short_typename} \t #{v.typename}"
157
+ out << " #{v.short_typename} - #{v.typename}\n"
50
158
  end
159
+ return out
160
+ end
161
+
162
+ #
163
+ # Write output to it and show it unless we are in
164
+ # silent mode.
165
+ #
166
+ def show_output( out )
167
+ $engine.heap.it.set_to out
168
+ puts out unless $engine.args.quiet?
51
169
  end
52
-
53
- #
170
+
171
+ #
54
172
  # Get the Verb's keyword.
55
- #
173
+ #
56
174
  def self.keyword
57
175
  return KEYWORD
58
176
  end
59
177
 
60
- #
178
+ #
61
179
  # Get the Verb's keyword shortcut.
62
- #
180
+ #
63
181
  def self.keyword_shortcut
64
182
  return KEYWORD_SHORT
65
183
  end
66
184
 
185
+ # ---------------------------------------------------------------------
186
+ # Help
187
+ # ---------------------------------------------------------------------
188
+
189
+ #
190
+ # Get help for this verb.
191
+ #
192
+ def self.help
193
+ return <<~TEXT
194
+ HELP VERB
195
+ NAME: helps
196
+ SHORTCUT: ?
197
+
198
+ DESCRIPTION
199
+ Show information about the application.
200
+ The help command can also be used to show a list of objects,
201
+ verbs, or to show detail about a single object or a
202
+ single verb.
203
+
204
+ SYNTAX
205
+ help <about>
206
+
207
+ PARAMETERS
208
+ about - Optional parameter.
209
+ If no parameter is given, shows the default help screen
210
+ settings - Show application settings
211
+ verbs - List available verbs
212
+ objects - List available objects
213
+ <verb> - Look up detail about a verb
214
+ <object> - Look up detail about an object
215
+
216
+ RESULT
217
+ The help screen will be shown with relevant information.
218
+ <it> will also contain the help text.
219
+
220
+ ERRORS
221
+ Trying to access a help topic that does not exist will result
222
+ in an error.
223
+ TEXT
224
+ end
225
+
67
226
  end
68
227
  end
69
228
  end
@@ -7,50 +7,84 @@
7
7
  module Gloo
8
8
  module Verbs
9
9
  class If < Gloo::Core::Verb
10
-
11
- KEYWORD = 'if'
12
- KEYWORD_SHORT = 'if'
13
- THEN = 'then'
14
-
15
- #
10
+
11
+ KEYWORD = 'if'.freeze
12
+ KEYWORD_SHORT = 'if'.freeze
13
+ THEN = 'then'.freeze
14
+
15
+ #
16
16
  # Run the verb.
17
- #
17
+ #
18
18
  def run
19
19
  value = @tokens.before_token( THEN )
20
20
  if value.count > 1
21
21
  # The first token is the verb, so we drop it.
22
- value = value[1..-1]
22
+ value = value[ 1..-1 ]
23
23
  end
24
24
 
25
25
  evals_true = false
26
- if value.count > 0
26
+ if value.count.positive?
27
27
  expr = Gloo::Expr::Expression.new( value )
28
28
  result = expr.evaluate
29
29
  evals_true = true if result == true
30
+ evals_true = true if result.is_a?( Numeric ) && result != 0
30
31
  end
31
-
32
- if evals_true
33
- cmd = @tokens.expr_after( THEN )
34
- i = $engine.parser.parse_immediate cmd
35
- return unless i
36
- i.run
37
- end
32
+ return unless evals_true
33
+
34
+ cmd = @tokens.expr_after( THEN )
35
+ i = $engine.parser.parse_immediate cmd
36
+ return unless i
37
+
38
+ i.run
38
39
  end
39
-
40
- #
40
+
41
+ #
41
42
  # Get the Verb's keyword.
42
- #
43
+ #
43
44
  def self.keyword
44
45
  return KEYWORD
45
46
  end
46
47
 
47
- #
48
+ #
48
49
  # Get the Verb's keyword shortcut.
49
- #
50
+ #
50
51
  def self.keyword_shortcut
51
52
  return KEYWORD_SHORT
52
53
  end
53
54
 
55
+ # ---------------------------------------------------------------------
56
+ # Help
57
+ # ---------------------------------------------------------------------
58
+
59
+ #
60
+ # Get help for this verb.
61
+ #
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
86
+ end
87
+
54
88
  end
55
89
  end
56
90
  end
@@ -7,13 +7,13 @@
7
7
  module Gloo
8
8
  module Verbs
9
9
  class List < Gloo::Core::Verb
10
-
11
- KEYWORD = 'list'
12
- KEYWORD_SHORT = '.'
13
10
 
14
- #
11
+ KEYWORD = 'list'.freeze
12
+ KEYWORD_SHORT = '.'.freeze
13
+
14
+ #
15
15
  # Run the verb.
16
- #
16
+ #
17
17
  def run
18
18
  levels = determine_levels
19
19
  target = self.determine_target
@@ -30,33 +30,31 @@ module Gloo
30
30
  # Check settings for the default value.
31
31
  levels = $settings.list_indent
32
32
  return levels if levels
33
-
33
+
34
34
  # Last chance: use the default
35
35
  return 1
36
36
  end
37
-
37
+
38
38
  # Determine the target object for the show command.
39
39
  def determine_target
40
- if @tokens.token_count == 1
41
- return $engine.heap.context
42
- else
43
- return Gloo::Core::Pn.new( @tokens.second )
44
- end
40
+ return $engine.heap.context if @tokens.token_count == 1
41
+
42
+ return Gloo::Core::Pn.new( @tokens.second )
45
43
  end
46
44
 
47
45
  # Show the target object.
48
- def show_target( obj, levels, indent="" )
46
+ def show_target( obj, levels, indent = '' )
49
47
  show_obj( obj, indent )
50
-
51
- return if levels == 0
52
- obj.children.each do |o|
48
+ return if levels.zero?
49
+
50
+ obj.children.each do |o|
53
51
  show_target( o, levels - 1, "#{indent} " )
54
52
  end
55
53
  end
56
-
54
+
57
55
  # Show object in standard format.
58
- def show_obj obj, indent=" "
59
- if obj.has_multiline_value? && obj.value_is_array?
56
+ def show_obj( obj, indent = ' ' )
57
+ if obj.multiline_value? && obj.value_is_array?
60
58
  $log.show "#{indent}#{obj.name} [#{obj.type_display}] :"
61
59
  obj.value.each do |line|
62
60
  $log.show "#{indent} #{line}"
@@ -65,21 +63,54 @@ module Gloo
65
63
  $log.show "#{indent}#{obj.name} [#{obj.type_display}] : #{obj.value}"
66
64
  end
67
65
  end
68
-
69
- #
66
+
67
+ #
70
68
  # Get the Verb's keyword.
71
- #
69
+ #
72
70
  def self.keyword
73
71
  return KEYWORD
74
72
  end
75
73
 
76
- #
74
+ #
77
75
  # Get the Verb's keyword shortcut.
78
- #
76
+ #
79
77
  def self.keyword_shortcut
80
78
  return KEYWORD_SHORT
81
79
  end
82
80
 
81
+ # ---------------------------------------------------------------------
82
+ # Help
83
+ # ---------------------------------------------------------------------
84
+
85
+ #
86
+ # Get help for this verb.
87
+ #
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.
108
+
109
+ ERRORS
110
+ None
111
+ TEXT
112
+ end
113
+
83
114
  end
84
115
  end
85
116
  end