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,35 +11,27 @@ module Gloo
11
11
  KEYWORD = 'alert'.freeze
12
12
  KEYWORD_SHORT = '!'.freeze
13
13
 
14
+ MISSING_EXPR_ERR = 'Missing Expression!'.freeze
15
+ NO_RESULT_ERR = 'Expression evaluated with no result!'.freeze
16
+
14
17
  #
15
18
  # Run the verb.
16
19
  #
17
20
  def run
18
- return unless @tokens.token_count > 1
21
+ unless @tokens.token_count > 1
22
+ $engine.err MISSING_EXPR_ERR
23
+ return
24
+ end
19
25
 
20
26
  expr = Gloo::Expr::Expression.new( @tokens.params )
21
27
  result = expr.evaluate
22
- $engine.heap.it.set_to result
23
- self.post_alert result
24
- end
25
-
26
- #
27
- # Post the alert for the specific platform.
28
- # Notice is not posted if we're in quiet mode.
29
- #
30
- def post_alert( msg )
31
- return if $engine.args.quiet?
32
28
 
33
- post_osx msg
34
- end
35
-
36
- #
37
- # Post the alert on the Mac OSX.
38
- #
39
- def post_osx( msg )
40
- cmd1 = '/usr/bin/osascript -e "display notification \"'
41
- cmd2 = '\" with title \"Gloo\" "'
42
- system( cmd1 + msg.to_s + cmd2 )
29
+ if result
30
+ $engine.heap.it.set_to result
31
+ post_alert result
32
+ else
33
+ $engine.err NO_RESULT_ERR
34
+ end
43
35
  end
44
36
 
45
37
  #
@@ -57,35 +49,29 @@ module Gloo
57
49
  end
58
50
 
59
51
  # ---------------------------------------------------------------------
60
- # Help
52
+ # Private functions
61
53
  # ---------------------------------------------------------------------
62
54
 
55
+ private
56
+
63
57
  #
64
- # Get help for this verb.
58
+ # Post the alert for the specific platform.
59
+ # Notice is not posted if we're in quiet mode.
65
60
  #
66
- def self.help
67
- return <<~TEXT
68
- ALERT VERB
69
- NAME: alert
70
- SHORTCUT: !
71
-
72
- DESCRIPTION
73
- Show a pop-up notification.
74
- This has only been implemented for the Mac OSX as of yet.
75
-
76
- SYNTAX
77
- alert <messsage>
78
-
79
- PARAMETERS
80
- messsage - The message that will be displayed in the alert.
61
+ def post_alert( msg )
62
+ $log.info msg
63
+ return if $engine.args.quiet?
81
64
 
82
- RESULT
83
- On the Mac, a notification will popup on screen.
84
- <it> will be set to the message.
65
+ post_osx msg
66
+ end
85
67
 
86
- ERRORS
87
- None
88
- TEXT
68
+ #
69
+ # Post the alert on the Mac OSX.
70
+ #
71
+ def post_osx( msg )
72
+ cmd1 = '/usr/bin/osascript -e "display notification \"'
73
+ cmd2 = '\" with title \"Gloo\" "'
74
+ system( cmd1 + msg.to_s + cmd2 )
89
75
  end
90
76
 
91
77
  end
@@ -35,36 +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
- BEEP VERB
48
- NAME: beep
49
- SHORTCUT: b
50
-
51
- DESCRIPTION
52
- Play a standard system beep sound.
53
-
54
- SYNTAX
55
- beep
56
-
57
- PARAMETERS
58
- None
59
-
60
- RESULT
61
- None
62
-
63
- ERRORS
64
- None
65
- TEXT
66
- end
67
-
68
38
  end
69
39
  end
70
40
  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
- CLS VERB
45
- NAME: cls
46
- SHORTCUT: cls
47
-
48
- DESCRIPTION
49
- Clear the console screen.
50
-
51
- SYNTAX
52
- cls
53
-
54
- PARAMETERS
55
- None
56
-
57
- RESULT
58
- The screen is cleared and cursor set to the top.
59
-
60
- ERRORS
61
- None
62
- TEXT
63
- end
64
-
65
35
  end
66
36
  end
67
37
  end
@@ -20,16 +20,6 @@ module Gloo
20
20
  show_context
21
21
  end
22
22
 
23
- #
24
- # Set the context to the given path.
25
- #
26
- def set_context
27
- path = @tokens.second
28
- $engine.heap.context.set_to path
29
- $engine.heap.it.set_to path
30
- $log.debug "Context set to #{$engine.heap.context}"
31
- end
32
-
33
23
  #
34
24
  # Show the current context.
35
25
  #
@@ -52,39 +42,19 @@ module Gloo
52
42
  end
53
43
 
54
44
  # ---------------------------------------------------------------------
55
- # Help
45
+ # Private functions
56
46
  # ---------------------------------------------------------------------
57
47
 
48
+ private
49
+
58
50
  #
59
- # Get help for this verb.
51
+ # Set the context to the given path.
60
52
  #
61
- def self.help
62
- return <<~TEXT
63
- CONTEXT VERB
64
- NAME: context
65
- SHORTCUT: @
66
-
67
- DESCRIPTION
68
- Get or set the current context.
69
- When no parameter is provided, the context will be shown.
70
- Whe the optional path paramter is provided, the context will
71
- be set to that path.
72
- Use 'context root' to set the context back to the root level.
73
-
74
- SYNTAX
75
- context <path.to.new.context>
76
-
77
- PARAMETERS
78
- path.to.new.context - Optional. The path to the new context.
79
-
80
- RESULT
81
- Context is optionally set.
82
- <it> will be set to the new context path when we are changing context.
83
- Context is show in either case.
84
-
85
- ERRORS
86
- None
87
- TEXT
53
+ def set_context
54
+ path = @tokens.second
55
+ $engine.heap.context.set_to path
56
+ $engine.heap.it.set_to path
57
+ $log.debug "Context set to #{$engine.heap.context}"
88
58
  end
89
59
 
90
60
  end
@@ -12,6 +12,7 @@ module Gloo
12
12
  KEYWORD_SHORT = '`'.freeze
13
13
  AS = 'as'.freeze
14
14
  VAL = ':'.freeze
15
+ NO_NAME_ERR = 'Object name is missing!'.freeze
15
16
 
16
17
  #
17
18
  # Run the verb.
@@ -21,13 +22,11 @@ module Gloo
21
22
  type = @tokens.after_token( AS )
22
23
  value = @tokens.after_token( VAL )
23
24
 
24
- if Gloo::Expr::LString.string?( value )
25
- value = Gloo::Expr::LString.strip_quotes( value )
25
+ unless name
26
+ $engine.err NO_NAME_ERR
27
+ return
26
28
  end
27
- obj = $engine.factory.create( { name: name, type: type, value: value } )
28
-
29
- obj.add_default_children if obj&.add_children_on_create?
30
- $engine.heap.it.set_to value
29
+ create name, type, value
31
30
  end
32
31
 
33
32
  #
@@ -45,37 +44,23 @@ module Gloo
45
44
  end
46
45
 
47
46
  # ---------------------------------------------------------------------
48
- # Help
47
+ # Private functions
49
48
  # ---------------------------------------------------------------------
50
49
 
50
+ private
51
+
51
52
  #
52
- # Get help for this verb.
53
+ # Create an object with given name of given type with
54
+ # the given initial value.
53
55
  #
54
- def self.help
55
- return <<~TEXT
56
- CREATE VERB
57
- NAME: create
58
- SHORTCUT: `
59
-
60
- DESCRIPTION
61
- Create a new object of given type with given value.
62
- Both type and value are optional when creating an object.
63
-
64
- SYNTAX
65
- create <new.object.path> as <type> : <value>
66
-
67
- PARAMETERS
68
- new.object.path - The path and name of the new object
69
- type - The type of the new object
70
- value - The initial value for the new object
71
-
72
- RESULT
73
- The new object will be created and added to the object heap.
74
- <it> will be set to the new object's intitial value.
56
+ def create( name, type, value )
57
+ if Gloo::Expr::LString.string?( value )
58
+ value = Gloo::Expr::LString.strip_quotes( value )
59
+ end
60
+ obj = $engine.factory.create( { name: name, type: type, value: value } )
75
61
 
76
- ERRORS
77
- None
78
- TEXT
62
+ obj.add_default_children if obj&.add_children_on_create?
63
+ $engine.heap.it.set_to value
79
64
  end
80
65
 
81
66
  end
@@ -0,0 +1,52 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
+ #
4
+ # Execute a shell command.
5
+ #
6
+
7
+ module Gloo
8
+ module Verbs
9
+ class Execute < Gloo::Core::Verb
10
+
11
+ KEYWORD = 'execute'.freeze
12
+ KEYWORD_SHORT = 'exec'.freeze
13
+ MISSING_EXPR_ERR = 'Missing Expression!'.freeze
14
+
15
+ #
16
+ # Run the verb.
17
+ #
18
+ def run
19
+ if @tokens.token_count < 2
20
+ $engine.err MISSING_EXPR_ERR
21
+ return
22
+ end
23
+
24
+ expr = Gloo::Expr::Expression.new( @tokens.params )
25
+ cmd = expr.evaluate
26
+ $log.debug "starting cmd: #{cmd}"
27
+ pid = spawn cmd
28
+ Process.wait pid
29
+ $log.debug "done executing cmd: #{cmd}"
30
+
31
+ # system expr.evaluate #, chdir: Dir.pwd
32
+ # `#{expr.evaluate}`
33
+ # exec expr.evaluate
34
+ end
35
+
36
+ #
37
+ # Get the Verb's keyword.
38
+ #
39
+ def self.keyword
40
+ return KEYWORD
41
+ end
42
+
43
+ #
44
+ # Get the Verb's keyword shortcut.
45
+ #
46
+ def self.keyword_shortcut
47
+ return KEYWORD_SHORT
48
+ end
49
+
50
+ end
51
+ end
52
+ end
@@ -10,16 +10,20 @@ module Gloo
10
10
 
11
11
  KEYWORD = 'help'.freeze
12
12
  KEYWORD_SHORT = '?'.freeze
13
+ DEFAULT_HELP = 'default_help'.freeze
14
+ HELP_NOT_FOUND_ERR = 'Help command could not be found:'.freeze
13
15
 
14
16
  DISPATCH = {
15
17
  settings: 'show_settings',
18
+ keywords: 'show_keywords',
16
19
  verb: 'show_verbs',
17
20
  verbs: 'show_verbs',
18
21
  v: 'show_verbs',
19
22
  obj: 'show_objs',
20
23
  object: 'show_objs',
21
24
  objects: 'show_objs',
22
- o: 'show_objs'
25
+ o: 'show_objs',
26
+ topics: 'show_topics'
23
27
  }.freeze
24
28
 
25
29
  #
@@ -30,26 +34,161 @@ module Gloo
30
34
  opts = opts.strip.downcase if opts
31
35
 
32
36
  if opts
33
- self.dispatch opts
37
+ dispatch opts
34
38
  else
35
- show_default
39
+ $engine.help.page_topic DEFAULT_HELP
36
40
  end
37
41
  end
38
42
 
43
+ #
44
+ # Get the text for the list of verbs.
45
+ #
46
+ def get_verb_list
47
+ out = "Verbs:\n"
48
+ str = ''
49
+ verbs = $engine.dictionary.get_verbs.sort_by( &:keyword )
50
+ verbs.each_with_index do |v, i|
51
+ cut = v.keyword_shortcut.ljust( 5, ' ' )
52
+ str << " #{cut} #{v.keyword.ljust( 20, ' ' )}"
53
+ if ( ( i + 1 ) % 3 ).zero?
54
+ out << "#{str}\n"
55
+ str = ''
56
+ end
57
+ end
58
+
59
+ return out
60
+ end
61
+
62
+ #
63
+ # Lookup the opts in the dispatch table.
64
+ #
65
+ def lookup_opts( opts )
66
+ return DISPATCH[ opts.to_sym ]
67
+ end
68
+
69
+ #
70
+ # Get the text for the list of verbs.
71
+ #
72
+ def get_obj_list
73
+ out = "Object Types:\n"
74
+ str = ''
75
+ objs = $engine.dictionary.get_obj_types.sort_by( &:typename )
76
+ objs.each_with_index do |o, i|
77
+ name = o.typename
78
+ if o.short_typename != o.typename
79
+ name = "#{name} (#{o.short_typename})"
80
+ end
81
+ str << " #{name.ljust( 30, ' ' )}"
82
+ if ( ( i + 1 ) % 4 ).zero?
83
+ out << "#{str}\n"
84
+ str = ''
85
+ end
86
+ end
87
+
88
+ return out
89
+ end
90
+
91
+ #
92
+ # Get the list of help topics.
93
+ #
94
+ def get_topics
95
+ out = "Help Topics:\n"
96
+ str = ''
97
+ objs = $engine.help.topics.keys.sort
98
+ objs.each_with_index do |o, i|
99
+ str << " #{o.ljust( 30, ' ' )}"
100
+ if ( ( i + 1 ) % 4 ).zero?
101
+ out << "#{str}\n"
102
+ str = ''
103
+ end
104
+ end
105
+
106
+ return out
107
+ end
108
+
109
+ #
110
+ # Get the Verb's keyword.
111
+ #
112
+ def self.keyword
113
+ return KEYWORD
114
+ end
115
+
116
+ #
117
+ # Get the Verb's keyword shortcut.
118
+ #
119
+ def self.keyword_shortcut
120
+ return KEYWORD_SHORT
121
+ end
122
+
123
+ # ---------------------------------------------------------------------
124
+ # Private functions
125
+ # ---------------------------------------------------------------------
126
+
127
+ private
128
+
129
+ #
130
+ # Report an error with the inline help.
131
+ #
132
+ def report_help_error( opts )
133
+ $engine.err "#{HELP_NOT_FOUND_ERR} '#{opts}'"
134
+ end
135
+
39
136
  #
40
137
  # Dispatch the help to the right place.
41
138
  #
42
139
  def dispatch( opts )
140
+ return if dispatch_help_page( opts )
141
+
142
+ $log.debug 'looking for built in help topic'
43
143
  cmd = DISPATCH[ opts.to_sym ]
44
144
  if cmd
145
+ $log.debug 'found help index'
45
146
  send cmd
46
147
  else
148
+ $log.debug 'looking for entity help'
47
149
  entity_help opts
48
150
  end
49
151
  rescue
50
152
  report_help_error opts
51
153
  end
52
154
 
155
+ #
156
+ # Dispatch to a help page if we can find one.
157
+ #
158
+ def dispatch_help_page( opts )
159
+ if $engine.help.topic? opts
160
+ $log.debug 'found expanded help topic'
161
+ $engine.help.page_topic opts
162
+ return true
163
+ end
164
+
165
+ key = $engine.dictionary.lookup_keyword opts
166
+ if $engine.help.topic? key
167
+ $log.debug 'found expanded help topic'
168
+ $engine.help.page_topic key
169
+ return true
170
+ end
171
+
172
+ return false
173
+ end
174
+
175
+ #
176
+ # Write output to it and show it unless we are in
177
+ # silent mode.
178
+ #
179
+ def show_output( out )
180
+ $engine.heap.it.set_to out
181
+ puts out unless $engine.args.quiet?
182
+ end
183
+
184
+ #
185
+ # List all help topics (articles)
186
+ #
187
+ def show_topics
188
+ out = self.get_topics
189
+ show_output out
190
+ end
191
+
53
192
  #
54
193
  # Dispatch the help command to a verb or object
55
194
  # if we can find one matching the request.
@@ -69,7 +208,7 @@ module Gloo
69
208
  if $engine.dictionary.verb?( opts )
70
209
  t = $engine.dictionary.find_verb( opts )
71
210
  out = t.send 'help'
72
- self.show_output out
211
+ show_output out
73
212
  return true
74
213
  end
75
214
 
@@ -84,36 +223,13 @@ module Gloo
84
223
  if $engine.dictionary.obj?( opts )
85
224
  t = $engine.dictionary.find_obj( opts )
86
225
  out = t.send 'help'
87
- self.show_output out
226
+ show_output out
88
227
  return true
89
228
  end
90
229
 
91
230
  return false
92
231
  end
93
232
 
94
- #
95
- # Lookup the opts in the dispatch table.
96
- #
97
- def lookup_opts( opts )
98
- return DISPATCH[ opts.to_sym ]
99
- end
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
233
  #
118
234
  # Show application settings.
119
235
  #
@@ -122,22 +238,17 @@ module Gloo
122
238
  end
123
239
 
124
240
  #
125
- # List the verbs
241
+ # Show all keywords: verbs and objects.
126
242
  #
127
- def show_verbs
128
- out = self.get_verb_list
129
- self.show_output out
243
+ def show_keywords
244
+ $engine.dictionary.show_keywords
130
245
  end
131
246
 
132
247
  #
133
- # Get the text for the list of verbs.
248
+ # List the verbs
134
249
  #
135
- def get_verb_list
136
- out = "Verbs:\n"
137
- $engine.dictionary.get_verbs.each do |v|
138
- out << " #{v.keyword_shortcut} - #{v.keyword}\n"
139
- end
140
- return out
250
+ def show_verbs
251
+ show_output get_verb_list
141
252
  end
142
253
 
143
254
  #
@@ -145,82 +256,7 @@ module Gloo
145
256
  #
146
257
  def show_objs
147
258
  out = self.get_obj_list
148
- self.show_output out
149
- end
150
-
151
- #
152
- # Get the text for the list of verbs.
153
- #
154
- def get_obj_list
155
- out = "Object Types:\n"
156
- $engine.dictionary.get_obj_types.each do |v|
157
- out << " #{v.short_typename} - #{v.typename}\n"
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?
169
- end
170
-
171
- #
172
- # Get the Verb's keyword.
173
- #
174
- def self.keyword
175
- return KEYWORD
176
- end
177
-
178
- #
179
- # Get the Verb's keyword shortcut.
180
- #
181
- def self.keyword_shortcut
182
- return KEYWORD_SHORT
183
- end
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
259
+ show_output out
224
260
  end
225
261
 
226
262
  end