gloo 3.1.1 → 3.3.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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/gloo.gemspec +1 -0
  3. data/lib/VERSION +1 -1
  4. data/lib/VERSION_NOTES +13 -0
  5. data/lib/gloo/app/log.rb +46 -6
  6. data/lib/gloo/app/platform.rb +7 -1
  7. data/lib/gloo/app/running_app.rb +42 -1
  8. data/lib/gloo/convert/falseclass_to_integer.rb +20 -0
  9. data/lib/gloo/convert/nilclass_to_date.rb +21 -0
  10. data/lib/gloo/convert/nilclass_to_datetime.rb +21 -0
  11. data/lib/gloo/convert/nilclass_to_integer.rb +21 -0
  12. data/lib/gloo/convert/nilclass_to_string.rb +21 -0
  13. data/lib/gloo/convert/nilclass_to_time.rb +21 -0
  14. data/lib/gloo/convert/trueclass_to_integer.rb +20 -0
  15. data/lib/gloo/core/error.rb +7 -0
  16. data/lib/gloo/core/it.rb +7 -0
  17. data/lib/gloo/core/obj.rb +41 -1
  18. data/lib/gloo/core/parser.rb +6 -3
  19. data/lib/gloo/exec/exec_env.rb +4 -0
  20. data/lib/gloo/exec/script.rb +9 -1
  21. data/lib/gloo/objs/basic/container.rb +18 -2
  22. data/lib/gloo/objs/basic/integer.rb +1 -0
  23. data/lib/gloo/objs/cli/menu.rb +9 -3
  24. data/lib/gloo/objs/{basic → ctrl}/function.rb +12 -0
  25. data/lib/gloo/objs/data/markdown.rb +60 -2
  26. data/lib/gloo/objs/data/mysql.rb +35 -7
  27. data/lib/gloo/objs/data/pg.rb +8 -0
  28. data/lib/gloo/objs/data/query.rb +66 -11
  29. data/lib/gloo/objs/data/query_result.rb +22 -1
  30. data/lib/gloo/objs/data/sqlite.rb +17 -2
  31. data/lib/gloo/objs/data/table.rb +143 -4
  32. data/lib/gloo/objs/web/json.rb +2 -0
  33. data/lib/gloo/objs/web_svr/element.rb +13 -5
  34. data/lib/gloo/objs/web_svr/page.rb +44 -2
  35. data/lib/gloo/objs/web_svr/partial.rb +7 -2
  36. data/lib/gloo/objs/web_svr/svr.rb +71 -4
  37. data/lib/gloo/verbs/break.rb +44 -0
  38. data/lib/gloo/verbs/create.rb +6 -0
  39. data/lib/gloo/verbs/invoke.rb +80 -0
  40. data/lib/gloo/verbs/log.rb +26 -5
  41. data/lib/gloo/verbs/redirect.rb +54 -6
  42. data/lib/gloo/web_svr/asset.rb +51 -23
  43. data/lib/gloo/web_svr/handler.rb +4 -2
  44. data/lib/gloo/web_svr/request.rb +35 -2
  45. data/lib/gloo/web_svr/routing/resource_router.rb +47 -0
  46. data/lib/gloo/web_svr/routing/router.rb +218 -0
  47. data/lib/gloo/web_svr/routing/show_routes.rb +98 -0
  48. data/lib/gloo/web_svr/server.rb +10 -2
  49. data/lib/gloo/web_svr/table_renderer.rb +147 -0
  50. data/lib/gloo/web_svr/web_method.rb +54 -0
  51. metadata +31 -4
  52. data/lib/gloo/web_svr/router.rb +0 -179
@@ -0,0 +1,218 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 20124 Eric Crane. All rights reserved.
3
+ #
4
+ # A helper class for page routing.
5
+ #
6
+ require 'tty-table'
7
+
8
+ module Gloo
9
+ module WebSvr
10
+ module Routing
11
+ class Router
12
+
13
+ PAGE_CONTAINER = 'page'.freeze
14
+ SEGMENT_DIVIDER = '/'.freeze
15
+
16
+ attr_reader :route_segments
17
+
18
+
19
+ # ---------------------------------------------------------------------
20
+ # Initialization
21
+ # ---------------------------------------------------------------------
22
+
23
+ #
24
+ # Set up the web server.
25
+ #
26
+ def initialize( engine, web_svr_obj )
27
+ @engine = engine
28
+ @log = @engine.log
29
+
30
+ @web_svr_obj = web_svr_obj
31
+ @show_routes = ShowRoutes.new( @engine )
32
+ end
33
+
34
+
35
+ # ---------------------------------------------------------------------
36
+ # Routing
37
+ # ---------------------------------------------------------------------
38
+
39
+ #
40
+ # Find and return the page for the given route.
41
+ #
42
+ def page_for_route( path, method )
43
+ @log.info "routing to #{path} for method #{method}"
44
+ @method = method
45
+
46
+ detect_segments path
47
+
48
+ return @web_svr_obj.home_page if is_root_path?
49
+
50
+ pages = @web_svr_obj.pages_container
51
+ if pages
52
+ # If the method is POST and the last segment is NOT 'create',
53
+ # we'll add create to the route segments.
54
+ if Gloo::WebSvr::Routing::ResourceRouter.is_implicit_create?( method, @route_segments.last )
55
+ @route_segments << Gloo::WebSvr::Routing::ResourceRouter::POST_ROUTE
56
+ page = find_route_segment( pages.children )
57
+ return [ page, @id ] if page
58
+
59
+ # We didn't find the page, so remove the last segment and try again
60
+ # posting to the resource.
61
+ @route_segments.pop
62
+ end
63
+
64
+ page = find_route_segment( pages.children )
65
+ return [ page, @id ] if page
66
+ end
67
+
68
+ return nil
69
+ end
70
+
71
+
72
+ # ---------------------------------------------------------------------
73
+ # Dynamic Add Page Routes
74
+ # ---------------------------------------------------------------------
75
+
76
+ #
77
+ # Get the root level page container.
78
+ #
79
+ def page_container
80
+ pn = Gloo::Core::Pn.new( @engine, PAGE_CONTAINER )
81
+ return pn.resolve
82
+ end
83
+
84
+ #
85
+ # Add all page routes to the web server pages (routes).
86
+ #
87
+ def add_page_routes
88
+ can = page_container
89
+ return unless can
90
+
91
+ @log.debug 'Adding page routes to web server…'
92
+ @factory = @engine.factory
93
+
94
+ add_pages can, @web_svr_obj.pages_container
95
+ end
96
+
97
+ #
98
+ # Add the pages to the web server pages.
99
+ # This is a recursive function that will add all
100
+ # pages in the folder and subfolders.
101
+ #
102
+ def add_pages can, parent
103
+ # for each file in the page container
104
+ # create a page object and add it to the routes
105
+ can.children.each do |obj|
106
+ if obj.class == Gloo::Objs::Container
107
+ child_can = parent.find_add_child( obj.name, 'container' )
108
+ add_pages( obj, child_can )
109
+ elsif obj.class == Gloo::Objs::Page
110
+ add_route_alias( parent, obj.name, obj.pn )
111
+ end
112
+ end
113
+ end
114
+
115
+ #
116
+ # Add route alias to the page.
117
+ #
118
+ def add_route_alias( parent, name, pn )
119
+ name = name.gsub( '.', '_' )
120
+
121
+ # First make sure the child doesn't already exist.
122
+ child = parent.find_child( name )
123
+ return if child
124
+
125
+ @factory.create_alias( name, pn, parent )
126
+ end
127
+
128
+
129
+ # ---------------------------------------------------------------------
130
+ # Helper funcions
131
+ # ---------------------------------------------------------------------
132
+
133
+ #
134
+ # Show the routes in the running app.
135
+ # This uses the ShowRoutes helper class.
136
+ #
137
+ def show_routes
138
+ @show_routes.show page_container
139
+ end
140
+
141
+ #
142
+ # Find the route segment in the object container.
143
+ #
144
+ def find_route_segment objs
145
+ this_segment = next_segment
146
+
147
+ if this_segment.blank? # && Gloo::WebSvr::WebMethod.is_post?( @method )
148
+ this_segment = Gloo::WebSvr::Routing::ResourceRouter::INDEX
149
+ end
150
+
151
+ objs.each do |o|
152
+ o = Gloo::Objs::Alias.resolve_alias( @engine, o )
153
+
154
+ if o.name == this_segment
155
+ if o.class == Gloo::Objs::Page
156
+ @log.debug "found page for route: #{o.pn}"
157
+ return o
158
+ elsif o.class == Gloo::Objs::FileHandle
159
+ @log.debug "found static file for route: #{o.pn}"
160
+ return o
161
+ else
162
+ return nil unless o.child_count > 0
163
+
164
+ return find_route_segment( o.children )
165
+ end
166
+ end
167
+ end
168
+
169
+ return nil
170
+ end
171
+
172
+ #
173
+ # Get the next segment in the route.
174
+ #
175
+ def next_segment
176
+ this_segment = @route_segments.shift
177
+ return nil if this_segment.nil?
178
+
179
+ # A URL might include a dot in a name, but we can't do that
180
+ # because dot is a reserve path thing. So we replace it with
181
+ # an underscore.
182
+ this_segment = this_segment.gsub( '.', '_' )
183
+
184
+ return this_segment
185
+ end
186
+
187
+ #
188
+ # Is this the root path?
189
+ def is_root_path?
190
+ return @route_segments.count == 0
191
+ end
192
+
193
+ #
194
+ # Create a list of path segments.
195
+ #
196
+ def detect_segments path
197
+ # Split the path into segments.
198
+ @route_segments = path.split SEGMENT_DIVIDER
199
+
200
+ # Remove the first segment if it is empty.
201
+ @route_segments.shift if @route_segments.first.blank?
202
+
203
+ @route_segments.each do |seg|
204
+ if seg.to_i.to_s == seg
205
+ @id = seg.to_i
206
+ @log.info "found id for route: #{@id}"
207
+ @route_segments.delete seg
208
+ @route_segments << ResourceRouter.segment_for_method( @method )
209
+ end
210
+ end
211
+
212
+ return @route_segments
213
+ end
214
+
215
+ end
216
+ end
217
+ end
218
+ end
@@ -0,0 +1,98 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 20124 Eric Crane. All rights reserved.
3
+ #
4
+ # A helper class for to show routes for a running app.
5
+ #
6
+ require 'tty-table'
7
+
8
+ module Gloo
9
+ module WebSvr
10
+ module Routing
11
+ class ShowRoutes
12
+
13
+ SEGMENT_DIVIDER = '/'.freeze
14
+ RETURN = "\n".freeze
15
+
16
+
17
+ # ---------------------------------------------------------------------
18
+ # Initialization
19
+ # ---------------------------------------------------------------------
20
+
21
+ #
22
+ # Set up the web server.
23
+ #
24
+ def initialize( engine )
25
+ @engine = engine
26
+ @log = @engine.log
27
+ end
28
+
29
+
30
+ # ---------------------------------------------------------------------
31
+ # Show Routes
32
+ # ---------------------------------------------------------------------
33
+
34
+ #
35
+ # Show all available routes.
36
+ #
37
+ def show page_container
38
+ @log.debug "showing routes"
39
+
40
+ @found_routes = []
41
+ @log.debug "building route table"
42
+ add_container_routes( page_container, SEGMENT_DIVIDER )
43
+
44
+ show_table
45
+ end
46
+
47
+ #
48
+ # Show the routes in the given container.
49
+ # This is a recursive function travese the object tree.
50
+ #
51
+ def add_container_routes can, route_path
52
+ can.children.each do |obj|
53
+ if obj.class == Gloo::Objs::Container
54
+ add_container_routes obj, "#{route_path}#{obj.name}#{SEGMENT_DIVIDER}"
55
+ elsif obj.class == Gloo::Objs::Page
56
+ route = "#{route_path}#{obj.name}"
57
+ @found_routes << [ obj.name, obj.pn, route, Gloo::WebSvr::WebMethod::GET ]
58
+
59
+ # If the method is POST, add a route alias for the create.
60
+ if obj.name.eql? ResourceRouter::POST_ROUTE
61
+ @found_routes << [ '', '', route_path, Gloo::WebSvr::WebMethod::POST ]
62
+ elsif obj.name.eql? ResourceRouter::UPDATE
63
+ @found_routes << [ '', '', route_path, Gloo::WebSvr::WebMethod::PATCH ]
64
+ elsif obj.name.eql? ResourceRouter::DELETE
65
+ @found_routes << [ '', '', route_path, Gloo::WebSvr::WebMethod::DELETE ]
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+
72
+ # ---------------------------------------------------------------------
73
+ # Show Routes
74
+ # ---------------------------------------------------------------------
75
+
76
+ #
77
+ # Show the Routes title.
78
+ #
79
+ 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
85
+ puts RETURN
86
+ end
87
+
88
+ #
89
+ # Get the table headers.
90
+ #
91
+ def headers
92
+ return [ 'Obj Name', 'Obj Path', 'Route', 'Method' ]
93
+ end
94
+
95
+ end
96
+ end
97
+ end
98
+ end
@@ -34,8 +34,9 @@ module Gloo
34
34
  #
35
35
  # Set up the web server.
36
36
  #
37
- def initialize( engine, handler, config = nil )
37
+ def initialize( engine, handler, config = nil, ssl_config = nil )
38
38
  @config = config ? config : Gloo::WebSvr::Config.new
39
+ @ssl_config = ssl_config
39
40
  @engine = engine
40
41
  @log = @engine.log
41
42
  @handler = handler
@@ -57,7 +58,14 @@ module Gloo
57
58
  :Host => @config.host
58
59
  }
59
60
  Thread.abort_on_exception = true
60
- @server_thread = Thread.new { Rack::Handler::Thin.run( self, **options=opts ) }
61
+ @server_thread = Thread.new {
62
+ Rack::Handler::Thin.run( self, **options=opts ) do |server|
63
+ if @ssl_config
64
+ server.ssl = true
65
+ server.ssl_options = @ssl_config
66
+ end
67
+ end
68
+ }
61
69
  @log.debug 'Web server has started.'
62
70
  end
63
71
 
@@ -0,0 +1,147 @@
1
+ # Author:: Eric Crane (mailto:eric.crane@mac.com)
2
+ # Copyright:: Copyright (c) 20124 Eric Crane. All rights reserved.
3
+ #
4
+ # A helper class used to render HTML tables.
5
+ #
6
+
7
+ module Gloo
8
+ module WebSvr
9
+ class TableRenderer
10
+
11
+ TABLE = 'table'.freeze
12
+ THEAD = 'thead'.freeze
13
+ HEAD_CELL = 'head_cell'.freeze
14
+ ROW = 'row'.freeze
15
+ CELL = 'cell'.freeze
16
+
17
+ # ---------------------------------------------------------------------
18
+ # Initialization
19
+ # ---------------------------------------------------------------------
20
+
21
+ #
22
+ # Set up the web server.
23
+ #
24
+ def initialize( engine )
25
+ @engine = engine
26
+ @log = @engine.log
27
+ end
28
+
29
+
30
+ # ---------------------------------------------------------------------
31
+ # Container Renderer
32
+ # ---------------------------------------------------------------------
33
+
34
+ #
35
+ # Render the query result set to an HTML table.
36
+ #
37
+ # params = {
38
+ # head: head,
39
+ # cols: result[0],
40
+ # rows: rows,
41
+ # styles: self.styles,
42
+ # cell_renderers: self.cell_renderers
43
+ # }
44
+ #
45
+ def data_to_table params
46
+ data = params[ :rows ]
47
+
48
+ if data.nil? || ( data.length == 0 )
49
+ return "<p>No data found.</p>"
50
+ elsif data.length == 1
51
+ return data_to_single_row_table( params )
52
+ else
53
+ return data_to_table_rows( params )
54
+ end
55
+ end
56
+
57
+ #
58
+ # Show in single-row (form) format.
59
+ #
60
+ def data_to_single_row_table( params )
61
+ styles = params[ :styles ]
62
+ str = "<table class='#{styles[ TABLE ]}'> <tbody>"
63
+ row = params[ :rows ].first
64
+
65
+ params[ :columns ].each do |head|
66
+ next unless head[ :visible ]
67
+ cell = row[ head[ :data_index ] ]
68
+
69
+ if head[ :cell_renderer ]
70
+ cell_value = render_cell( row, head, params[ :columns ] )
71
+ else
72
+ cell_value = cell
73
+ end
74
+
75
+ str += "<tr class='#{styles[ ROW ]}'>"
76
+ str += "<th style='#{styles[ HEAD_CELL ]}'>#{head[ :title ]}</th>"
77
+ str += "<td style='#{styles[ CELL ]}'>#{cell_value}</td>"
78
+ str += "</tr>"
79
+ end
80
+
81
+ str += "</tbody></table>"
82
+ return str
83
+ end
84
+
85
+ #
86
+ # Show in normal, multi-row format.
87
+ #
88
+ def data_to_table_rows( params )
89
+ styles = params[ :styles ]
90
+ # headers = params[ :head ]
91
+
92
+ str = "<table class='#{styles[ TABLE ]}'>"
93
+ str << "<thead class='#{styles[ THEAD ]}'><tr>"
94
+
95
+ params[ :columns ].each do |head|
96
+ next unless head[ :visible ]
97
+ str += "<th class='#{styles[ HEAD_CELL ]}'>#{head[ :title ]}</th>"
98
+ end
99
+ str << "</tr></thead><tbody>"
100
+
101
+ params[ :rows ].each do |row|
102
+ str += "<tr class='#{styles[ ROW ]}'>"
103
+
104
+ # row.each_with_index do |cell, i|
105
+ params[ :columns ].each do |head|
106
+ next unless head[ :visible ]
107
+
108
+ cell = row[ head[ :data_index ] ]
109
+ this_col_name = head[ :name ]
110
+
111
+ if head[ :cell_renderer ]
112
+ cell_value = render_cell( row, head, params[ :columns ] )
113
+ else
114
+ cell_value = cell
115
+ end
116
+ str += "<td style='#{styles[ CELL ]}'>#{cell_value}</td>"
117
+ end
118
+ str += "</tr>"
119
+ end
120
+ str += "</tbody></table>"
121
+
122
+ return str
123
+ end
124
+
125
+ #
126
+ # Render a cell using the cell renderer and the given
127
+ # context data (the row's values).
128
+ #
129
+ def render_cell row, col, cols
130
+ params = {}
131
+
132
+ cols.each_with_index do |c, i|
133
+ params[ c[ :name ] ] = row[ c[ :data_index ] ]
134
+ end
135
+
136
+ content = col[ :cell_renderer ]
137
+ content = @engine.running_app.obj.embedded_renderer.render content, params
138
+
139
+ # renderer = ERB.new( col[ :cell_renderer ] )
140
+ # content = renderer.result_with_hash( params )
141
+
142
+ return content
143
+ end
144
+ end
145
+
146
+ end
147
+ end
@@ -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
+ # A helper class for Web Methods.
5
+ #
6
+
7
+ module Gloo
8
+ module WebSvr
9
+ class WebMethod
10
+
11
+ GET = 'GET'.freeze
12
+ POST = 'POST'.freeze
13
+ PUT = 'PUT'.freeze
14
+ DELETE = 'DELETE'.freeze
15
+ PATCH = 'PATCH'.freeze
16
+
17
+ #
18
+ # Is the method a GET?
19
+ #
20
+ def self.is_get?( method )
21
+ return method.upcase == GET
22
+ end
23
+
24
+ #
25
+ # Is the method a POST?
26
+ #
27
+ def self.is_post?( method )
28
+ return method.upcase == POST
29
+ end
30
+
31
+ #
32
+ # Is the method a PUT?
33
+ #
34
+ def self.is_put?( method )
35
+ return method.upcase == PUT
36
+ end
37
+
38
+ #
39
+ # Is the method a PATCH?
40
+ #
41
+ def self.is_patch?( method )
42
+ return method.upcase == PATCH
43
+ end
44
+
45
+ #
46
+ # Is the method a DELETE?
47
+ #
48
+ def self.is_delete?( method )
49
+ return method.upcase == DELETE
50
+ end
51
+
52
+ end
53
+ end
54
+ end
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.1.1
4
+ version: 3.3.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-04-26 00:00:00.000000000 Z
11
+ date: 2024-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -292,6 +292,20 @@ dependencies:
292
292
  - - "~>"
293
293
  - !ruby/object:Gem::Version
294
294
  version: 1.8.2
295
+ - !ruby/object:Gem::Dependency
296
+ name: redcarpet
297
+ requirement: !ruby/object:Gem::Requirement
298
+ requirements:
299
+ - - "~>"
300
+ - !ruby/object:Gem::Version
301
+ version: 3.6.0
302
+ type: :runtime
303
+ prerelease: false
304
+ version_requirements: !ruby/object:Gem::Requirement
305
+ requirements:
306
+ - - "~>"
307
+ - !ruby/object:Gem::Version
308
+ version: 3.6.0
295
309
  description: A scripting languge to keep it all together.
296
310
  email:
297
311
  - eric.crane@mac.com
@@ -332,11 +346,18 @@ files:
332
346
  - lib/gloo/app/running_app.rb
333
347
  - lib/gloo/app/settings.rb
334
348
  - lib/gloo/convert/converter.rb
349
+ - lib/gloo/convert/falseclass_to_integer.rb
350
+ - lib/gloo/convert/nilclass_to_date.rb
351
+ - lib/gloo/convert/nilclass_to_datetime.rb
352
+ - lib/gloo/convert/nilclass_to_integer.rb
353
+ - lib/gloo/convert/nilclass_to_string.rb
354
+ - lib/gloo/convert/nilclass_to_time.rb
335
355
  - lib/gloo/convert/string_to_date.rb
336
356
  - lib/gloo/convert/string_to_datetime.rb
337
357
  - lib/gloo/convert/string_to_decimal.rb
338
358
  - lib/gloo/convert/string_to_integer.rb
339
359
  - lib/gloo/convert/string_to_time.rb
360
+ - lib/gloo/convert/trueclass_to_integer.rb
340
361
  - lib/gloo/core/baseo.rb
341
362
  - lib/gloo/core/dictionary.rb
342
363
  - lib/gloo/core/error.rb
@@ -373,7 +394,6 @@ files:
373
394
  - lib/gloo/objs/basic/boolean.rb
374
395
  - lib/gloo/objs/basic/container.rb
375
396
  - lib/gloo/objs/basic/decimal.rb
376
- - lib/gloo/objs/basic/function.rb
377
397
  - lib/gloo/objs/basic/integer.rb
378
398
  - lib/gloo/objs/basic/script.rb
379
399
  - lib/gloo/objs/basic/string.rb
@@ -389,6 +409,7 @@ files:
389
409
  - lib/gloo/objs/cli/prompt.rb
390
410
  - lib/gloo/objs/cli/select.rb
391
411
  - lib/gloo/objs/ctrl/each.rb
412
+ - lib/gloo/objs/ctrl/function.rb
392
413
  - lib/gloo/objs/ctrl/repeat.rb
393
414
  - lib/gloo/objs/data/markdown.rb
394
415
  - lib/gloo/objs/data/mysql.rb
@@ -431,6 +452,7 @@ files:
431
452
  - lib/gloo/utils/words.rb
432
453
  - lib/gloo/verbs/alert.rb
433
454
  - lib/gloo/verbs/beep.rb
455
+ - lib/gloo/verbs/break.rb
434
456
  - lib/gloo/verbs/cls.rb
435
457
  - lib/gloo/verbs/context.rb
436
458
  - lib/gloo/verbs/create.rb
@@ -438,6 +460,7 @@ files:
438
460
  - lib/gloo/verbs/files.rb
439
461
  - lib/gloo/verbs/help.rb
440
462
  - lib/gloo/verbs/if.rb
463
+ - lib/gloo/verbs/invoke.rb
441
464
  - lib/gloo/verbs/list.rb
442
465
  - lib/gloo/verbs/load.rb
443
466
  - lib/gloo/verbs/log.rb
@@ -461,8 +484,12 @@ files:
461
484
  - lib/gloo/web_svr/request.rb
462
485
  - lib/gloo/web_svr/response.rb
463
486
  - lib/gloo/web_svr/response_code.rb
464
- - lib/gloo/web_svr/router.rb
487
+ - lib/gloo/web_svr/routing/resource_router.rb
488
+ - lib/gloo/web_svr/routing/router.rb
489
+ - lib/gloo/web_svr/routing/show_routes.rb
465
490
  - lib/gloo/web_svr/server.rb
491
+ - lib/gloo/web_svr/table_renderer.rb
492
+ - lib/gloo/web_svr/web_method.rb
466
493
  - lib/run.rb
467
494
  homepage: http://github.com/ecrane/gloo
468
495
  licenses: