gloo 3.2.0 → 3.4.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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/gloo.gemspec +9 -3
  4. data/lib/VERSION +1 -1
  5. data/lib/VERSION_NOTES +14 -0
  6. data/lib/gloo/app/engine.rb +1 -1
  7. data/lib/gloo/app/log.rb +15 -16
  8. data/lib/gloo/app/platform.rb +11 -84
  9. data/lib/gloo/app/prompt.rb +90 -0
  10. data/lib/gloo/app/table.rb +51 -0
  11. data/lib/gloo/convert/falseclass_to_integer.rb +20 -0
  12. data/lib/gloo/convert/nilclass_to_date.rb +21 -0
  13. data/lib/gloo/convert/nilclass_to_datetime.rb +21 -0
  14. data/lib/gloo/convert/nilclass_to_integer.rb +21 -0
  15. data/lib/gloo/convert/nilclass_to_string.rb +21 -0
  16. data/lib/gloo/convert/nilclass_to_time.rb +21 -0
  17. data/lib/gloo/convert/trueclass_to_integer.rb +20 -0
  18. data/lib/gloo/core/error.rb +7 -0
  19. data/lib/gloo/core/gloo_system.rb +7 -14
  20. data/lib/gloo/core/it.rb +7 -0
  21. data/lib/gloo/core/obj.rb +7 -0
  22. data/lib/gloo/core/parser.rb +6 -3
  23. data/lib/gloo/objs/basic/container.rb +1 -2
  24. data/lib/gloo/objs/basic/integer.rb +24 -1
  25. data/lib/gloo/objs/basic/string.rb +116 -1
  26. data/lib/gloo/objs/basic/string_generator.rb +49 -0
  27. data/lib/gloo/objs/basic/text.rb +1 -17
  28. data/lib/gloo/objs/cli/menu.rb +5 -4
  29. data/lib/gloo/objs/cli/select.rb +3 -2
  30. data/lib/gloo/objs/{basic → ctrl}/function.rb +12 -0
  31. data/lib/gloo/objs/data/markdown.rb +59 -6
  32. data/lib/gloo/objs/data/mysql.rb +39 -27
  33. data/lib/gloo/objs/data/pg.rb +1 -1
  34. data/lib/gloo/objs/data/query_result.rb +4 -9
  35. data/lib/gloo/objs/data/table.rb +1 -1
  36. data/lib/gloo/objs/security/cipher.rb +193 -0
  37. data/lib/gloo/objs/security/password.rb +167 -0
  38. data/lib/gloo/objs/system/file_handle.rb +1 -3
  39. data/lib/gloo/objs/web/json.rb +3 -0
  40. data/lib/gloo/objs/web_svr/page.rb +26 -6
  41. data/lib/gloo/objs/web_svr/partial.rb +7 -6
  42. data/lib/gloo/objs/web_svr/svr.rb +267 -14
  43. data/lib/gloo/verbs/invoke.rb +80 -0
  44. data/lib/gloo/verbs/version.rb +1 -1
  45. data/lib/gloo/web_svr/asset.rb +54 -33
  46. data/lib/gloo/web_svr/config.rb +1 -1
  47. data/lib/gloo/web_svr/embedded_renderer.rb +1 -1
  48. data/lib/gloo/web_svr/handler.rb +6 -4
  49. data/lib/gloo/web_svr/request.rb +34 -8
  50. data/lib/gloo/web_svr/response.rb +14 -2
  51. data/lib/gloo/web_svr/response_code.rb +1 -1
  52. data/lib/gloo/web_svr/routing/router.rb +1 -2
  53. data/lib/gloo/web_svr/routing/show_routes.rb +4 -7
  54. data/lib/gloo/web_svr/server.rb +1 -1
  55. data/lib/gloo/web_svr/session.rb +161 -0
  56. data/lib/gloo/web_svr/table_renderer.rb +1 -1
  57. metadata +81 -26
  58. data/lib/gloo/objs/cli/banner.rb +0 -118
  59. data/lib/gloo/objs/cli/bar.rb +0 -133
  60. data/lib/gloo/objs/cli/pastel.rb +0 -104
@@ -11,18 +11,45 @@ module Gloo
11
11
  KEYWORD = 'server'.freeze
12
12
  KEYWORD_SHORT = 'svr'.freeze
13
13
 
14
- # Configuration
15
- SCHEME = 'scheme'.freeze
14
+ # ---------------------------------------------------------------------
15
+ # CONFIGURATION KEYS
16
+ # ---------------------------------------------------------------------
17
+ CONFIG = 'config'.freeze
18
+ SCHEME = 'scheme'.freeze
19
+ HTTP = 'http'.freeze
20
+ HTTPS = 'https'.freeze
16
21
  HOST = 'host'.freeze
17
22
  PORT = 'port'.freeze
23
+ SESSION_NAME = 'session_name'.freeze
24
+ ENCRYPT_KEY = 'encryption_key'.freeze
25
+ ENCRYPT_IV = 'encryption_iv'.freeze
26
+ COOKIE_EXPIRES = 'cookie_expires'.freeze
27
+ COOKIE_PATH = 'cookie_path'.freeze
28
+ DEFAULT_COOKIE_PATH = '/'.freeze
18
29
 
19
30
  # SSL Configuration
20
31
  SSL_CERT = 'ssl_cert'.freeze
21
32
  SSL_KEY = 'ssl_key'.freeze
22
33
 
34
+ # ---------------------------------------------------------------------
35
+ # OTHER KEYS
36
+ # ---------------------------------------------------------------------
37
+
23
38
  # Events
24
39
  ON_START = 'on_start'.freeze
25
40
  ON_STOP = 'on_stop'.freeze
41
+ ON_REQUEST = 'on_request'.freeze
42
+ ON_RESPONSE = 'on_response'.freeze
43
+ RESQUEST_DATA = 'request_data'.freeze
44
+ METHOD = 'method'.freeze
45
+ PATH = 'path'.freeze
46
+ QUERY = 'query'.freeze
47
+ IP = 'ip'.freeze
48
+ RESPONSE_DATA = 'response_data'.freeze
49
+ TYPE = 'type'.freeze
50
+ CODE = 'code'.freeze
51
+ ELAPSED = 'elapsed'.freeze
52
+ DB = 'db'.freeze
26
53
 
27
54
  # Container with pages in the web app.
28
55
  PAGES = 'pages'.freeze
@@ -34,6 +61,9 @@ module Gloo
34
61
  HOME = 'home'.freeze
35
62
  ERR_PAGE = 'error'.freeze
36
63
 
64
+ # Session
65
+ SESSION = 'session'.freeze
66
+
37
67
 
38
68
  # Messages
39
69
  SERVER_NOT_RUNNING = 'The web server is not running!'.freeze
@@ -44,6 +74,7 @@ module Gloo
44
74
  # of the one requested.
45
75
  #
46
76
  attr_accessor :redirect, :router, :asset, :embedded_renderer
77
+ attr_accessor :session
47
78
 
48
79
  #
49
80
  # The name of the object type.
@@ -74,12 +105,29 @@ module Gloo
74
105
  return false
75
106
  end
76
107
 
108
+ #
109
+ # Get the default layout for the app.
110
+ #
111
+ def default_page_layout
112
+ o = find_child LAYOUT
113
+ return nil unless o
114
+
115
+ o = Gloo::Objs::Alias.resolve_alias( @engine, o )
116
+ return o
117
+ end
118
+
119
+
120
+ # ---------------------------------------------------------------------
121
+ # Configuration
122
+ # ---------------------------------------------------------------------
123
+
77
124
  #
78
125
  # Get the Scheme (http or https) from the child object.
79
126
  # Returns nil if there is none.
80
127
  #
81
128
  def scheme_value
82
- scheme = find_child SCHEME
129
+ config = find_child CONFIG
130
+ scheme = config.find_child SCHEME
83
131
  return nil unless scheme
84
132
 
85
133
  return scheme.value
@@ -90,7 +138,8 @@ module Gloo
90
138
  # Returns nil if there is none.
91
139
  #
92
140
  def host_value
93
- host = find_child HOST
141
+ config = find_child CONFIG
142
+ host = config.find_child HOST
94
143
  return nil unless host
95
144
 
96
145
  return host.value
@@ -101,24 +150,163 @@ module Gloo
101
150
  # Returns nil if there is none.
102
151
  #
103
152
  def port_value
104
- port = find_child PORT
153
+ config = find_child CONFIG
154
+ port = config.find_child PORT
105
155
  return nil unless port
106
156
 
107
157
  return port.value
108
158
  end
109
159
 
160
+ #
161
+ # Is this server configured to use a session?
162
+ # It is if theere is a non-empty session name.
163
+ #
164
+ def use_session?
165
+ return ! session_name.blank?
166
+ end
110
167
 
111
168
  #
112
- # Get the default layout for the app.
169
+ # Get the session cookie name.
113
170
  #
114
- def default_page_layout
115
- o = find_child LAYOUT
171
+ def session_name
172
+ config = find_child CONFIG
173
+ session_name = config.find_child SESSION_NAME
174
+ return nil unless session_name
175
+
176
+ name = session_name.value
177
+ return nil if name.blank?
178
+
179
+ return name
180
+ end
181
+
182
+ #
183
+ # Get the key for the encryption cipher.
184
+ #
185
+ def encryption_key
186
+ config = find_child CONFIG
187
+ o = config.find_child ENCRYPT_KEY
116
188
  return nil unless o
117
189
 
118
190
  o = Gloo::Objs::Alias.resolve_alias( @engine, o )
191
+ return o.value
192
+ end
193
+
194
+ #
195
+ # Get the initialization vector for the cipher.
196
+ #
197
+ def encryption_iv
198
+ config = find_child CONFIG
199
+ o = config.find_child ENCRYPT_IV
200
+ return nil unless o
201
+
202
+ o = Gloo::Objs::Alias.resolve_alias( @engine, o )
203
+ return o.value
204
+ end
205
+
206
+ #
207
+ # Get the path for the session cookie.
208
+ # If not specified, use the root path.
209
+ #
210
+ def session_cookie_path
211
+ config = find_child CONFIG
212
+ o = config.find_child COOKIE_PATH
213
+ if o
214
+ return o.value
215
+ else
216
+ return DEFAULT_COOKIE_PATH
217
+ end
218
+ end
219
+
220
+ #
221
+ # Get the expiration time for the session cookie.
222
+ # If not specified, use one week from now.
223
+ #
224
+ def session_cookie_expires
225
+ config = find_child CONFIG
226
+ o = config.find_child COOKIE_EXPIRES
227
+ if o
228
+ dt = Chronic.parse( o.value )
229
+ return dt
230
+ else
231
+ return 1.week.from_now
232
+ end
233
+ end
234
+
235
+ #
236
+ # Should the session cookie be secure?
237
+ # Get the value from the scheme settings/config.
238
+ #
239
+ def session_cookie_secure
240
+ return scheme_value.downcase == HTTPS
241
+ end
242
+
243
+
244
+ # ---------------------------------------------------------------------
245
+ # Session
246
+ # ---------------------------------------------------------------------
247
+
248
+ #
249
+ # Get the session container object.
250
+ # If there is none, one will be created.
251
+ #
252
+ def session_container
253
+ o = find_child SESSION
254
+
255
+ unless o
256
+ o = add_session_container
257
+ end
258
+
119
259
  return o
120
260
  end
121
261
 
262
+ #
263
+ # Add the session container because it is missing.
264
+ #
265
+ def add_session_container
266
+ fac = @engine.factory
267
+ return fac.create_can SESSION, self
268
+ end
269
+
270
+ #
271
+ # Get the data from the session container.
272
+ # Data will be in the form of a hash ( key => value ).
273
+ #
274
+ def get_session_data
275
+ data = {}
276
+
277
+ session_container.children.each do |session_var|
278
+ key = session_var.name
279
+ value = session_var.value
280
+ data[ key ] = value
281
+ end
282
+
283
+ return data
284
+ end
285
+
286
+ #
287
+ # Get the session child object with the given value.
288
+ # Create the child if it does not exist.
289
+ #
290
+ def set_session_var( key, value )
291
+ child_obj = session_container.find_child( key )
292
+ unless child_obj
293
+ fac = @engine.factory
294
+ child_obj = fac.create_string key, value, session_obj
295
+ end
296
+ child_obj.value = value
297
+ end
298
+
299
+ #
300
+ # Clear out all session data.
301
+ # Important to do this after the response is sent
302
+ # to avoid holding on to data that is no longer needed.
303
+ #
304
+ def clear_session_data
305
+ session_container.children.each do |session_var|
306
+ session_var.value = ''
307
+ end
308
+ end
309
+
122
310
 
123
311
  # ---------------------------------------------------------------------
124
312
  # SSL
@@ -190,15 +378,20 @@ module Gloo
190
378
  def add_default_children
191
379
  fac = @engine.factory
192
380
 
193
- fac.create_string SCHEME, 'http', self
194
- fac.create_string HOST, 'localhost', self
195
- fac.create_string PORT, '8080', self
381
+ # Configuration
382
+ config = fac.create_can CONFIG, self
383
+ fac.create_string SCHEME, HTTP, config
384
+ fac.create_string HOST, 'localhost', config
385
+ fac.create_string PORT, '8080', config
196
386
 
197
387
  fac.create_script ON_START, '', self
198
388
  fac.create_script ON_STOP, '', self
199
389
 
390
+ fac.create_alias LAYOUT, nil, self
391
+ fac.create_alias HOME, nil, self
392
+ fac.create_alias ERR_PAGE, nil, self
393
+
200
394
  fac.create_can PAGES, self
201
- fac.create_can HOME, self
202
395
  end
203
396
 
204
397
 
@@ -274,6 +467,8 @@ module Gloo
274
467
 
275
468
  @embedded_renderer = Gloo::WebSvr::EmbeddedRenderer.new( @engine, self )
276
469
 
470
+ @session = Gloo::WebSvr::Session.new( @engine, self )
471
+
277
472
  run_on_start
278
473
  @engine.log.info "Web server started and listening…"
279
474
  end
@@ -283,6 +478,10 @@ module Gloo
283
478
  #
284
479
  def stop
285
480
  @engine.log.info "Stopping web server…"
481
+
482
+ # Last chance to clear out session data.
483
+ clear_session_data
484
+
286
485
  @web_server.stop
287
486
  @web_server = nil
288
487
  @router = nil
@@ -297,7 +496,7 @@ module Gloo
297
496
  # ---------------------------------------------------------------------
298
497
 
299
498
  #
300
- # Run the on render script if there is one.
499
+ # Run the on start script if there is one.
301
500
  #
302
501
  def run_on_start
303
502
  o = find_child ON_START
@@ -307,7 +506,7 @@ module Gloo
307
506
  end
308
507
 
309
508
  #
310
- # Run the on rendered script if there is one.
509
+ # Run the on stop script if there is one.
311
510
  #
312
511
  def run_on_stop
313
512
  o = find_child ON_STOP
@@ -316,6 +515,60 @@ module Gloo
316
515
  Gloo::Exec::Dispatch.message( @engine, 'run', o )
317
516
  end
318
517
 
518
+ #
519
+ # Run the on request script if there is one.
520
+ #
521
+ def run_on_request
522
+ o = find_child ON_REQUEST
523
+ return unless o
524
+ o = Gloo::Objs::Alias.resolve_alias( @engine, o )
525
+
526
+ Gloo::Exec::Dispatch.message( @engine, 'run', o )
527
+ end
528
+
529
+ #
530
+ # Run the on response script if there is one.
531
+ #
532
+ def run_on_response
533
+ o = find_child ON_RESPONSE
534
+ return unless o
535
+ o = Gloo::Objs::Alias.resolve_alias( @engine, o )
536
+
537
+ Gloo::Exec::Dispatch.message( @engine, 'run', o )
538
+ end
539
+
540
+ #
541
+ # Set up the request data for the page load.
542
+ # This is done before the on_request event is fired.
543
+ #
544
+ def set_request_data( request )
545
+ data = find_child RESQUEST_DATA
546
+ return unless data
547
+ data = Gloo::Objs::Alias.resolve_alias( @engine, data )
548
+
549
+ data.find_child( METHOD )&.set_value( request.method )
550
+ data.find_child( HOST )&.set_value( request.host )
551
+ data.find_child( PATH )&.set_value( request.path )
552
+ data.find_child( QUERY )&.set_value( request.query )
553
+ data.find_child( IP )&.set_value( request.ip )
554
+ end
555
+
556
+ #
557
+ # Set up the response data for the page load.
558
+ # This is done after the page is rendered and before
559
+ # the on_response event is fired.
560
+ #
561
+ def set_response_data( request, response )
562
+ data = find_child RESPONSE_DATA
563
+ return unless data
564
+ data = Gloo::Objs::Alias.resolve_alias( @engine, data )
565
+
566
+ data.find_child( ELAPSED )&.set_value( request.elapsed )
567
+ data.find_child( DB )&.set_value( request.db )
568
+ data.find_child( TYPE )&.set_value( response.type )
569
+ data.find_child( CODE )&.set_value( response.code )
570
+ end
571
+
319
572
 
320
573
  # ---------------------------------------------------------------------
321
574
  # Pages and standard elements.
@@ -0,0 +1,80 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2024 Eric Crane. All rights reserved.
3
+ #
4
+ # Invoke a function from a script.
5
+ #
6
+
7
+ module Gloo
8
+ module Verbs
9
+ class Invoke < Gloo::Core::Verb
10
+
11
+ KEYWORD = 'invoke'.freeze
12
+ KEYWORD_SHORT = '~>'.freeze
13
+
14
+ #
15
+ # Run the verb.
16
+ #
17
+ def run
18
+ if @tokens.token_count > 1
19
+ ob = @tokens.first
20
+
21
+ # Get the function object
22
+ pn = Gloo::Core::Pn.new( @engine, @tokens.second )
23
+ func = pn.resolve
24
+
25
+ # Is the object a function?
26
+ if func&.is_function?
27
+ params = get_params_arr
28
+
29
+ @engine.log.debug "invoking function: #{func.pn}"
30
+ result = func.invoke( params )
31
+ @engine.log.debug "function returned: #{result}"
32
+ @engine.heap.it.set_to result
33
+ return result
34
+ end
35
+ end
36
+ end
37
+
38
+ #
39
+ # Get the Verb's keyword.
40
+ #
41
+ def self.keyword
42
+ return KEYWORD
43
+ end
44
+
45
+ #
46
+ # Get the Verb's keyword shortcut.
47
+ #
48
+ def self.keyword_shortcut
49
+ return KEYWORD_SHORT
50
+ end
51
+
52
+ # ---------------------------------------------------------------------
53
+ # Private functions
54
+ # ---------------------------------------------------------------------
55
+
56
+ private
57
+
58
+ #
59
+ # Get params array.
60
+ #
61
+ def get_params_arr
62
+ @engine.log.debug "token params: #{@tokens.params}"
63
+ params = @tokens.params[1..-1]
64
+
65
+ @engine.log.info "params: #{params}"
66
+ evaluated_params = []
67
+
68
+ params.each do |p|
69
+ expr = Gloo::Expr::Expression.new( @engine, [ p ] )
70
+ evaluated_params << expr.evaluate
71
+ end
72
+
73
+ @engine.log.debug "evaluated_params: #{evaluated_params}"
74
+
75
+ return evaluated_params
76
+ end
77
+
78
+ end
79
+ end
80
+ end
@@ -55,7 +55,7 @@ module Gloo
55
55
  def show_vers_notes
56
56
  @engine.log.show "Gloo version notes..."
57
57
  notes = Gloo::App::Info.get_version_notes
58
- @engine.platform.show( notes, false, true )
58
+ @engine.platform.show notes
59
59
  end
60
60
 
61
61
  #
@@ -1,5 +1,5 @@
1
1
  # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 20124 Eric Crane. All rights reserved.
2
+ # Copyright:: Copyright (c) 2024 Eric Crane. All rights reserved.
3
3
  #
4
4
  # A helper class for static assets.
5
5
  #
@@ -8,9 +8,9 @@ module Gloo
8
8
  module WebSvr
9
9
  class Asset
10
10
 
11
- ASSETS_FOLDER = 'assets'.freeze
12
- IMAGES_FOLDER = 'images'.freeze
13
- STYLESHEETS_FOLDER = 'stylesheets'.freeze
11
+ ASSET_FOLDER = 'asset'.freeze
12
+ IMAGE_FOLDER = 'image'.freeze
13
+ STYLESHEET_FOLDER = 'stylesheet'.freeze
14
14
  JAVASCRIPT_FOLDER = 'javascript'.freeze
15
15
 
16
16
  CSS_TYPE = 'text/css'.freeze
@@ -42,29 +42,29 @@ module Gloo
42
42
  #
43
43
  # Get the asset folder in the project.
44
44
  #
45
- def assets_folder
46
- return File.join( @engine.settings.project_path, ASSETS_FOLDER )
45
+ def asset_folder
46
+ return File.join( @engine.settings.project_path, ASSET_FOLDER )
47
47
  end
48
48
 
49
49
  #
50
50
  # Get the images folder in the project.
51
51
  #
52
- def images_folder
53
- return File.join( assets_folder, IMAGES_FOLDER )
52
+ def image_folder
53
+ return File.join( asset_folder, IMAGE_FOLDER )
54
54
  end
55
55
 
56
56
  #
57
57
  # Get the stylesheets folder in the project.
58
58
  #
59
- def stylesheets_folder
60
- return File.join( assets_folder, STYLESHEETS_FOLDER )
59
+ def stylesheet_folder
60
+ return File.join( asset_folder, STYLESHEET_FOLDER )
61
61
  end
62
62
 
63
63
  #
64
64
  # Get the stylesheets folder in the project.
65
65
  #
66
66
  def javascript_folder
67
- return File.join( assets_folder, JAVASCRIPT_FOLDER )
67
+ return File.join( asset_folder, JAVASCRIPT_FOLDER )
68
68
  end
69
69
 
70
70
  #
@@ -77,7 +77,7 @@ module Gloo
77
77
  return pn if File.exist? pn
78
78
 
79
79
  # Look in the web server's asset folder.
80
- pn = File.join( assets_folder, pn )
80
+ pn = File.join( asset_folder, pn )
81
81
 
82
82
  return pn
83
83
  end
@@ -125,7 +125,7 @@ module Gloo
125
125
  # Add all asssets to the web server pages (routes).
126
126
  #
127
127
  def add_asset_routes
128
- return unless File.exist? assets_folder
128
+ return unless File.exist? asset_folder
129
129
 
130
130
  @log.debug 'Adding asset routes to web server…'
131
131
  @factory = @engine.factory
@@ -142,33 +142,50 @@ module Gloo
142
142
  def add_containers
143
143
  pages = @web_svr_obj.pages_container
144
144
 
145
- @assets = pages.find_child( ASSETS_FOLDER ) ||
146
- @factory.create_can( ASSETS_FOLDER, pages )
145
+ @assets = pages.find_child( ASSET_FOLDER ) ||
146
+ @factory.create_can( ASSET_FOLDER, pages )
147
147
 
148
- @images = @assets.find_child( IMAGES_FOLDER ) ||
149
- @factory.create_can( IMAGES_FOLDER, @assets )
148
+ @images = @assets.find_child( IMAGE_FOLDER ) ||
149
+ @factory.create_can( IMAGE_FOLDER, @assets )
150
150
 
151
- @stylesheets = @assets.find_child( STYLESHEETS_FOLDER ) ||
152
- @factory.create_can( STYLESHEETS_FOLDER, @assets )
151
+ @stylesheets = @assets.find_child( STYLESHEET_FOLDER ) ||
152
+ @factory.create_can( STYLESHEET_FOLDER, @assets )
153
153
 
154
154
  @javascript = @assets.find_child( JAVASCRIPT_FOLDER ) ||
155
155
  @factory.create_can( JAVASCRIPT_FOLDER, @assets )
156
156
  end
157
157
 
158
+ #
159
+ # Traverse the given folder and add all files to the container.
160
+ # This is a recursive method and look look for files in subfolders.
161
+ #
162
+ def add_files_in_folder( folder, container, path )
163
+ Dir.each_child( folder ) do |name|
164
+ pn = File.join( path, name )
165
+ full_path = File.join( folder, name )
166
+
167
+ if File.directory? full_path
168
+ child = container.find_child( name )
169
+ child = @factory.create_can( name, container ) if child.nil?
170
+
171
+ add_files_in_folder( full_path, child, pn )
172
+ else
173
+ add_file_obj( container, name, pn )
174
+ end
175
+ end
176
+ end
177
+
158
178
  #
159
179
  # Add the images to the web server pages.
160
180
  #
161
181
  def add_images
162
182
  @log.debug 'Adding image asset routes to web server…'
163
183
 
164
- return unless File.exist? images_folder
184
+ return unless File.exist? image_folder
165
185
 
166
186
  # for each file in the images folder
167
187
  # create a file object and add it to the images container
168
- Dir.each_child( images_folder ) do |name|
169
- pn = File.join( IMAGES_FOLDER, name )
170
- add_file_obj( @images, name, pn )
171
- end
188
+ add_files_in_folder( image_folder, @images, IMAGE_FOLDER )
172
189
  end
173
190
 
174
191
  #
@@ -177,14 +194,16 @@ module Gloo
177
194
  def add_stylesheets
178
195
  @log.debug 'Adding stylesheet asset routes to web server…'
179
196
 
180
- return unless File.exist? stylesheets_folder
197
+ return unless File.exist? stylesheet_folder
181
198
 
182
199
  # for each file in the stylesheets folder
183
200
  # create a file object and add it to the stylesheets container
184
- Dir.each_child( stylesheets_folder ) do |name|
185
- pn = File.join( STYLESHEETS_FOLDER, name )
186
- add_file_obj( @stylesheets, name, pn )
187
- end
201
+ add_files_in_folder( stylesheet_folder, @stylesheets, STYLESHEET_FOLDER )
202
+
203
+ # Dir.each_child( stylesheet_folder ) do |name|
204
+ # pn = File.join( STYLESHEET_FOLDER, name )
205
+ # add_file_obj( @stylesheets, name, pn )
206
+ # end
188
207
  end
189
208
 
190
209
  #
@@ -197,10 +216,12 @@ module Gloo
197
216
 
198
217
  # for each file in the javascript folder
199
218
  # create a file object and add it to the javascript container
200
- Dir.each_child( javascript_folder ) do |name|
201
- pn = File.join( JAVASCRIPT_FOLDER, name )
202
- add_file_obj( @javascript, name, pn )
203
- end
219
+ add_files_in_folder( javascript_folder, @javascript, JAVASCRIPT_FOLDER )
220
+
221
+ # Dir.each_child( javascript_folder ) do |name|
222
+ # pn = File.join( JAVASCRIPT_FOLDER, name )
223
+ # add_file_obj( @javascript, name, pn )
224
+ # end
204
225
  end
205
226
 
206
227
  #
@@ -1,5 +1,5 @@
1
1
  # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 20124 Eric Crane. All rights reserved.
2
+ # Copyright:: Copyright (c) 2024 Eric Crane. All rights reserved.
3
3
  #
4
4
  # Configuration for a gloo web server.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 20124 Eric Crane. All rights reserved.
2
+ # Copyright:: Copyright (c) 2024 Eric Crane. All rights reserved.
3
3
  #
4
4
  # A helper class used to render parameters (ERB) in text.
5
5
  # Also uses helper functions to render.
@@ -1,5 +1,5 @@
1
1
  # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 20124 Eric Crane. All rights reserved.
2
+ # Copyright:: Copyright (c) 2024 Eric Crane. All rights reserved.
3
3
  #
4
4
  # Web application request handler.
5
5
  # Takes a request and does what is needed to create a response.
@@ -41,13 +41,15 @@ module Gloo
41
41
  request.id = id
42
42
  if page
43
43
  if page.is_a? Gloo::Objs::FileHandle
44
- return handle_file page
44
+ result = handle_file page
45
45
  else
46
- return handle_page page
46
+ result = handle_page page
47
47
  end
48
+ else
49
+ result = server_error_result
48
50
  end
49
51
 
50
- return server_error_result
52
+ return result
51
53
  end
52
54
 
53
55
  #