gloo 1.4.2 → 2.0.0

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 (131) hide show
  1. checksums.yaml +4 -4
  2. data/.DS_Store +0 -0
  3. data/.gitignore +1 -0
  4. data/gloo.gemspec +0 -2
  5. data/lib/VERSION +1 -1
  6. data/lib/dependencies.rb +4 -4
  7. data/lib/gloo/app/args.rb +112 -0
  8. data/lib/gloo/app/engine.rb +247 -0
  9. data/lib/gloo/app/engine_context.rb +25 -0
  10. data/lib/gloo/app/info.rb +20 -3
  11. data/lib/gloo/app/log.rb +73 -1
  12. data/lib/gloo/app/mode.rb +27 -0
  13. data/lib/gloo/app/platform.rb +8 -1
  14. data/lib/gloo/app/settings.rb +202 -0
  15. data/lib/gloo/convert/converter.rb +42 -0
  16. data/lib/gloo/convert/string_to_date.rb +21 -0
  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/convert/string_to_time.rb +21 -0
  21. data/lib/gloo/core/baseo.rb +31 -0
  22. data/lib/gloo/core/dictionary.rb +245 -0
  23. data/lib/gloo/core/error.rb +61 -0
  24. data/lib/gloo/core/event_manager.rb +45 -0
  25. data/lib/gloo/core/factory.rb +211 -0
  26. data/lib/gloo/core/gloo_system.rb +267 -0
  27. data/lib/gloo/core/heap.rb +53 -0
  28. data/lib/gloo/core/here.rb +36 -0
  29. data/lib/gloo/core/it.rb +36 -0
  30. data/lib/gloo/core/literal.rb +30 -0
  31. data/lib/gloo/core/obj.rb +318 -0
  32. data/lib/gloo/core/obj_finder.rb +30 -0
  33. data/lib/gloo/core/op.rb +40 -0
  34. data/lib/gloo/core/parser.rb +60 -0
  35. data/lib/gloo/core/pn.rb +212 -0
  36. data/lib/gloo/core/tokens.rb +165 -0
  37. data/lib/gloo/core/verb.rb +87 -0
  38. data/lib/gloo/exec/action.rb +48 -0
  39. data/lib/gloo/exec/dispatch.rb +40 -0
  40. data/lib/gloo/exec/exec_env.rb +75 -0
  41. data/lib/gloo/exec/runner.rb +45 -0
  42. data/lib/gloo/exec/script.rb +50 -0
  43. data/lib/gloo/exec/stack.rb +79 -0
  44. data/lib/gloo/expr/expression.rb +119 -0
  45. data/lib/gloo/expr/l_boolean.rb +36 -0
  46. data/lib/gloo/expr/l_decimal.rb +39 -0
  47. data/lib/gloo/expr/l_integer.rb +37 -0
  48. data/lib/gloo/expr/l_string.rb +58 -0
  49. data/lib/gloo/expr/op_div.rb +22 -0
  50. data/lib/gloo/expr/op_minus.rb +22 -0
  51. data/lib/gloo/expr/op_mult.rb +22 -0
  52. data/lib/gloo/expr/op_plus.rb +24 -0
  53. data/lib/gloo/objs/basic/alias.rb +78 -0
  54. data/lib/gloo/objs/basic/boolean.rb +120 -0
  55. data/lib/gloo/objs/basic/container.rb +65 -0
  56. data/lib/gloo/objs/basic/decimal.rb +76 -0
  57. data/lib/gloo/objs/basic/integer.rb +73 -0
  58. data/lib/gloo/objs/basic/script.rb +99 -0
  59. data/lib/gloo/objs/basic/string.rb +77 -0
  60. data/lib/gloo/objs/basic/text.rb +79 -0
  61. data/lib/gloo/objs/basic/untyped.rb +41 -0
  62. data/lib/gloo/objs/cli/banner.rb +1 -1
  63. data/lib/gloo/objs/cli/bar.rb +3 -3
  64. data/lib/gloo/objs/cli/colorize.rb +1 -1
  65. data/lib/gloo/objs/cli/confirm.rb +1 -1
  66. data/lib/gloo/objs/cli/menu.rb +6 -6
  67. data/lib/gloo/objs/cli/menu_item.rb +1 -1
  68. data/lib/gloo/objs/cli/pastel.rb +1 -1
  69. data/lib/gloo/objs/cli/prompt.rb +1 -1
  70. data/lib/gloo/objs/cli/select.rb +2 -2
  71. data/lib/gloo/objs/ctrl/each.rb +279 -0
  72. data/lib/gloo/objs/ctrl/repeat.rb +108 -0
  73. data/lib/gloo/objs/data/markdown.rb +79 -0
  74. data/lib/gloo/objs/data/mysql.rb +5 -5
  75. data/lib/gloo/objs/data/query.rb +4 -4
  76. data/lib/gloo/objs/data/sqlite.rb +1 -1
  77. data/lib/gloo/objs/data/table.rb +112 -0
  78. data/lib/gloo/objs/dev/git.rb +2 -2
  79. data/lib/gloo/objs/dev/stats.rb +4 -4
  80. data/lib/gloo/objs/dt/date.rb +65 -0
  81. data/lib/gloo/objs/dt/datetime.rb +120 -0
  82. data/lib/gloo/objs/dt/dt_tools.rb +100 -0
  83. data/lib/gloo/objs/dt/time.rb +65 -0
  84. data/lib/gloo/objs/ror/erb.rb +116 -0
  85. data/lib/gloo/objs/ror/eval.rb +107 -0
  86. data/lib/gloo/objs/snd/play.rb +1 -1
  87. data/lib/gloo/objs/snd/say.rb +1 -1
  88. data/lib/gloo/objs/system/file_handle.rb +4 -4
  89. data/lib/gloo/objs/system/ssh_exec.rb +1 -1
  90. data/lib/gloo/objs/system/system.rb +1 -1
  91. data/lib/gloo/objs/web/http_get.rb +159 -0
  92. data/lib/gloo/objs/web/http_post.rb +183 -0
  93. data/lib/gloo/objs/web/json.rb +135 -0
  94. data/lib/gloo/objs/web/slack.rb +130 -0
  95. data/lib/gloo/objs/web/teams.rb +117 -0
  96. data/lib/gloo/objs/web/uri.rb +148 -0
  97. data/lib/gloo/persist/disc_mech.rb +87 -0
  98. data/lib/gloo/persist/file_loader.rb +193 -0
  99. data/lib/gloo/persist/file_saver.rb +51 -0
  100. data/lib/gloo/persist/file_storage.rb +46 -0
  101. data/lib/gloo/persist/line_splitter.rb +81 -0
  102. data/lib/gloo/persist/persist_man.rb +153 -0
  103. data/lib/gloo/utils/format.rb +21 -0
  104. data/lib/gloo/utils/stats.rb +206 -0
  105. data/lib/gloo/utils/words.rb +19 -0
  106. data/lib/gloo/verbs/alert.rb +2 -2
  107. data/lib/gloo/verbs/beep.rb +1 -1
  108. data/lib/gloo/verbs/cls.rb +1 -1
  109. data/lib/gloo/verbs/context.rb +62 -0
  110. data/lib/gloo/verbs/create.rb +68 -0
  111. data/lib/gloo/verbs/execute.rb +56 -0
  112. data/lib/gloo/verbs/files.rb +49 -0
  113. data/lib/gloo/verbs/help.rb +1 -1
  114. data/lib/gloo/verbs/if.rb +92 -0
  115. data/lib/gloo/verbs/list.rb +98 -0
  116. data/lib/gloo/verbs/load.rb +45 -0
  117. data/lib/gloo/verbs/move.rb +89 -0
  118. data/lib/gloo/verbs/put.rb +94 -0
  119. data/lib/gloo/verbs/quit.rb +40 -0
  120. data/lib/gloo/verbs/reload.rb +43 -0
  121. data/lib/gloo/verbs/run.rb +75 -0
  122. data/lib/gloo/verbs/save.rb +39 -0
  123. data/lib/gloo/verbs/show.rb +63 -0
  124. data/lib/gloo/verbs/tell.rb +80 -0
  125. data/lib/gloo/verbs/unless.rb +92 -0
  126. data/lib/gloo/verbs/unload.rb +46 -0
  127. data/lib/gloo/verbs/version.rb +3 -3
  128. data/lib/gloo/verbs/wait.rb +42 -0
  129. data/lib/gloo.rb +2 -2
  130. data/lib/run.rb +2 -2
  131. metadata +97 -22
@@ -0,0 +1,153 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
+ #
4
+ # The persistance manager.
5
+ # Keeps a collection of object-file mappings, and then
6
+ # uses mappings to know how/where to save updated objects.
7
+ #
8
+
9
+ module Gloo
10
+ module Persist
11
+ class PersistMan
12
+
13
+ attr_reader :maps, :mech
14
+
15
+ #
16
+ # Contructor for the persistence manager.
17
+ #
18
+ def initialize( engine )
19
+ @engine = engine
20
+ @maps = []
21
+ @mech = @engine.platform.getFileMech( @engine )
22
+ end
23
+
24
+ #
25
+ # Save one object to the file.
26
+ #
27
+ def save( name = '' )
28
+ name.blank? ? save_all : save_one( name )
29
+ end
30
+
31
+ #
32
+ # Save one object to the file.
33
+ #
34
+ def save_all
35
+ @maps.each( &:save )
36
+ end
37
+
38
+ #
39
+ # Save one object to the file.
40
+ #
41
+ def save_one( name )
42
+ ref = Gloo::Core::Pn.new( @engine, name )
43
+ obj = ref.resolve
44
+
45
+ fs = find_file_storage( obj )
46
+ fs.save
47
+ end
48
+
49
+ #
50
+ # Load the object from the file.
51
+ #
52
+ def load( name )
53
+ pns = get_full_path_names name
54
+ return unless pns
55
+
56
+ pns.each do |pn|
57
+ @engine.log.debug "Load file(s) at: #{pn}"
58
+ fs = Gloo::Persist::FileStorage.new( @engine, pn )
59
+ fs.load
60
+ @maps << fs
61
+ @engine.event_manager.on_load fs.obj
62
+ end
63
+ end
64
+
65
+ #
66
+ # The given object is unloading.
67
+ # Do any necessary clean up here.
68
+ #
69
+ def unload( obj )
70
+ @maps.each_with_index do |o, i|
71
+ if o.obj.pn === obj.pn
72
+ @maps.delete_at( i )
73
+ return
74
+ end
75
+ end
76
+ end
77
+
78
+ #
79
+ # Reload all objects.
80
+ #
81
+ def reload_all
82
+ return unless @maps
83
+
84
+ @maps.each do |fs|
85
+ @engine.heap.unload fs.obj
86
+ fs.load
87
+ end
88
+ end
89
+
90
+ #
91
+ # Re-load the given object from file.
92
+ #
93
+ def reload( obj )
94
+ fs = find_file_storage( obj )
95
+ return unless fs
96
+
97
+ @engine.heap.unload obj
98
+ fs.load
99
+ end
100
+
101
+ #
102
+ # Find the objects FileStorage in the list.
103
+ #
104
+ def find_file_storage( obj )
105
+ @maps.each do |o|
106
+ return o if ( o.obj.pn === obj.pn )
107
+ end
108
+
109
+ # It was not found, so return nil.
110
+ return nil
111
+ end
112
+
113
+
114
+ #
115
+ # Get the full path and name of the file.
116
+ #
117
+ def get_full_path_names( name )
118
+ return nil if name.strip.empty?
119
+
120
+ if name.strip[ -1 ] == '*'
121
+ return @mech.get_all_files_in( name[ 0..-2 ] )
122
+ else
123
+ return @mech.expand( name )
124
+ end
125
+ end
126
+
127
+ #
128
+ # Check to see if a given path name refers to a gloo object file.
129
+ #
130
+ def gloo_file?( name )
131
+ return @mech.valid?( name )
132
+ end
133
+
134
+ #
135
+ # Get the default file extention.
136
+ #
137
+ def file_ext
138
+ return @mech.file_ext
139
+ end
140
+
141
+ #
142
+ # Print out all object - persistance mappings.
143
+ # This is a debugging tool.
144
+ #
145
+ def show_maps
146
+ @maps.each do |o|
147
+ puts " \t #{o.pn} \t #{o.obj.name}"
148
+ end
149
+ end
150
+
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,21 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
+ #
4
+ # Formatting utilities
5
+ #
6
+
7
+ module Gloo
8
+ module Utils
9
+ class Format
10
+
11
+ #
12
+ # Format number, adding comma separators.
13
+ # Ex: 1000 -> 1,000
14
+ #
15
+ def self.number( num )
16
+ return num.to_s.reverse.scan( /.{1,3}/ ).join( ',' ).reverse
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,206 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
+ #
4
+ # Utilities related to words (strings).
5
+ #
6
+
7
+ module Gloo
8
+ module Utils
9
+ class Stats
10
+
11
+ DIR_NOT_FOUND_ERR = 'The folder was not found!'.freeze
12
+
13
+ # ---------------------------------------------------------------------
14
+ # Setup
15
+ # ---------------------------------------------------------------------
16
+
17
+ #
18
+ # Create a stats utility class for the given directory.
19
+ #
20
+ def initialize( engine, dir, types, skip = [] )
21
+ @engine = engine
22
+ @dir = dir
23
+ setup_loc types
24
+ @skip = skip
25
+ end
26
+
27
+ # ---------------------------------------------------------------------
28
+ # Public Functions
29
+ # ---------------------------------------------------------------------
30
+
31
+ #
32
+ # Is the stats utility valid?
33
+ # Does it have a valid root directory.
34
+ #
35
+ def valid?
36
+ return true if @dir && File.directory?( @dir )
37
+
38
+ @engine.err DIR_NOT_FOUND_ERR
39
+ @engine.heap.it.set_to false
40
+
41
+ return false
42
+ end
43
+
44
+ #
45
+ # Show all stat data for the project.
46
+ #
47
+ def show_all
48
+ return unless valid?
49
+
50
+ generate
51
+ puts "Showing All stats for #{@dir}".white
52
+ puts "\n ** #{@dir_cnt} Total Folders ** "
53
+ puts " ** #{@file_cnt} Total Files ** "
54
+
55
+ busy_folders( 7 )
56
+ file_types
57
+ loc
58
+ end
59
+
60
+ #
61
+ # Get a list of the busiest folders.
62
+ # Count is how many results we want.
63
+ #
64
+ def busy_folders( count = 17 )
65
+ return unless valid?
66
+
67
+ generate
68
+ puts "\nBusy Folders:".yellow
69
+
70
+ @folders.sort! { |a, b| a[ :cnt ] <=> b[ :cnt ] }
71
+ @folders.reverse!
72
+ @folders[ 0..count ].each do |f|
73
+ puts " #{f[ :cnt ]} - #{f[ :name ]}"
74
+ end
75
+ end
76
+
77
+ #
78
+ # Show file types and how many of each there are.
79
+ #
80
+ def file_types
81
+ return unless valid?
82
+
83
+ generate
84
+ puts "\nFiles by Type:".yellow
85
+
86
+ @types = @types.sort_by( &:last )
87
+ @types.reverse!
88
+ @types.each do |o|
89
+ puts " #{o[ 1 ]} - #{o[ 0 ]}" unless o[ 0 ].empty?
90
+ end
91
+ end
92
+
93
+ #
94
+ # Show Lines of Code
95
+ #
96
+ def loc
97
+ return unless valid?
98
+
99
+ generate
100
+ total = 0
101
+
102
+ @loc.each do |k, v|
103
+ puts "\n #{k} Lines of Code".yellow
104
+ total += v[ :lines ]
105
+ formatted = Gloo::Utils::Format.number( v[ :lines ] )
106
+ puts " ** #{formatted} in #{v[ :files ].count} #{k} files ** "
107
+
108
+ puts "\n Busy #{k} files:".yellow
109
+ files = v[ :files ].sort! { |a, b| a[ :lines ] <=> b[ :lines ] }
110
+ files.reverse!
111
+ files[ 0..12 ].each do |f|
112
+ puts " #{f[ :lines ]} - #{f[ :file ]}"
113
+ end
114
+ end
115
+
116
+ formatted = Gloo::Utils::Format.number( total )
117
+ puts "\n #{formatted} Total Lines of Code".white
118
+ end
119
+
120
+ # ---------------------------------------------------------------------
121
+ # Private Functions
122
+ # ---------------------------------------------------------------------
123
+
124
+ #
125
+ # Setup counters for lines of code by file type.
126
+ def setup_loc( types )
127
+ @loc = {}
128
+
129
+ types.split( ' ' ).each do |t|
130
+ @loc[ t ] = { lines: 0, files: [] }
131
+ end
132
+ end
133
+
134
+ #
135
+ # Generate stat data unless we've already done so.
136
+ #
137
+ def generate
138
+ return if @folders
139
+
140
+ @engine.log.debug 'Generating...'
141
+ @folders = []
142
+ @types = {}
143
+ @file_cnt = 0
144
+ @dir_cnt = 0
145
+
146
+ generate_for Pathname.new( @dir )
147
+ end
148
+
149
+ #
150
+ # Generate data for the given path.
151
+ # NOTE: this is a recursive function.
152
+ # It traverses all sub-direcctories.
153
+ #
154
+ def generate_for( path )
155
+ return if @skip.include?( File.basename( path ) )
156
+
157
+ cnt = 0
158
+ path.children.each do |f|
159
+ if f.directory?
160
+ @dir_cnt += 1
161
+ generate_for( f )
162
+ else
163
+ @file_cnt += 1
164
+ cnt += 1
165
+ handle_file( f )
166
+ inc_type( File.extname( f ) )
167
+ end
168
+ end
169
+ @folders << { name: path, cnt: cnt }
170
+ end
171
+
172
+ #
173
+ # Increment the file count.
174
+ #
175
+ def inc_type( type )
176
+ if @types[ type ]
177
+ @types[ type ] += 1
178
+ else
179
+ @types[ type ] = 1
180
+ end
181
+ end
182
+
183
+ #
184
+ # Consider code file types.
185
+ #
186
+ def handle_file( file )
187
+ ext = File.extname( file )
188
+ return unless ext
189
+
190
+ ext = ext[ 1..-1 ]
191
+ return unless @loc.key?( ext )
192
+
193
+ lines = count_lines( file )
194
+ @loc[ ext ][ :lines ] += lines
195
+ @loc[ ext ][ :files ] << { lines: lines, file: file }
196
+ end
197
+
198
+ #
199
+ # Count lines of code in file.
200
+ def count_lines( file )
201
+ return `wc -l #{file}`.split.first.to_i
202
+ end
203
+
204
+ end
205
+ end
206
+ end
@@ -0,0 +1,19 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
+ #
4
+ # Utilities related to words (strings).
5
+ #
6
+
7
+ require 'active_support/inflector'
8
+
9
+ module Gloo
10
+ module Utils
11
+ class Words
12
+
13
+ def self.pluralize( word )
14
+ return word.pluralize
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -6,7 +6,7 @@
6
6
 
7
7
  module Gloo
8
8
  module Verbs
9
- class Alert < GlooLang::Core::Verb
9
+ class Alert < Gloo::Core::Verb
10
10
 
11
11
  KEYWORD = 'alert'.freeze
12
12
  KEYWORD_SHORT = '!'.freeze
@@ -23,7 +23,7 @@ module Gloo
23
23
  return
24
24
  end
25
25
 
26
- expr = GlooLang::Expr::Expression.new( @engine, @tokens.params )
26
+ expr = Gloo::Expr::Expression.new( @engine, @tokens.params )
27
27
  result = expr.evaluate
28
28
 
29
29
  if result
@@ -6,7 +6,7 @@
6
6
 
7
7
  module Gloo
8
8
  module Verbs
9
- class Beep < GlooLang::Core::Verb
9
+ class Beep < Gloo::Core::Verb
10
10
 
11
11
  KEYWORD = 'beep'.freeze
12
12
  KEYWORD_SHORT = 'b'.freeze
@@ -6,7 +6,7 @@
6
6
 
7
7
  module Gloo
8
8
  module Verbs
9
- class Cls < GlooLang::Core::Verb
9
+ class Cls < Gloo::Core::Verb
10
10
 
11
11
  KEYWORD = 'cls'.freeze
12
12
  KEYWORD_SHORT = 'cls'.freeze
@@ -0,0 +1,62 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
+ #
4
+ # Set the current context pointer.
5
+ # Alternatively if no value is provided, just show the context.
6
+ #
7
+
8
+ module Gloo
9
+ module Verbs
10
+ class Context < Gloo::Core::Verb
11
+
12
+ KEYWORD = 'context'.freeze
13
+ KEYWORD_SHORT = '@'.freeze
14
+
15
+ #
16
+ # Run the verb.
17
+ #
18
+ def run
19
+ set_context if @tokens.token_count > 1
20
+ show_context
21
+ end
22
+
23
+ #
24
+ # Show the current context.
25
+ #
26
+ def show_context
27
+ @engine.log.show "Context: #{@engine.heap.context}"
28
+ end
29
+
30
+ #
31
+ # Get the Verb's keyword.
32
+ #
33
+ def self.keyword
34
+ return KEYWORD
35
+ end
36
+
37
+ #
38
+ # Get the Verb's keyword shortcut.
39
+ #
40
+ def self.keyword_shortcut
41
+ return KEYWORD_SHORT
42
+ end
43
+
44
+ # ---------------------------------------------------------------------
45
+ # Private functions
46
+ # ---------------------------------------------------------------------
47
+
48
+ private
49
+
50
+ #
51
+ # Set the context to the given path.
52
+ #
53
+ def set_context
54
+ path = @tokens.second
55
+ @engine.heap.context.set_to path
56
+ @engine.heap.it.set_to path
57
+ @engine.log.debug "Context set to #{@engine.heap.context}"
58
+ end
59
+
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,68 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
+ #
4
+ # Create an object, optionally of a type.
5
+ #
6
+
7
+ module Gloo
8
+ module Verbs
9
+ class Create < Gloo::Core::Verb
10
+
11
+ KEYWORD = 'create'.freeze
12
+ KEYWORD_SHORT = '`'.freeze
13
+ AS = 'as'.freeze
14
+ VAL = ':'.freeze
15
+ NO_NAME_ERR = 'Object name is missing!'.freeze
16
+
17
+ #
18
+ # Run the verb.
19
+ #
20
+ def run
21
+ name = @tokens.second
22
+ type = @tokens.after_token( AS )
23
+ value = @tokens.after_token( VAL )
24
+
25
+ unless name
26
+ @engine.err NO_NAME_ERR
27
+ return
28
+ end
29
+ create name, type, value
30
+ end
31
+
32
+ #
33
+ # Get the Verb's keyword.
34
+ #
35
+ def self.keyword
36
+ return KEYWORD
37
+ end
38
+
39
+ #
40
+ # Get the Verb's keyword shortcut.
41
+ #
42
+ def self.keyword_shortcut
43
+ return KEYWORD_SHORT
44
+ end
45
+
46
+ # ---------------------------------------------------------------------
47
+ # Private functions
48
+ # ---------------------------------------------------------------------
49
+
50
+ private
51
+
52
+ #
53
+ # Create an object with given name of given type with
54
+ # the given initial value.
55
+ #
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 } )
61
+
62
+ obj.add_default_children if obj&.add_children_on_create?
63
+ @engine.heap.it.set_to value
64
+ end
65
+
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,56 @@
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( @engine, @tokens.params )
25
+ cmd = expr.evaluate
26
+ @engine.log.debug "starting cmd: #{cmd}"
27
+
28
+ pid = fork { exec( cmd ) }
29
+ Process.wait pid
30
+
31
+ # pid = spawn cmd
32
+ # Process.wait pid
33
+ @engine.log.debug "done executing cmd: #{cmd}"
34
+
35
+ # system expr.evaluate #, chdir: Dir.pwd
36
+ # `#{expr.evaluate}`
37
+ # exec expr.evaluate
38
+ end
39
+
40
+ #
41
+ # Get the Verb's keyword.
42
+ #
43
+ def self.keyword
44
+ return KEYWORD
45
+ end
46
+
47
+ #
48
+ # Get the Verb's keyword shortcut.
49
+ #
50
+ def self.keyword_shortcut
51
+ return KEYWORD_SHORT
52
+ end
53
+
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,49 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2022 Eric Crane. All rights reserved.
3
+ #
4
+ # Show all the currently loaded files.
5
+ #
6
+
7
+ module Gloo
8
+ module Verbs
9
+ class Files < Gloo::Core::Verb
10
+
11
+ KEYWORD = 'files'.freeze
12
+ KEYWORD_SHORT = 'fs'.freeze
13
+
14
+ #
15
+ # Run the verb.
16
+ #
17
+ def run
18
+ return unless @engine.persist_man.maps
19
+
20
+ @engine.persist_man.maps.each do |map|
21
+ # puts "#{map.obj.name} - #{map.pn}"
22
+ @engine.log.show "#{map.obj.name} - #{map.pn}"
23
+ end
24
+ @engine.heap.it.set_to @engine.persist_man.maps.count
25
+ end
26
+
27
+ #
28
+ # Get the Verb's keyword.
29
+ #
30
+ def self.keyword
31
+ return KEYWORD
32
+ end
33
+
34
+ #
35
+ # Get the Verb's keyword shortcut.
36
+ #
37
+ def self.keyword_shortcut
38
+ return KEYWORD_SHORT
39
+ end
40
+
41
+ # ---------------------------------------------------------------------
42
+ # Private functions
43
+ # ---------------------------------------------------------------------
44
+
45
+ private
46
+
47
+ end
48
+ end
49
+ end
@@ -6,7 +6,7 @@
6
6
 
7
7
  module Gloo
8
8
  module Verbs
9
- class Help < GlooLang::Core::Verb
9
+ class Help < Gloo::Core::Verb
10
10
 
11
11
  KEYWORD = 'help'.freeze
12
12
  KEYWORD_SHORT = '?'.freeze