gloo 0.5.4 → 0.7.2

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 (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
@@ -8,10 +8,12 @@ module Gloo
8
8
  module App
9
9
  class Info
10
10
 
11
- VERSION = '0.5.4'.freeze
11
+ VERSION = '0.7.2'.freeze
12
12
  APP_NAME = 'Gloo'.freeze
13
13
 
14
+ #
14
15
  # Get the application display title.
16
+ #
15
17
  def self.display_title
16
18
  return "#{APP_NAME}, version #{VERSION}"
17
19
  end
@@ -13,6 +13,11 @@ module Gloo
13
13
 
14
14
  attr_reader :logger, :quiet
15
15
 
16
+ #
17
+ # Set up a logger.
18
+ # If quiet is true, then message are written to the log
19
+ # but not to the console.
20
+ #
16
21
  def initialize( quiet )
17
22
  f = File.join( $settings.log_path, 'gloo.log' )
18
23
  @logger = Logger.new( f )
@@ -20,25 +25,43 @@ module Gloo
20
25
  @quiet = quiet
21
26
  end
22
27
 
28
+ #
23
29
  # Show a message unless we're in quite mode.
30
+ #
24
31
  def show( msg )
25
32
  puts msg unless @quiet
26
33
  end
27
34
 
35
+ #
36
+ # Write a debug message to the log.
37
+ #
28
38
  def debug( msg )
29
39
  @logger.debug msg
30
40
  end
31
41
 
42
+ #
43
+ # Write an information message to the log.
44
+ # Also write to the console unless quiet.
45
+ #
32
46
  def info( msg )
33
47
  @logger.info msg
34
48
  puts msg.blue unless @quiet
35
49
  end
36
50
 
51
+ #
52
+ # Write a warning message to the log.
53
+ # Also write to the console unless quiet.
54
+ #
37
55
  def warn( msg )
38
56
  @logger.warn msg
39
57
  puts msg.yellow unless @quiet
40
58
  end
41
59
 
60
+ #
61
+ # Write an error message to the log and set the error
62
+ # in the engine's data heap.
63
+ # Also write to the console unless quiet.
64
+ #
42
65
  def error( msg, ex = nil, engine = nil )
43
66
  engine&.heap&.error&.set_to msg
44
67
  @logger.error msg
@@ -15,7 +15,9 @@ module Gloo
15
15
  HELP = :help # Show the help screen
16
16
  TEST = :test # Running in Unit Test mode.
17
17
 
18
+ #
18
19
  # Get the default mode.
20
+ #
19
21
  def self.default_mode
20
22
  return EMBED
21
23
  end
@@ -14,8 +14,12 @@ module Gloo
14
14
 
15
15
  attr_reader :user_root, :log_path, :config_path, :project_path
16
16
  attr_reader :start_with, :list_indent, :tmp_path
17
+ attr_reader :debug_path, :debug
17
18
 
19
+ #
18
20
  # Load setting from the yml file.
21
+ # The mode parameter is used to determine if we are running in TEST.
22
+ #
19
23
  def initialize( mode )
20
24
  @mode = mode
21
25
  init_root
@@ -23,30 +27,99 @@ module Gloo
23
27
  init_user_settings
24
28
  end
25
29
 
26
- def init_root
27
- if in_test_mode?
28
- path = File.dirname( File.dirname( File.absolute_path( __FILE__ ) ) )
29
- path = File.dirname( File.dirname( path ) )
30
- path = File.join( path, 'test', 'gloo' )
31
- @user_root = path
32
- else
33
- @user_root = File.join( Dir.home, 'gloo' )
34
- end
35
- end
36
-
30
+ #
37
31
  # Are we in test mode?
32
+ #
38
33
  def in_test_mode?
39
34
  return @mode == 'TEST'
40
35
  end
41
36
 
37
+ #
42
38
  # Get the project path for the current mode.
39
+ #
43
40
  def project_path_for_mode( settings )
44
41
  return File.join( @user_root, 'projects' ) if in_test_mode?
45
42
 
46
43
  return settings[ 'gloo' ][ 'project_path' ]
47
44
  end
48
45
 
46
+ #
47
+ # Show the current application settings.
48
+ # Can be seen in app with 'help settings'
49
+ #
50
+ def show
51
+ puts "\nApplication Settings:".blue
52
+ puts ' Startup with: '.yellow + @start_with.white
53
+ puts ' Indent in Listing: '.yellow + @list_indent.to_s.white
54
+ puts ' Screen Lines: '.yellow + Gloo::App::Settings.lines.to_s.white
55
+ puts ' Page Size: '.yellow + Gloo::App::Settings.page_size.to_s.white
56
+ puts ''
57
+ self.show_paths
58
+ puts ''
59
+ end
60
+
61
+ #
62
+ # Show path settings
63
+ #
64
+ def show_paths
65
+ puts ' User Root Path is here: '.yellow + @user_root.white
66
+ puts ' Projects Path: '.yellow + @project_path.white
67
+ puts ' Tmp Path: '.yellow + @tmp_path.white
68
+ puts ' Debug Path: '.yellow + @debug_path.white
69
+ end
70
+
71
+ #
72
+ # Get the number of vertical lines on screen.
73
+ #
74
+ def self.lines
75
+ TTY::Screen.rows
76
+ end
77
+
78
+ #
79
+ # Get the number of horizontal columns on screen.
80
+ #
81
+ def self.cols
82
+ TTY::Screen.cols
83
+ end
84
+
85
+ #
86
+ # Get the default page size.
87
+ # This is the number of lines of text we can show.
88
+ #
89
+ def self.page_size
90
+ Settings.lines - 3
91
+ end
92
+
93
+ #
94
+ # How many lines should we use for a preview?
95
+ #
96
+ def self.preview_lines
97
+ return 7
98
+ end
99
+
100
+ # ---------------------------------------------------------------------
101
+ # Private
102
+ # ---------------------------------------------------------------------
103
+
104
+ private
105
+
106
+ #
107
+ # Initialize gloo's root path.
108
+ #
109
+ def init_root
110
+ if in_test_mode?
111
+ path = File.dirname( File.dirname( File.absolute_path( __FILE__ ) ) )
112
+ path = File.dirname( File.dirname( path ) )
113
+ path = File.join( path, 'test', 'gloo' )
114
+ @user_root = path
115
+ else
116
+ @user_root = File.join( Dir.home, 'gloo' )
117
+ end
118
+ end
119
+
120
+ #
49
121
  # Get the app's required directories.
122
+ #
50
123
  def init_path_settings
51
124
  Dir.mkdir( @user_root ) unless File.exist?( @user_root )
52
125
 
@@ -58,31 +131,44 @@ module Gloo
58
131
 
59
132
  @tmp_path = File.join( @user_root, 'tmp' )
60
133
  Dir.mkdir( @tmp_path ) unless File.exist?( @tmp_path )
134
+
135
+ @debug_path = File.join( @user_root, 'debug' )
136
+ Dir.mkdir( @debug_path ) unless File.exist?( @debug_path )
61
137
  end
62
138
 
139
+ #
63
140
  # Initialize the user settings for the currently
64
141
  # running environment.
142
+ #
65
143
  def init_user_settings
66
144
  settings = get_settings
67
145
 
68
146
  @project_path = project_path_for_mode settings
69
147
  @start_with = settings[ 'gloo' ][ 'start_with' ]
70
148
  @list_indent = settings[ 'gloo' ][ 'list_indent' ]
149
+
150
+ @debug = settings[ 'gloo' ][ 'debug' ]
71
151
  end
72
152
 
153
+ #
73
154
  # Get the app's required directories.
155
+ #
74
156
  def get_settings
75
157
  f = File.join( @config_path, 'gloo.yml' )
76
158
  create_settings( f ) unless File.exist?( f )
77
159
  return YAML.load_file f
78
160
  end
79
161
 
162
+ #
80
163
  # Create settings file.
164
+ #
81
165
  def create_settings( file )
82
166
  IO.write( file, get_default_settings )
83
167
  end
84
168
 
169
+ #
85
170
  # Get the value for default settings.
171
+ #
86
172
  def get_default_settings
87
173
  projects = File.join( @user_root, 'projects' )
88
174
  str = <<~TEXT
@@ -90,46 +176,11 @@ module Gloo
90
176
  project_path: #{projects}
91
177
  start_with:
92
178
  list_indent: 1
179
+ debug: false
93
180
  TEXT
94
181
  return str
95
182
  end
96
183
 
97
- #
98
- # Show the current application settings.
99
- # Can be seen in app with 'help settings'
100
- #
101
- def show
102
- puts "\nApplication Settings:".blue
103
- puts ' User Root Path is here: '.yellow + @user_root.white
104
- puts ' Projects directory: '.yellow + @project_path.white
105
- puts ' Tmp directory: '.yellow + @tmp_path.white
106
- puts ' Startup with: '.yellow + @start_with.white
107
- puts ' Indent in Listing: '.yellow + @list_indent.to_s.white
108
- puts ''
109
- puts ' Screen Lines: '.yellow + Gloo::App::Settings.lines.to_s.white
110
- puts ' Page Size: '.yellow + Gloo::App::Settings.page_size.to_s.white
111
- puts ''
112
- end
113
-
114
- # Get the number of lines on screen.
115
- def self.lines
116
- TTY::Screen.rows
117
- end
118
-
119
- def self.cols
120
- TTY::Screen.cols
121
- end
122
-
123
- # Get the default page size.
124
- def self.page_size
125
- Settings.lines - 3
126
- end
127
-
128
- # How many lines should we use for a preview?
129
- def self.preview_lines
130
- return 7
131
- end
132
-
133
184
  end
134
185
  end
135
186
  end
@@ -0,0 +1,35 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
+ #
4
+ # Data conversion manager.
5
+ #
6
+
7
+ module Gloo
8
+ module Convert
9
+ class Converter
10
+
11
+ # ---------------------------------------------------------------------
12
+ # Convert
13
+ # ---------------------------------------------------------------------
14
+
15
+ #
16
+ # Convert the given value to the specified type,
17
+ # or if no conversion is available, revert to default.
18
+ #
19
+ def convert( value, to_type, default = nil )
20
+ begin
21
+ name = "Gloo::Convert::#{value.class}To#{to_type}"
22
+ clazz = name.split( '::' ).inject( Object ) { |o, c| o.const_get c }
23
+ o = clazz.new
24
+ return o.convert( value )
25
+ rescue => e
26
+ $log.error e.message
27
+ $engine.heap.error.set_to e.message
28
+ end
29
+
30
+ return default
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -1,5 +1,5 @@
1
1
  # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 202 Eric Crane. All rights reserved.
2
+ # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
3
  #
4
4
  # Conversion tool: String to Date Time.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 202 Eric Crane. All rights reserved.
2
+ # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
3
  #
4
4
  # Conversion tool: String to Decimal.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 202 Eric Crane. All rights reserved.
2
+ # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
3
  #
4
4
  # Conversion tool: String to Integer.
5
5
  #
@@ -11,51 +11,54 @@ module Gloo
11
11
 
12
12
  include Singleton
13
13
 
14
- attr_reader :verbs, :objs
14
+ attr_reader :verbs, :objs, :keywords
15
15
 
16
+ #
16
17
  # Set up the object dictionary.
18
+ #
17
19
  def initialize
18
20
  @verbs = {}
19
21
  @objs = {}
20
22
  @verb_references = []
21
23
  @obj_references = []
24
+ @keywords = []
22
25
  end
23
26
 
27
+ #
24
28
  # Register a verb.
29
+ #
25
30
  def register_verb( subclass )
26
31
  @verb_references << subclass
27
32
  end
28
33
 
34
+ #
29
35
  # Register an object type.
36
+ #
30
37
  def register_obj( subclass )
31
38
  @obj_references << subclass
32
39
  end
33
40
 
41
+ #
34
42
  # Initialize verbs and objects in the dictionary.
43
+ #
35
44
  def init
36
45
  $log.debug 'initializing dictionaries'
37
46
  init_verbs
38
47
  init_objs
39
48
  end
40
49
 
41
- # Init the list of verbs.
42
- def init_objs
43
- $log.debug "initializing #{@obj_references.count} objects"
44
- @obj_references.each do |o|
45
- $log.debug o
46
- @objs[ o.typename ] = o
47
- @objs[ o.short_typename ] = o
48
- end
49
- end
50
-
50
+ #
51
51
  # Is the given word an object type?
52
+ #
52
53
  def obj?( word )
53
54
  return false unless word
54
55
 
55
56
  return @objs.key?( word.downcase )
56
57
  end
57
58
 
59
+ #
58
60
  # Find the object type by name.
61
+ #
59
62
  def find_obj( word )
60
63
  return nil unless word
61
64
  return nil unless obj?( word )
@@ -63,25 +66,18 @@ module Gloo
63
66
  return @objs[ word.downcase ]
64
67
  end
65
68
 
66
- # Init the list of verbs.
67
- def init_verbs
68
- $log.debug "initializing #{@verb_references.count} verbs"
69
- @verb_references.each do |v|
70
- $log.debug v
71
- @verbs[ v.keyword ] = v
72
- @verbs[ v.keyword_shortcut ] = v
73
- # v.send( :new ).run
74
- end
75
- end
76
-
69
+ #
77
70
  # Is the given word a verb?
71
+ #
78
72
  def verb?( word )
79
73
  return false unless word
80
74
 
81
75
  return @verbs.key?( word.downcase )
82
76
  end
83
77
 
78
+ #
84
79
  # Find the verb by name.
80
+ #
85
81
  def find_verb( verb )
86
82
  return nil unless verb
87
83
  return nil unless verb?( verb )
@@ -89,16 +85,97 @@ module Gloo
89
85
  return @verbs[ verb.downcase ]
90
86
  end
91
87
 
88
+ #
92
89
  # Get the list of verbs, sorted.
90
+ #
93
91
  def get_obj_types
94
92
  return @obj_references.sort { |a, b| a.typename <=> b.typename }
95
93
  end
96
94
 
95
+ #
97
96
  # Get the list of verbs, sorted.
97
+ #
98
98
  def get_verbs
99
99
  return @verb_references.sort { |a, b| a.keyword <=> b.keyword }
100
100
  end
101
101
 
102
+ #
103
+ # Lookup the keyword by name or shortcut.
104
+ # Return the keyword (name) or nil if it is not found.
105
+ #
106
+ def lookup_keyword( key )
107
+ v = find_verb key
108
+ return v.keyword if v
109
+
110
+ o = find_obj key
111
+ return o.typename if o
112
+
113
+ return nil
114
+ end
115
+
116
+ #
117
+ # Show a list of all keywords.
118
+ # This includes verbs and objects, names and shortcuts.
119
+ #
120
+ def show_keywords
121
+ str = ''
122
+ @keywords.sort.each_with_index do |k, i|
123
+ str << k.ljust( 20, ' ' )
124
+ if ( ( i + 1 ) % 6 ).zero?
125
+ puts str
126
+ str = ''
127
+ end
128
+ end
129
+ end
130
+
131
+ # ---------------------------------------------------------------------
132
+ # Private
133
+ # ---------------------------------------------------------------------
134
+
135
+ private
136
+
137
+ #
138
+ # Add a keyword to the keyword list.
139
+ # Report an error if the keyword is already in the list.
140
+ #
141
+ def add_key( keyword )
142
+ if @keywords.include?( keyword )
143
+ $log.error "duplicate keyword '#{keyword}'"
144
+ return
145
+ end
146
+
147
+ @keywords << keyword
148
+ end
149
+
150
+ #
151
+ # Init the list of objects.
152
+ #
153
+ def init_objs
154
+ $log.debug "initializing #{@obj_references.count} objects"
155
+ @obj_references.each do |o|
156
+ $log.debug o
157
+ @objs[ o.typename ] = o
158
+ @objs[ o.short_typename ] = o
159
+ add_key o.typename
160
+ add_key o.short_typename if o.typename != o.short_typename
161
+ end
162
+ end
163
+
164
+ #
165
+ # Init the list of verbs.
166
+ #
167
+ def init_verbs
168
+ $log.debug "initializing #{@verb_references.count} verbs"
169
+ @verb_references.each do |v|
170
+ $log.debug v
171
+ @verbs[ v.keyword ] = v
172
+ @verbs[ v.keyword_shortcut ] = v
173
+ # v.send( :new ).run
174
+ add_key v.keyword
175
+ add_key v.keyword_shortcut if v.keyword != v.keyword_shortcut
176
+ end
177
+ end
178
+
102
179
  end
103
180
  end
104
181
  end