gloo 3.4.1 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ac56d6b0d2298092e23e0bf352b6b5c77bfbf0d231b060003a404bc8e313e269
4
- data.tar.gz: 9524d5e521c258dd5922c49c3c8dfcef2c52f57d0dff02306bfdb5ed3f1d0baa
3
+ metadata.gz: b527dd8c4837506689358a05681e7e81ba5804aeb617815db80e014a6f0f381b
4
+ data.tar.gz: 9d0d089ff54f1c669ee3b1009411e8a0310ed01792b008946f3fee8feff89313
5
5
  SHA512:
6
- metadata.gz: c6e81f7c12f73b7736c79be525c23a300b231fbb76884490ef1b0b87ff85f3e85533ef708edb4b1044d99e443b7fb0df3f39551dce69b6d6dd91a3d2692dc472
7
- data.tar.gz: 3c50b4ffba3590217bcd2641a190e196a472620321a5f23eeb07d8e5cf24d19ba81d675497143bf44ea4c389d308ae65446ceee8be50037e5dbbc26c13cfad8f
6
+ metadata.gz: f0632bc38a33051cbe970e0f29e01fac34d29ad9988df31773518c5cdc4d501a9462ff9a3c17fd54fa5db8b5c5326fa890eb8a1d395d7dedef057b5e41da16fc
7
+ data.tar.gz: 6370739e3e635f6659ed5f28c62fd7d858cd8cb7b02e2115c29119434b8459e5cdb78dc9d1f3a547424425e41242d000216b9f89899734aa7d1e9206b4282662
data/lib/VERSION CHANGED
@@ -1 +1 @@
1
- 3.4.1
1
+ 3.5.0
data/lib/VERSION_NOTES CHANGED
@@ -1,3 +1,11 @@
1
+ 3.5.0 - 2024.10.18
2
+ - check obj for message alternate to tell
3
+ - new base object messages
4
+ - fixes issue with single row returned from query
5
+ - adds on_error event
6
+ - use aliases in pwd obj
7
+
8
+
1
9
  3.4.1 - 2024.09.23
2
10
  - Removes old, unused sound objects
3
11
  - Adds support for lib folder in gloo rather than in the project folder
data/lib/gloo/app/args.rb CHANGED
@@ -51,12 +51,12 @@ module Gloo
51
51
  return true unless app?
52
52
 
53
53
  if @app_path.nil?
54
- @engine.log.error "App Path required to run in App mode."
54
+ @engine.err "App Path required to run in App mode."
55
55
  return false
56
56
  end
57
57
 
58
58
  unless File.directory? @app_path
59
- @engine.log.error "'#{@app_path}' is not a valid directory."
59
+ @engine.err "'#{@app_path}' is not a valid directory."
60
60
  return false
61
61
  end
62
62
 
@@ -201,7 +201,7 @@ module Gloo
201
201
  begin
202
202
  @parser.run @last_cmd
203
203
  rescue => e
204
- err e.message
204
+ log_exception e
205
205
  end
206
206
  end
207
207
 
@@ -282,11 +282,30 @@ module Gloo
282
282
  # Report an error.
283
283
  # Write it to the log and set the heap error value.
284
284
  #
285
- def err( msg )
285
+ def err( msg, backtrace=nil )
286
286
  @log.error msg
287
287
  @heap.error.set_to msg
288
+
289
+ @event_manager.on_error( msg, backtrace)
288
290
  end
289
291
 
292
+ #
293
+ # Log an exception.
294
+ # This function does not log the full backtrace, but
295
+ # does write part of it to the log.
296
+ #
297
+ def log_exception ex
298
+ # Get the stack trace, and if needed truncate to fit.
299
+ msg_lines = ex.backtrace
300
+ if msg_lines.count > 27
301
+ msg_lines = msg_lines[0..13] + [ '... truncated ...' ] + msg_lines[-13..-1]
302
+ end
303
+ backtrace = msg_lines.join( "\n" )
304
+ @log.error backtrace
305
+
306
+ err( ex.message, backtrace)
307
+ end
308
+
290
309
  end
291
310
  end
292
311
  end
@@ -30,8 +30,7 @@ module Gloo
30
30
  o = clazz.new
31
31
  return o.convert( value )
32
32
  rescue => e
33
- @engine.log.error e.message
34
- @engine.heap.error.set_to e.message
33
+ @engine.log_exception e
35
34
  end
36
35
 
37
36
  return default
@@ -190,7 +190,7 @@ module Gloo
190
190
  #
191
191
  def add_key( keyword )
192
192
  if @keywords.include?( keyword )
193
- # @engine.log.error "duplicate keyword '#{keyword}'"
193
+ # @engine.err "duplicate keyword '#{keyword}'"
194
194
  return
195
195
  end
196
196
 
@@ -72,6 +72,25 @@ module Gloo
72
72
  arr.each { |o| Gloo::Exec::Dispatch.message( @engine, 'run', o ) }
73
73
  end
74
74
 
75
+ #
76
+ # Run the on_error scripts in any open objects.
77
+ # For each on_error script found, look for the error_data container
78
+ # and set the error message and backtrace.
79
+ #
80
+ def on_error msg, backtrace
81
+ @engine.log.debug 'on_error event'
82
+ arr = Gloo::Core::ObjFinder.by_name( @engine, 'on_error' )
83
+ arr.each do |o|
84
+ data = o.parent.find_child 'error_data'
85
+ if data
86
+ data.find_child( 'message' ).set_value msg
87
+ data.find_child( 'backtrace' ).set_value backtrace
88
+ end
89
+
90
+ Gloo::Exec::Dispatch.message( @engine, 'run', o )
91
+ end
92
+ end
93
+
75
94
  end
76
95
  end
77
96
  end
@@ -164,7 +164,7 @@ module Gloo
164
164
  #
165
165
  def create_new( name, value, type, parent )
166
166
  unless parent
167
- @engine.log.error "Could not create object. Bad path: #{name}"
167
+ @engine.err "Could not create object. Bad path: #{name}"
168
168
  return nil
169
169
  end
170
170
 
@@ -202,7 +202,7 @@ module Gloo
202
202
  end
203
203
 
204
204
  unless t.can_create?
205
- @engine.log.error "'#{type_name}' cannot be created."
205
+ @engine.err "'#{type_name}' cannot be created."
206
206
  return nil
207
207
  end
208
208
 
@@ -138,7 +138,7 @@ module Gloo
138
138
  o = "msg_#{msg}"
139
139
  return self.public_send( o ) if self.respond_to? o
140
140
 
141
- @engine.log.error "Message #{msg} not implemented"
141
+ @engine.err "Message #{msg} not implemented"
142
142
  return false
143
143
  end
144
144
 
data/lib/gloo/core/obj.rb CHANGED
@@ -216,6 +216,30 @@ module Gloo
216
216
  return nil
217
217
  end
218
218
 
219
+ #
220
+ # Find a child, resolve any alias references.
221
+ # This returns the object, not the value.
222
+ #
223
+ def find_child_resolve_alias( name )
224
+ o = find_child name
225
+ return nil unless o
226
+
227
+ o = Gloo::Objs::Alias.resolve_alias( @engine, o )
228
+ return o
229
+ end
230
+
231
+ #
232
+ # Find a child, resolve any alias references,
233
+ # and return the object's value.
234
+ #
235
+ def find_child_value( name )
236
+ o = find_child name
237
+ return nil unless o
238
+
239
+ o = Gloo::Objs::Alias.resolve_alias( @engine, o )
240
+ return o&.value
241
+ end
242
+
219
243
  #
220
244
  # Get the index of the child with the given name.
221
245
  #
@@ -264,7 +288,7 @@ module Gloo
264
288
  # Get a list of message names that this object receives.
265
289
  #
266
290
  def self.messages
267
- return %w[reload unload]
291
+ return %w[reload unload blank? contains?]
268
292
  end
269
293
 
270
294
  #
@@ -282,7 +306,7 @@ module Gloo
282
306
  @params = params
283
307
  return self.dispatch msg if self.can_receive_message? msg
284
308
 
285
- @engine.log.error "Object #{self.name} cannot receive message #{msg}"
309
+ @engine.err "Object #{self.name} cannot receive message #{msg}"
286
310
  return false
287
311
  end
288
312
 
@@ -295,7 +319,7 @@ module Gloo
295
319
  self.public_send( o )
296
320
  return true
297
321
  else
298
- @engine.log.error "Message #{msg} not implemented"
322
+ @engine.err "Message #{msg} not implemented"
299
323
  return false
300
324
  end
301
325
  end
@@ -305,7 +329,7 @@ module Gloo
305
329
  #
306
330
  def msg_unload
307
331
  if self.root?
308
- @engine.log.error 'Cannot unload the root object.'
332
+ @engine.err 'Cannot unload the root object.'
309
333
  return
310
334
  end
311
335
 
@@ -318,13 +342,31 @@ module Gloo
318
342
  #
319
343
  def msg_reload
320
344
  if self.root?
321
- @engine.log.error 'Cannot reload the root object.'
345
+ @engine.err 'Cannot reload the root object.'
322
346
  return
323
347
  end
324
348
 
325
349
  @engine.persist_man.reload self
326
350
  end
327
351
 
352
+ #
353
+ # Check to see if the value is blank.
354
+ #
355
+ def msg_blank?
356
+ val_blank = value.blank?
357
+ @engine.heap.it.set_to val_blank
358
+ return val_blank
359
+ end
360
+
361
+ #
362
+ # Check to see if there are children.
363
+ #
364
+ def msg_contains?
365
+ has_children = child_count.positive?
366
+ @engine.heap.it.set_to has_children
367
+ return has_children
368
+ end
369
+
328
370
 
329
371
  # ---------------------------------------------------------------------
330
372
  # Render
@@ -31,7 +31,7 @@ module Gloo
31
31
  verb = dic.find_verb( tokens.verb )
32
32
  return verb.new( @engine, tokens, params ) if verb
33
33
 
34
- @engine.log.error "Verb '#{tokens.verb}' was not found."
34
+ @engine.err "Verb '#{tokens.verb}' was not found."
35
35
  return nil
36
36
  end
37
37
 
data/lib/gloo/core/pn.rb CHANGED
@@ -150,7 +150,7 @@ module Gloo
150
150
  @elements[ 0..-2 ].each do |e|
151
151
  o = o.find_child( e )
152
152
  if o.nil?
153
- @engine.log.error "Object '#{e}' was not found."
153
+ @engine.err "Object '#{e}' was not found."
154
154
  return nil
155
155
  end
156
156
  end
@@ -12,6 +12,23 @@ module Gloo
12
12
  module Exec
13
13
  class Dispatch
14
14
 
15
+ OBJ_NOT_FOUND_ERR = 'Object was not found: '.freeze
16
+
17
+ #
18
+ # Send a message to an object of a given name (and path).
19
+ # Once the object is found, the message is dispatched.
20
+ #
21
+ def self.send_message( engine, msg, to_obj_pn, params = nil )
22
+ pn = Gloo::Core::Pn.new( engine, to_obj_pn )
23
+ target_obj = pn.resolve
24
+
25
+ unless target_obj
26
+ engine.err "#{OBJ_NOT_FOUND_ERR} #{to_obj_pn}"
27
+ return
28
+ end
29
+ Gloo::Exec::Dispatch.message( engine, msg, target_obj, params )
30
+ end
31
+
15
32
  #
16
33
  # Dispatch the given message to the given object.
17
34
  #
@@ -36,7 +36,7 @@ module Gloo
36
36
  if o
37
37
  o.send_message 'run'
38
38
  else
39
- engine.log.error "Could not send message to object. Bad path: #{path_name}"
39
+ engine.err "Could not send message to object. Bad path: #{path_name}"
40
40
  end
41
41
  end
42
42
 
@@ -160,7 +160,7 @@ module Gloo
160
160
 
161
161
  heads = rs.fields if rs
162
162
  rescue => e
163
- @engine.err e.message
163
+ @engine.log_exception e
164
164
  end
165
165
 
166
166
  return [ heads, data ]
@@ -242,7 +242,7 @@ module Gloo
242
242
  }
243
243
  Mysql2::Client.new( h )
244
244
  rescue => e
245
- @engine.err e.message
245
+ @engine.log_exception e
246
246
  @engine.heap.it.set_to false
247
247
  return false
248
248
  end
@@ -189,7 +189,7 @@ module Gloo
189
189
  begin
190
190
  result = pg_conn.exec( "SELECT NOW()" )
191
191
  rescue => e
192
- @engine.err e.message
192
+ @engine.log_exception e
193
193
  @engine.heap.it.set_to false
194
194
  return false
195
195
  end
@@ -81,7 +81,7 @@ module Gloo
81
81
  result = db.query( sql_value, param_array )
82
82
  process_result( result, db )
83
83
  rescue => e
84
- @engine.err e.message
84
+ @engine.log_exception e
85
85
  return
86
86
  end
87
87
  end
@@ -105,7 +105,7 @@ module Gloo
105
105
  app.add_db_time elapsed if app
106
106
  return result
107
107
  rescue => e
108
- @engine.err e.message
108
+ @engine.log_exception e
109
109
  return
110
110
  end
111
111
  end
@@ -33,8 +33,13 @@ module Gloo
33
33
 
34
34
  #
35
35
  # Does the data contain a single row?
36
+ # OR, if the result is empty, return false.
36
37
  #
37
38
  def single_row_result?
39
+ if @result_can && ( @result_can.child_count == 0 )
40
+ return false
41
+ end
42
+
38
43
  return @data.count == 1
39
44
  end
40
45
 
@@ -108,7 +113,7 @@ module Gloo
108
113
  def update_single_row
109
114
  row = @data[0]
110
115
  @heads.each_with_index do |h, i|
111
- child = @result_can.find_child h
116
+ child = @result_can.find_child h
112
117
  child.set_value row[i] if child
113
118
  end
114
119
  end
@@ -162,7 +162,7 @@ module Gloo
162
162
  sql = "SELECT COUNT(name) FROM sqlite_master WHERE type='table'"
163
163
  db.get_first_value sql
164
164
  rescue => e
165
- @engine.err e.message
165
+ @engine.log_exception e
166
166
  @engine.heap.it.set_to false
167
167
  return false
168
168
  end
@@ -67,7 +67,7 @@ module Gloo
67
67
  result = o.run_query
68
68
  return result
69
69
  rescue => e
70
- @engine.err e.message
70
+ @engine.log_exception e
71
71
  return nil
72
72
  end
73
73
  else
@@ -196,7 +196,7 @@ module Gloo
196
196
  helper = Gloo::WebSvr::TableRenderer.new( @engine )
197
197
  return helper.data_to_table params
198
198
  rescue => e
199
- @engine.err e.message
199
+ @engine.log_exception e
200
200
  return nil
201
201
  end
202
202
  end
@@ -98,7 +98,7 @@ module Gloo
98
98
  set_result result
99
99
  @engine.heap.it.set_to result
100
100
  rescue => e
101
- @engine.err e.message
101
+ @engine.log_exception e
102
102
  end
103
103
  end
104
104
 
@@ -39,8 +39,7 @@ module Gloo
39
39
  # Returns nil if there is none.
40
40
  #
41
41
  def salt
42
- o = find_child SALT
43
- return o&.value
42
+ return find_child_value SALT
44
43
  end
45
44
 
46
45
  #
@@ -48,15 +47,14 @@ module Gloo
48
47
  # Returns nil if there is none.
49
48
  #
50
49
  def password
51
- o = find_child PASSWORD
52
- return o&.value
50
+ return find_child_value PASSWORD
53
51
  end
54
52
 
55
53
  #
56
54
  # Update the password value.
57
55
  #
58
56
  def update_password( new_pwd )
59
- o = find_child PASSWORD
57
+ o = find_child_resolve_alias PASSWORD
60
58
  return unless o
61
59
 
62
60
  o.set_value new_pwd
@@ -74,15 +72,14 @@ module Gloo
74
72
  # Returns nil if there is none.
75
73
  #
76
74
  def hash
77
- o = find_child HASH
78
- return o&.value
75
+ return find_child_value HASH
79
76
  end
80
77
 
81
78
  #
82
79
  # Update the hashed password value.
83
80
  #
84
81
  def update_hash( new_hash )
85
- o = find_child HASH
82
+ o = find_child_resolve_alias HASH
86
83
  return unless o
87
84
 
88
85
  o.set_value new_hash
@@ -242,7 +242,7 @@ module Gloo
242
242
  begin
243
243
  return e.render( render_ƒ )
244
244
  rescue => e
245
- engine.err e.message
245
+ engine.log_exception e
246
246
  return ''
247
247
  end
248
248
  end
@@ -354,7 +354,7 @@ module Gloo
354
354
  elsif is_text?
355
355
  contents = render_text params
356
356
  else
357
- @engine.log.error "Unknown content type: #{content_type}"
357
+ @engine.err "Unknown content type: #{content_type}"
358
358
  return nil
359
359
  end
360
360
 
@@ -50,6 +50,7 @@ module Gloo
50
50
  CODE = 'code'.freeze
51
51
  ELAPSED = 'elapsed'.freeze
52
52
  DB = 'db'.freeze
53
+ PAGE = 'page'.freeze
53
54
 
54
55
  # Container with pages in the web app.
55
56
  PAGES = 'pages'.freeze
@@ -426,7 +427,7 @@ module Gloo
426
427
  @engine.stop_running_app
427
428
  # The running app will call the stop function (below)
428
429
  else
429
- @engine.log.error SERVER_NOT_RUNNING
430
+ @engine.err SERVER_NOT_RUNNING
430
431
  end
431
432
  end
432
433
 
@@ -437,7 +438,7 @@ module Gloo
437
438
  if @router
438
439
  @router.show_routes
439
440
  else
440
- @engine.log.error SERVER_NOT_RUNNING
441
+ @engine.err SERVER_NOT_RUNNING
441
442
  end
442
443
  end
443
444
 
@@ -558,7 +559,7 @@ module Gloo
558
559
  # This is done after the page is rendered and before
559
560
  # the on_response event is fired.
560
561
  #
561
- def set_response_data( request, response )
562
+ def set_response_data( request, response, page_obj=nil )
562
563
  data = find_child RESPONSE_DATA
563
564
  return unless data
564
565
  data = Gloo::Objs::Alias.resolve_alias( @engine, data )
@@ -567,6 +568,10 @@ module Gloo
567
568
  data.find_child( DB )&.set_value( request.db )
568
569
  data.find_child( TYPE )&.set_value( response.type )
569
570
  data.find_child( CODE )&.set_value( response.code )
571
+
572
+ if page_obj
573
+ data.find_child( PAGE )&.set_value( page_obj.pn )
574
+ end
570
575
  end
571
576
 
572
577
 
@@ -35,7 +35,7 @@ module Gloo
35
35
  #
36
36
  def load
37
37
  unless @mech.exist?( @pn )
38
- @engine.log.error "File '#{@pn}' does not exist."
38
+ @engine.err "File '#{@pn}' does not exist."
39
39
  return
40
40
  end
41
41
 
@@ -37,7 +37,7 @@ module Gloo
37
37
  if @obj
38
38
  @engine.log.debug "Loaded object: #{@obj.name}"
39
39
  else
40
- @engine.log.error "Error loading file at #{@pn}"
40
+ @engine.err "Error loading file at #{@pn}"
41
41
  end
42
42
  end
43
43
 
@@ -0,0 +1,54 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2024 Eric Crane. All rights reserved.
3
+ #
4
+ # Alternate version of the Tell verb.
5
+ # Reads better to check object conditions.
6
+ #
7
+
8
+ module Gloo
9
+ module Verbs
10
+ class Check < Gloo::Core::Verb
11
+
12
+ KEYWORD = 'check'.freeze
13
+ KEYWORD_SHORT = '<-'.freeze
14
+ FOR = 'for'.freeze
15
+ UNKNOWN_MSG_ERR = 'Missing message!'.freeze
16
+
17
+ #
18
+ # Run the verb.
19
+ #
20
+ def run
21
+ msg = @tokens.after_token( FOR )
22
+
23
+ unless msg
24
+ @engine.err( UNKNOWN_MSG_ERR )
25
+ return
26
+ end
27
+
28
+ Gloo::Exec::Dispatch.send_message(
29
+ @engine, msg, @tokens.second, @params )
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
+ end
53
+ end
54
+ end
@@ -83,6 +83,7 @@ module Gloo
83
83
  #
84
84
  def redirect_to_page
85
85
  if @engine.app_running?
86
+ @engine.exec_env.running_script.break_out
86
87
  @engine.running_app.obj.redirect = @target_obj
87
88
  else
88
89
  @engine.err APP_NOT_RUNING_ERR
@@ -1,7 +1,9 @@
1
1
  # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
2
  # Copyright:: Copyright (c) 2019 Eric Crane. All rights reserved.
3
3
  #
4
- # Create an object, optionally of a type.
4
+ # Send a message to an object.
5
+ # Tell the object to do some known action.
6
+ # Also see the Check verb.
5
7
  #
6
8
 
7
9
  module Gloo
@@ -11,18 +13,21 @@ module Gloo
11
13
  KEYWORD = 'tell'.freeze
12
14
  KEYWORD_SHORT = '->'.freeze
13
15
  TO = 'to'.freeze
14
- OBJ_NOT_FOUND_ERR = 'Object was not found: '.freeze
15
16
  UNKNOWN_MSG_ERR = 'Missing message!'.freeze
16
17
 
17
18
  #
18
19
  # Run the verb.
19
20
  #
20
21
  def run
21
- setup_msg
22
- return unless @msg
22
+ msg = @tokens.after_token( TO )
23
23
 
24
- setup_target
25
- dispatch_msg
24
+ unless msg
25
+ @engine.err( UNKNOWN_MSG_ERR )
26
+ return
27
+ end
28
+
29
+ Gloo::Exec::Dispatch.send_message(
30
+ @engine, msg, @tokens.second, @params )
26
31
  end
27
32
 
28
33
  #
@@ -45,36 +50,6 @@ module Gloo
45
50
 
46
51
  private
47
52
 
48
- #
49
- # Lookup the message to send.
50
- #
51
- def setup_msg
52
- @msg = @tokens.after_token( TO )
53
-
54
- @engine.err( UNKNOWN_MSG_ERR ) unless @msg
55
- end
56
-
57
- #
58
- # Setup the target of the message.
59
- #
60
- def setup_target
61
- @obj_name = @tokens.second
62
- pn = Gloo::Core::Pn.new( @engine, @obj_name )
63
- @target_obj = pn.resolve
64
- end
65
-
66
- #
67
- # Dispatch the message to the target object.
68
- #
69
- def dispatch_msg
70
- if @target_obj
71
- Gloo::Exec::Dispatch.message(
72
- @engine, @msg, @target_obj, @params )
73
- else
74
- @engine.err "#{OBJ_NOT_FOUND_ERR} #{@obj_name}"
75
- end
76
- end
77
-
78
53
  end
79
54
  end
80
55
  end
@@ -35,6 +35,7 @@ module Gloo
35
35
  #
36
36
  def handle request
37
37
  @request = request
38
+ page_obj = nil
38
39
 
39
40
  page, id = @server_obj.router.page_for_route( @request.path, @request.method )
40
41
  @engine.log.debug "Found Page: #{page&.name}" if page
@@ -44,12 +45,13 @@ module Gloo
44
45
  result = handle_file page
45
46
  else
46
47
  result = handle_page page
48
+ page_obj = page
47
49
  end
48
50
  else
49
51
  result = server_error_result
50
52
  end
51
53
 
52
- return result
54
+ return result, page_obj
53
55
  end
54
56
 
55
57
  #
@@ -60,11 +60,11 @@ module Gloo
60
60
  @handler.server_obj.set_request_data self
61
61
  @handler.server_obj.run_on_request
62
62
 
63
- result = @handler.handle self
63
+ result, page_obj = @handler.handle self
64
64
  finish_timer
65
65
 
66
66
  # Run the on_response script if there is one.
67
- @handler.server_obj.set_response_data self, result
67
+ @handler.server_obj.set_response_data( self, result, page_obj )
68
68
  @handler.server_obj.run_on_response
69
69
 
70
70
  return result
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gloo
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.1
4
+ version: 3.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Crane
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-09-23 00:00:00.000000000 Z
11
+ date: 2024-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -483,6 +483,7 @@ files:
483
483
  - lib/gloo/verbs/alert.rb
484
484
  - lib/gloo/verbs/beep.rb
485
485
  - lib/gloo/verbs/break.rb
486
+ - lib/gloo/verbs/check.rb
486
487
  - lib/gloo/verbs/cls.rb
487
488
  - lib/gloo/verbs/context.rb
488
489
  - lib/gloo/verbs/create.rb