gloo 3.3.0 → 3.4.1

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 (50) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/gloo.gemspec +8 -3
  4. data/lib/VERSION +1 -1
  5. data/lib/VERSION_NOTES +12 -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 -90
  9. data/lib/gloo/app/prompt.rb +90 -0
  10. data/lib/gloo/app/table.rb +51 -0
  11. data/lib/gloo/core/gloo_system.rb +7 -14
  12. data/lib/gloo/objs/basic/container.rb +1 -2
  13. data/lib/gloo/objs/basic/integer.rb +23 -1
  14. data/lib/gloo/objs/basic/string.rb +116 -1
  15. data/lib/gloo/objs/basic/string_generator.rb +49 -0
  16. data/lib/gloo/objs/basic/text.rb +1 -17
  17. data/lib/gloo/objs/cli/menu.rb +5 -4
  18. data/lib/gloo/objs/cli/select.rb +3 -2
  19. data/lib/gloo/objs/data/markdown.rb +25 -30
  20. data/lib/gloo/objs/data/mysql.rb +39 -27
  21. data/lib/gloo/objs/data/pg.rb +1 -1
  22. data/lib/gloo/objs/data/query_result.rb +4 -9
  23. data/lib/gloo/objs/data/table.rb +1 -1
  24. data/lib/gloo/objs/security/cipher.rb +193 -0
  25. data/lib/gloo/objs/security/password.rb +167 -0
  26. data/lib/gloo/objs/system/file_handle.rb +1 -3
  27. data/lib/gloo/objs/web/json.rb +3 -0
  28. data/lib/gloo/objs/web_svr/page.rb +24 -8
  29. data/lib/gloo/objs/web_svr/partial.rb +7 -6
  30. data/lib/gloo/objs/web_svr/svr.rb +267 -14
  31. data/lib/gloo/persist/disc_mech.rb +8 -0
  32. data/lib/gloo/verbs/version.rb +1 -1
  33. data/lib/gloo/web_svr/asset.rb +34 -13
  34. data/lib/gloo/web_svr/config.rb +1 -1
  35. data/lib/gloo/web_svr/embedded_renderer.rb +1 -1
  36. data/lib/gloo/web_svr/handler.rb +6 -4
  37. data/lib/gloo/web_svr/request.rb +34 -8
  38. data/lib/gloo/web_svr/response.rb +14 -2
  39. data/lib/gloo/web_svr/response_code.rb +1 -1
  40. data/lib/gloo/web_svr/routing/router.rb +1 -2
  41. data/lib/gloo/web_svr/routing/show_routes.rb +4 -7
  42. data/lib/gloo/web_svr/server.rb +1 -1
  43. data/lib/gloo/web_svr/session.rb +161 -0
  44. data/lib/gloo/web_svr/table_renderer.rb +1 -1
  45. metadata +58 -27
  46. data/lib/gloo/objs/cli/banner.rb +0 -118
  47. data/lib/gloo/objs/cli/bar.rb +0 -133
  48. data/lib/gloo/objs/cli/pastel.rb +0 -104
  49. data/lib/gloo/objs/snd/play.rb +0 -48
  50. data/lib/gloo/objs/snd/say.rb +0 -98
@@ -1,9 +1,8 @@
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 to show routes for a running app.
5
5
  #
6
- require 'tty-table'
7
6
 
8
7
  module Gloo
9
8
  module WebSvr
@@ -77,11 +76,9 @@ module Gloo
77
76
  # Show the Routes title.
78
77
  #
79
78
  def show_table
80
- @log.show "\n\tRoutes in Running Web App\n", :white
81
-
82
- table = TTY::Table.new( headers, @found_routes )
83
- renderer = TTY::Table::Renderer::Unicode.new( table, padding: [0,1] )
84
- puts renderer.render
79
+ puts RETURN
80
+ title = "Routes in Running Web App"
81
+ @engine.platform.table.show headers, @found_routes, title
85
82
  puts RETURN
86
83
  end
87
84
 
@@ -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
  # Starting work on web server inside gloo.
5
5
  #
@@ -0,0 +1,161 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 2024 Eric Crane. All rights reserved.
3
+ #
4
+ # Helpers for getting and setting session data.
5
+ #
6
+ # Resources:
7
+ # https://www.rubydoc.info/gems/rack/1.5.5/Rack/Request#cookies-instance_method
8
+ # https://rubydoc.info/github/rack/rack/Rack/Utils#set_cookie_header-class_method
9
+ # https://en.wikipedia.org/wiki/HTTP_cookie
10
+ #
11
+ require 'base64'
12
+
13
+ module Gloo
14
+ module WebSvr
15
+ class Session
16
+
17
+ SESSION_CONTAINER = 'session'.freeze
18
+
19
+
20
+ # ---------------------------------------------------------------------
21
+ # Initialization
22
+ # ---------------------------------------------------------------------
23
+
24
+ #
25
+ # Set up the web server.
26
+ #
27
+ def initialize( engine, server_obj )
28
+ @engine = engine
29
+ @log = @engine.log
30
+
31
+ @server_obj = server_obj
32
+ end
33
+
34
+
35
+ # ---------------------------------------------------------------------
36
+ # Set Session Data for Request
37
+ # ---------------------------------------------------------------------
38
+
39
+ #
40
+ # Get the session data from the encrypted cookie.
41
+ # Add it to the session container.
42
+ #
43
+ def set_session_data_for_request( env )
44
+ cookie_hash = Rack::Utils.parse_cookies( env )
45
+
46
+ # Are we using sessions?
47
+ if @server_obj.use_session?
48
+ data = cookie_hash[ session_name ]
49
+
50
+ if data
51
+ data = decode_decrypt( data )
52
+
53
+ data.each do |key, value|
54
+ @server_obj.set_session_var( key, value )
55
+ end
56
+ end
57
+ end
58
+
59
+ end
60
+
61
+
62
+ # ---------------------------------------------------------------------
63
+ # Get Session Data for Response
64
+ # ---------------------------------------------------------------------
65
+
66
+ #
67
+ # If there is session data, encrypt and add it to the response.
68
+ # Once done, clear out the session data.
69
+ #
70
+ def add_session_for_response( headers )
71
+ # Are we using sessions?
72
+ if @server_obj.use_session?
73
+ # Build and add encrypted session data
74
+ data = @server_obj.get_session_data
75
+ unless data.empty?
76
+ data = encrypt_encode( data )
77
+ session_hash = {
78
+ value: data,
79
+ path: cookie_path,
80
+ expires: cookie_expires,
81
+ http_only: true }
82
+
83
+ if secure_cookie?
84
+ session_hash[ :secure ] = true
85
+ end
86
+
87
+ Rack::Utils.set_cookie_header!( headers, session_name, session_hash )
88
+ end
89
+
90
+ # Clear out session data
91
+ @server_obj.clear_session_data
92
+ end
93
+
94
+ return headers
95
+ end
96
+
97
+
98
+ # ---------------------------------------------------------------------
99
+ # Helper functions
100
+ # ---------------------------------------------------------------------
101
+
102
+ #
103
+ # Encrypt and encode the session data.
104
+ #
105
+ def encrypt_encode( data )
106
+ return Gloo::Objs::Cipher.encrypt( data.to_json, key, iv )
107
+ end
108
+
109
+ #
110
+ # Decode and decrypt the session data.
111
+ #
112
+ def decode_decrypt( data )
113
+ data = Gloo::Objs::Cipher.decrypt( data, key, iv )
114
+ return JSON.parse( data )
115
+ end
116
+
117
+ #
118
+ # Get the session cookie name.
119
+ #
120
+ def session_name
121
+ return @server_obj.session_name
122
+ end
123
+
124
+ #
125
+ # Get the key for the encryption cipher.
126
+ #
127
+ def key
128
+ return @server_obj.encryption_key
129
+ end
130
+
131
+ #
132
+ # Get the initialization vector for the cipher.
133
+ #
134
+ def iv
135
+ return @server_obj.encryption_iv
136
+ end
137
+
138
+ #
139
+ # Get the path for the session cookie.
140
+ #
141
+ def cookie_path
142
+ return @server_obj.session_cookie_path
143
+ end
144
+
145
+ #
146
+ # Get the expiration time for the session cookie.
147
+ #
148
+ def cookie_expires
149
+ return @server_obj.session_cookie_expires
150
+ end
151
+
152
+ #
153
+ # Should the session cookie be secure?
154
+ #
155
+ def secure_cookie?
156
+ return @server_obj.session_cookie_secure
157
+ end
158
+
159
+ end
160
+ end
161
+ end
@@ -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 HTML tables.
5
5
  #
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.3.0
4
+ version: 3.4.1
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-08-16 00:00:00.000000000 Z
11
+ date: 2024-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -110,40 +110,62 @@ dependencies:
110
110
  requirements:
111
111
  - - "~>"
112
112
  - !ruby/object:Gem::Version
113
- version: '0.8'
113
+ version: 1.1.0
114
114
  - - ">="
115
115
  - !ruby/object:Gem::Version
116
- version: 0.8.1
116
+ version: 1.1.0
117
117
  type: :runtime
118
118
  prerelease: false
119
119
  version_requirements: !ruby/object:Gem::Requirement
120
120
  requirements:
121
121
  - - "~>"
122
122
  - !ruby/object:Gem::Version
123
- version: '0.8'
123
+ version: 1.1.0
124
124
  - - ">="
125
125
  - !ruby/object:Gem::Version
126
- version: 0.8.1
126
+ version: 1.1.0
127
127
  - !ruby/object:Gem::Dependency
128
- name: tty
128
+ name: inquirer
129
129
  requirement: !ruby/object:Gem::Requirement
130
130
  requirements:
131
- - - "~>"
131
+ - - ">="
132
132
  - !ruby/object:Gem::Version
133
- version: '0.10'
133
+ version: '0'
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ - !ruby/object:Gem::Dependency
142
+ name: reline
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
134
145
  - - ">="
135
146
  - !ruby/object:Gem::Version
136
- version: 0.10.0
147
+ version: '0'
137
148
  type: :runtime
138
149
  prerelease: false
139
150
  version_requirements: !ruby/object:Gem::Requirement
140
151
  requirements:
141
- - - "~>"
152
+ - - ">="
142
153
  - !ruby/object:Gem::Version
143
- version: '0.10'
154
+ version: '0'
155
+ - !ruby/object:Gem::Dependency
156
+ name: terminal-table
157
+ requirement: !ruby/object:Gem::Requirement
158
+ requirements:
144
159
  - - ">="
145
160
  - !ruby/object:Gem::Version
146
- version: 0.10.0
161
+ version: '0'
162
+ type: :runtime
163
+ prerelease: false
164
+ version_requirements: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
147
169
  - !ruby/object:Gem::Dependency
148
170
  name: json
149
171
  requirement: !ruby/object:Gem::Requirement
@@ -168,22 +190,16 @@ dependencies:
168
190
  name: openssl
169
191
  requirement: !ruby/object:Gem::Requirement
170
192
  requirements:
171
- - - "~>"
172
- - !ruby/object:Gem::Version
173
- version: '2.1'
174
193
  - - ">="
175
194
  - !ruby/object:Gem::Version
176
- version: 2.1.0
195
+ version: '0'
177
196
  type: :runtime
178
197
  prerelease: false
179
198
  version_requirements: !ruby/object:Gem::Requirement
180
199
  requirements:
181
- - - "~>"
182
- - !ruby/object:Gem::Version
183
- version: '2.1'
184
200
  - - ">="
185
201
  - !ruby/object:Gem::Version
186
- version: 2.1.0
202
+ version: '0'
187
203
  - !ruby/object:Gem::Dependency
188
204
  name: net-ssh
189
205
  requirement: !ruby/object:Gem::Requirement
@@ -306,6 +322,20 @@ dependencies:
306
322
  - - "~>"
307
323
  - !ruby/object:Gem::Version
308
324
  version: 3.6.0
325
+ - !ruby/object:Gem::Dependency
326
+ name: bcrypt
327
+ requirement: !ruby/object:Gem::Requirement
328
+ requirements:
329
+ - - "~>"
330
+ - !ruby/object:Gem::Version
331
+ version: 3.1.20
332
+ type: :runtime
333
+ prerelease: false
334
+ version_requirements: !ruby/object:Gem::Requirement
335
+ requirements:
336
+ - - "~>"
337
+ - !ruby/object:Gem::Version
338
+ version: 3.1.20
309
339
  description: A scripting languge to keep it all together.
310
340
  email:
311
341
  - eric.crane@mac.com
@@ -343,8 +373,10 @@ files:
343
373
  - lib/gloo/app/log.rb
344
374
  - lib/gloo/app/mode.rb
345
375
  - lib/gloo/app/platform.rb
376
+ - lib/gloo/app/prompt.rb
346
377
  - lib/gloo/app/running_app.rb
347
378
  - lib/gloo/app/settings.rb
379
+ - lib/gloo/app/table.rb
348
380
  - lib/gloo/convert/converter.rb
349
381
  - lib/gloo/convert/falseclass_to_integer.rb
350
382
  - lib/gloo/convert/nilclass_to_date.rb
@@ -397,15 +429,13 @@ files:
397
429
  - lib/gloo/objs/basic/integer.rb
398
430
  - lib/gloo/objs/basic/script.rb
399
431
  - lib/gloo/objs/basic/string.rb
432
+ - lib/gloo/objs/basic/string_generator.rb
400
433
  - lib/gloo/objs/basic/text.rb
401
434
  - lib/gloo/objs/basic/untyped.rb
402
- - lib/gloo/objs/cli/banner.rb
403
- - lib/gloo/objs/cli/bar.rb
404
435
  - lib/gloo/objs/cli/colorize.rb
405
436
  - lib/gloo/objs/cli/confirm.rb
406
437
  - lib/gloo/objs/cli/menu.rb
407
438
  - lib/gloo/objs/cli/menu_item.rb
408
- - lib/gloo/objs/cli/pastel.rb
409
439
  - lib/gloo/objs/cli/prompt.rb
410
440
  - lib/gloo/objs/cli/select.rb
411
441
  - lib/gloo/objs/ctrl/each.rb
@@ -426,8 +456,8 @@ files:
426
456
  - lib/gloo/objs/dt/time.rb
427
457
  - lib/gloo/objs/ror/erb.rb
428
458
  - lib/gloo/objs/ror/eval.rb
429
- - lib/gloo/objs/snd/play.rb
430
- - lib/gloo/objs/snd/say.rb
459
+ - lib/gloo/objs/security/cipher.rb
460
+ - lib/gloo/objs/security/password.rb
431
461
  - lib/gloo/objs/system/file_handle.rb
432
462
  - lib/gloo/objs/system/ssh_exec.rb
433
463
  - lib/gloo/objs/system/system.rb
@@ -488,6 +518,7 @@ files:
488
518
  - lib/gloo/web_svr/routing/router.rb
489
519
  - lib/gloo/web_svr/routing/show_routes.rb
490
520
  - lib/gloo/web_svr/server.rb
521
+ - lib/gloo/web_svr/session.rb
491
522
  - lib/gloo/web_svr/table_renderer.rb
492
523
  - lib/gloo/web_svr/web_method.rb
493
524
  - lib/run.rb
@@ -510,7 +541,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
510
541
  - !ruby/object:Gem::Version
511
542
  version: '0'
512
543
  requirements: []
513
- rubygems_version: 3.2.22
544
+ rubygems_version: 3.4.19
514
545
  signing_key:
515
546
  specification_version: 4
516
547
  summary: Gloo scripting language. A scripting language built on ruby.
@@ -1,118 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
- #
4
- # Show a large-text banner.
5
- #
6
- require 'tty-font'
7
- require 'pastel'
8
-
9
- module Gloo
10
- module Objs
11
- class Banner < Gloo::Core::Obj
12
-
13
- KEYWORD = 'banner'.freeze
14
- KEYWORD_SHORT = 'ban'.freeze
15
- TEXT = 'text'.freeze
16
- STYLE = 'style'.freeze
17
- COLOR = 'color'.freeze
18
-
19
- #
20
- # The name of the object type.
21
- #
22
- def self.typename
23
- return KEYWORD
24
- end
25
-
26
- #
27
- # The short name of the object type.
28
- #
29
- def self.short_typename
30
- return KEYWORD_SHORT
31
- end
32
-
33
- #
34
- # Get the banner text from the child object.
35
- #
36
- def text_value
37
- o = find_child TEXT
38
- return '' unless o
39
-
40
- return o.value
41
- end
42
-
43
- #
44
- # Get the banner style from the child object.
45
- #
46
- def style_value
47
- o = find_child STYLE
48
- return '' unless o
49
-
50
- return o.value
51
- end
52
-
53
- #
54
- # Get the banner color from the child object.
55
- #
56
- def color_value
57
- o = find_child COLOR
58
- return '' unless o
59
-
60
- return o.value
61
- end
62
-
63
- # ---------------------------------------------------------------------
64
- # Children
65
- # ---------------------------------------------------------------------
66
-
67
- # Does this object have children to add when an object
68
- # is created in interactive mode?
69
- # This does not apply during obj load, etc.
70
- def add_children_on_create?
71
- return true
72
- end
73
-
74
- # Add children to this object.
75
- # This is used by containers to add children needed
76
- # for default configurations.
77
- def add_default_children
78
- fac = @engine.factory
79
- fac.create_string TEXT, '', self
80
- fac.create_string STYLE, '', self
81
- fac.create_string COLOR, '', self
82
- end
83
-
84
- # ---------------------------------------------------------------------
85
- # Messages
86
- # ---------------------------------------------------------------------
87
-
88
- #
89
- # Get a list of message names that this object receives.
90
- #
91
- def self.messages
92
- return super + %w[show]
93
- end
94
-
95
- #
96
- # Show the banner bar
97
- #
98
- def msg_show
99
- Banner.show_banner( self.text_value, self.style_value, self.color_value )
100
- end
101
-
102
- #
103
- # Show the banner bar.
104
- # text - the text of the banner
105
- # style - the style of the banner
106
- # color - the color of the banner
107
- #
108
- def self.show_banner( text, style, color )
109
- font = TTY::Font.new style
110
- t = font.write( text )
111
- pastel = ::Pastel.new
112
- c = color.split( ' ' ).map( &:to_sym )
113
- puts pastel.decorate( t, *c )
114
- end
115
-
116
- end
117
- end
118
- end
@@ -1,133 +0,0 @@
1
- # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
- # Copyright:: Copyright (c) 2020 Eric Crane. All rights reserved.
3
- #
4
- # Show a CLI progress bar.
5
- #
6
- require 'tty-progressbar'
7
-
8
- module Gloo
9
- module Objs
10
- class Bar < Gloo::Core::Obj
11
-
12
- KEYWORD = 'bar'.freeze
13
- KEYWORD_SHORT = 'bar'.freeze
14
- NAME = 'name'.freeze
15
- TOTAL = 'total'.freeze
16
-
17
- #
18
- # The name of the object type.
19
- #
20
- def self.typename
21
- return KEYWORD
22
- end
23
-
24
- #
25
- # The short name of the object type.
26
- #
27
- def self.short_typename
28
- return KEYWORD_SHORT
29
- end
30
-
31
- #
32
- # Get the bar's name from the child object.
33
- #
34
- def name_value
35
- o = find_child NAME
36
- return '' unless o
37
-
38
- return o.value
39
- end
40
-
41
- #
42
- # Get the bar's total from the child object.
43
- #
44
- def total_value
45
- o = find_child TOTAL
46
- return 100 unless o
47
-
48
- return o.value
49
- end
50
-
51
- # ---------------------------------------------------------------------
52
- # Children
53
- # ---------------------------------------------------------------------
54
-
55
- # Does this object have children to add when an object
56
- # is created in interactive mode?
57
- # This does not apply during obj load, etc.
58
- def add_children_on_create?
59
- return true
60
- end
61
-
62
- # Add children to this object.
63
- # This is used by containers to add children needed
64
- # for default configurations.
65
- def add_default_children
66
- fac = @engine.factory
67
- fac.create_string NAME, '', self
68
- fac.create_int TOTAL, 100, self
69
- end
70
-
71
- # ---------------------------------------------------------------------
72
- # Messages
73
- # ---------------------------------------------------------------------
74
-
75
- #
76
- # Get a list of message names that this object receives.
77
- #
78
- def self.messages
79
- return super + %w[start advance stop run]
80
- end
81
-
82
- #
83
- # Start the progress bar.
84
- #
85
- def msg_start
86
- msg = "#{name_value} [:bar] :percent"
87
- @bar = TTY::ProgressBar.new( msg, total: total_value )
88
- end
89
-
90
- #
91
- # Finish the progress bar.
92
- #
93
- def msg_stop
94
- @bar.finish
95
- end
96
-
97
- #
98
- # Advance the progress bar.
99
- #
100
- def msg_advance
101
- x = 1
102
- if @params&.token_count&.positive?
103
- expr = Gloo::Expr::Expression.new( @engine, @params.tokens )
104
- x = expr.evaluate.to_i
105
- end
106
-
107
- @bar.advance x
108
- end
109
-
110
- #
111
- # Run for the given number of seconds advancing
112
- # the bar to the end.
113
- #
114
- def msg_run
115
- msg_start
116
-
117
- x = 1
118
- if @params&.token_count&.positive?
119
- expr = Gloo::Expr::Expression.new( @engine, @params.tokens )
120
- x = expr.evaluate.to_i
121
- end
122
-
123
- 100.times do
124
- sleep ( 0.0 + x ) / 100.0
125
- @bar.advance 1
126
- end
127
-
128
- msg_stop
129
- end
130
-
131
- end
132
- end
133
- end