gloo 3.1.0 → 3.2.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.
- checksums.yaml +4 -4
- data/lib/VERSION +1 -1
- data/lib/VERSION_NOTES +10 -0
- data/lib/gloo/app/log.rb +46 -6
- data/lib/gloo/app/running_app.rb +42 -1
- data/lib/gloo/core/obj.rb +34 -1
- data/lib/gloo/exec/exec_env.rb +4 -0
- data/lib/gloo/exec/script.rb +9 -1
- data/lib/gloo/objs/basic/container.rb +18 -2
- data/lib/gloo/objs/cli/menu.rb +9 -3
- data/lib/gloo/objs/data/mysql.rb +35 -7
- data/lib/gloo/objs/data/pg.rb +8 -0
- data/lib/gloo/objs/data/query.rb +66 -11
- data/lib/gloo/objs/data/query_result.rb +22 -1
- data/lib/gloo/objs/data/sqlite.rb +17 -2
- data/lib/gloo/objs/data/table.rb +143 -4
- data/lib/gloo/objs/web/json.rb +2 -0
- data/lib/gloo/objs/web_svr/element.rb +13 -5
- data/lib/gloo/objs/web_svr/page.rb +41 -3
- data/lib/gloo/objs/web_svr/partial.rb +7 -2
- data/lib/gloo/objs/web_svr/svr.rb +71 -4
- data/lib/gloo/verbs/break.rb +44 -0
- data/lib/gloo/verbs/create.rb +6 -0
- data/lib/gloo/verbs/log.rb +26 -5
- data/lib/gloo/verbs/redirect.rb +54 -6
- data/lib/gloo/web_svr/asset.rb +28 -0
- data/lib/gloo/web_svr/handler.rb +4 -2
- data/lib/gloo/web_svr/request.rb +35 -2
- data/lib/gloo/web_svr/routing/resource_router.rb +47 -0
- data/lib/gloo/web_svr/routing/router.rb +218 -0
- data/lib/gloo/web_svr/routing/show_routes.rb +98 -0
- data/lib/gloo/web_svr/server.rb +10 -2
- data/lib/gloo/web_svr/table_renderer.rb +147 -0
- data/lib/gloo/web_svr/web_method.rb +54 -0
- metadata +9 -4
- data/lib/gloo/web_svr/router.rb +0 -179
data/lib/gloo/objs/data/table.rb
CHANGED
@@ -13,6 +13,8 @@ module Gloo
|
|
13
13
|
KEYWORD_SHORT = 'tbl'.freeze
|
14
14
|
HEADERS = 'headers'.freeze
|
15
15
|
DATA = 'data'.freeze
|
16
|
+
CELLS = 'cells'.freeze
|
17
|
+
STYLES = 'styles'.freeze
|
16
18
|
|
17
19
|
#
|
18
20
|
# The name of the object type.
|
@@ -58,12 +60,64 @@ module Gloo
|
|
58
60
|
return [] unless o
|
59
61
|
|
60
62
|
o = Gloo::Objs::Alias.resolve_alias( @engine, o )
|
61
|
-
|
62
|
-
|
63
|
-
|
63
|
+
|
64
|
+
if o.is_a? Gloo::Objs::Query
|
65
|
+
@engine.log.debug "Table getting data from query."
|
66
|
+
begin
|
67
|
+
result = o.run_query
|
68
|
+
return result
|
69
|
+
rescue => e
|
70
|
+
@engine.err e.message
|
71
|
+
return nil
|
72
|
+
end
|
73
|
+
else
|
74
|
+
cols = self.columns
|
75
|
+
|
76
|
+
if o.children&.first.children.empty?
|
77
|
+
# It is a simgle row table.
|
78
|
+
rows = [ cols.map { |h| o.find_child( h )&.value } ]
|
79
|
+
else
|
80
|
+
rows = o.children.map do |e|
|
81
|
+
cols.map { |h| e.find_child( h )&.value }
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
return [ cols, rows ]
|
64
86
|
end
|
65
87
|
end
|
66
88
|
|
89
|
+
#
|
90
|
+
# Get the styles for the table, if any.
|
91
|
+
#
|
92
|
+
def styles
|
93
|
+
style_h = {}
|
94
|
+
o = find_child STYLES
|
95
|
+
return style_h unless o
|
96
|
+
o = Gloo::Objs::Alias.resolve_alias( @engine, o )
|
97
|
+
|
98
|
+
o.children.each do |c|
|
99
|
+
style_h[ c.name ] = c.value
|
100
|
+
end
|
101
|
+
|
102
|
+
return style_h
|
103
|
+
end
|
104
|
+
|
105
|
+
#
|
106
|
+
# Get cell renderer hash keyed by column name.
|
107
|
+
#
|
108
|
+
def cell_renderers
|
109
|
+
h = {}
|
110
|
+
o = find_child CELLS
|
111
|
+
return h unless o
|
112
|
+
|
113
|
+
o.children.each do |c|
|
114
|
+
h[ c.name ] = c.value
|
115
|
+
end
|
116
|
+
|
117
|
+
return h
|
118
|
+
end
|
119
|
+
|
120
|
+
|
67
121
|
# ---------------------------------------------------------------------
|
68
122
|
# Children
|
69
123
|
# ---------------------------------------------------------------------
|
@@ -88,6 +142,7 @@ module Gloo
|
|
88
142
|
fac.create_can DATA, self
|
89
143
|
end
|
90
144
|
|
145
|
+
|
91
146
|
# ---------------------------------------------------------------------
|
92
147
|
# Messages
|
93
148
|
# ---------------------------------------------------------------------
|
@@ -96,7 +151,7 @@ module Gloo
|
|
96
151
|
# Get a list of message names that this object receives.
|
97
152
|
#
|
98
153
|
def self.messages
|
99
|
-
return super + %w[show]
|
154
|
+
return super + %w[show render]
|
100
155
|
end
|
101
156
|
|
102
157
|
#
|
@@ -107,6 +162,90 @@ module Gloo
|
|
107
162
|
@engine.platform.show_table headers, data, title
|
108
163
|
end
|
109
164
|
|
165
|
+
def msg_render
|
166
|
+
return render
|
167
|
+
end
|
168
|
+
|
169
|
+
|
170
|
+
# ---------------------------------------------------------------------
|
171
|
+
# Render
|
172
|
+
# ---------------------------------------------------------------------
|
173
|
+
|
174
|
+
#
|
175
|
+
# Render the table.
|
176
|
+
# The render_ƒ is 'render_html', 'render_text', 'render_json', etc.
|
177
|
+
#
|
178
|
+
def render render_ƒ
|
179
|
+
begin
|
180
|
+
result = self.data
|
181
|
+
head = self.headers
|
182
|
+
head = result[0] if head.empty?
|
183
|
+
rows = result[1]
|
184
|
+
|
185
|
+
columns = build_columns result[0]
|
186
|
+
|
187
|
+
params = {
|
188
|
+
head: head,
|
189
|
+
cols: result[0],
|
190
|
+
columns: columns,
|
191
|
+
rows: rows,
|
192
|
+
styles: self.styles,
|
193
|
+
cell_renderers: self.cell_renderers
|
194
|
+
}
|
195
|
+
|
196
|
+
helper = Gloo::WebSvr::TableRenderer.new( @engine )
|
197
|
+
return helper.data_to_table params
|
198
|
+
rescue => e
|
199
|
+
@engine.err e.message
|
200
|
+
return nil
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
#
|
205
|
+
# Build the column list based on the result data and
|
206
|
+
# the headers defined in the table object.
|
207
|
+
#
|
208
|
+
def build_columns result_data
|
209
|
+
head_children = find_child HEADERS
|
210
|
+
cell_renderers = find_child CELLS
|
211
|
+
|
212
|
+
columns = []
|
213
|
+
return columns unless result_data
|
214
|
+
|
215
|
+
result_data.each_with_index do |c,index|
|
216
|
+
visible = true
|
217
|
+
name = c
|
218
|
+
title = c
|
219
|
+
display_index = index
|
220
|
+
|
221
|
+
if head_children
|
222
|
+
child = head_children.find_child c
|
223
|
+
if child
|
224
|
+
title = child.value
|
225
|
+
display_index = head_children.child_index( c )
|
226
|
+
else
|
227
|
+
visible = false
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
cell_renderer = nil
|
232
|
+
if cell_renderers
|
233
|
+
this_cr = cell_renderers.find_child( c )
|
234
|
+
cell_renderer = this_cr.value if this_cr
|
235
|
+
end
|
236
|
+
|
237
|
+
columns << {
|
238
|
+
name: name,
|
239
|
+
title: title,
|
240
|
+
visible: visible,
|
241
|
+
data_index: index,
|
242
|
+
display_index: display_index,
|
243
|
+
cell_renderer: cell_renderer
|
244
|
+
}
|
245
|
+
end
|
246
|
+
return columns.sort_by { |hsh| hsh[ :display_index ] }
|
247
|
+
end
|
248
|
+
|
110
249
|
end
|
111
250
|
end
|
112
251
|
end
|
data/lib/gloo/objs/web/json.rb
CHANGED
@@ -173,7 +173,7 @@ module Gloo
|
|
173
173
|
# Get the expiration date for the certificate.
|
174
174
|
#
|
175
175
|
def msg_render
|
176
|
-
content = self.
|
176
|
+
content = self.render_html
|
177
177
|
@engine.heap.it.set_to content
|
178
178
|
return content
|
179
179
|
end
|
@@ -226,10 +226,9 @@ module Gloo
|
|
226
226
|
e = Gloo::Objs::Alias.resolve_alias( engine, e )
|
227
227
|
if e.class == Element
|
228
228
|
rendered_obj_content << e.send( render_ƒ )
|
229
|
-
elsif e.class == Partial
|
230
|
-
rendered_obj_content << e.render( render_ƒ )
|
231
229
|
else
|
232
|
-
|
230
|
+
data = render_thing e, render_ƒ, engine
|
231
|
+
( rendered_obj_content << data ) if data # e.render( render_ƒ )
|
233
232
|
end
|
234
233
|
end
|
235
234
|
else
|
@@ -238,7 +237,16 @@ module Gloo
|
|
238
237
|
|
239
238
|
return rendered_obj_content
|
240
239
|
end
|
241
|
-
|
240
|
+
|
241
|
+
def self.render_thing e, render_ƒ, engine
|
242
|
+
begin
|
243
|
+
return e.render( render_ƒ )
|
244
|
+
rescue => e
|
245
|
+
engine.err e.message
|
246
|
+
return ''
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
242
250
|
end
|
243
251
|
end
|
244
252
|
end
|
@@ -17,6 +17,7 @@ module Gloo
|
|
17
17
|
|
18
18
|
# Parameters used during render.
|
19
19
|
PARAMS = 'params'.freeze
|
20
|
+
ID = 'id'.freeze
|
20
21
|
|
21
22
|
# Content
|
22
23
|
HEAD = 'head'.freeze
|
@@ -112,6 +113,19 @@ module Gloo
|
|
112
113
|
params_can = find_child PARAMS
|
113
114
|
return nil unless params_can
|
114
115
|
|
116
|
+
if @request
|
117
|
+
url_params = @request.query_params
|
118
|
+
url_params.each do |k,v|
|
119
|
+
o = params_can.find_child k
|
120
|
+
o.set_value( v ) if o
|
121
|
+
end
|
122
|
+
|
123
|
+
@request.body_params.each do |k,v|
|
124
|
+
o = params_can.find_child k
|
125
|
+
o.set_value( v ) if o
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
115
129
|
h = {}
|
116
130
|
params_can.children.each do |o|
|
117
131
|
h[ o.name ] = o.value
|
@@ -281,15 +295,38 @@ module Gloo
|
|
281
295
|
return @engine.running_app.obj.redirect
|
282
296
|
end
|
283
297
|
|
298
|
+
#
|
299
|
+
# Set the ID parameter if there is one.
|
300
|
+
#
|
301
|
+
def set_id
|
302
|
+
return unless @request.id
|
303
|
+
@engine.log.info "Setting ID: #{@request.id}"
|
304
|
+
|
305
|
+
params_can = find_child PARAMS
|
306
|
+
return nil unless params_can
|
307
|
+
|
308
|
+
id_obj = params_can.find_child( ID )
|
309
|
+
return unless id_obj
|
310
|
+
|
311
|
+
id_obj.set_value( @request.id )
|
312
|
+
end
|
313
|
+
|
284
314
|
#
|
285
315
|
# Render the page.
|
316
|
+
# If this is being called from the web server,
|
317
|
+
# the request will be passed in and will include
|
318
|
+
# request context such as params.
|
286
319
|
#
|
287
|
-
def render
|
288
|
-
|
289
|
-
|
320
|
+
def render request=nil
|
321
|
+
@request = request
|
322
|
+
set_id if @request
|
290
323
|
|
324
|
+
# Set Params before running on render
|
291
325
|
params = params_hash
|
292
326
|
|
327
|
+
run_on_render
|
328
|
+
return nil if redirect_set?
|
329
|
+
|
293
330
|
if is_html?
|
294
331
|
contents = render_html params
|
295
332
|
elsif is_json?
|
@@ -302,6 +339,7 @@ module Gloo
|
|
302
339
|
end
|
303
340
|
|
304
341
|
run_on_rendered
|
342
|
+
@request = nil
|
305
343
|
return nil if redirect_set?
|
306
344
|
|
307
345
|
return contents
|
@@ -161,8 +161,13 @@ module Gloo
|
|
161
161
|
run_on_render
|
162
162
|
|
163
163
|
part_content = ''
|
164
|
-
|
165
|
-
|
164
|
+
data = content
|
165
|
+
if data.children.empty?
|
166
|
+
part_content = data.value
|
167
|
+
else
|
168
|
+
data.children.each do |e|
|
169
|
+
part_content << e.send( render_ƒ )
|
170
|
+
end
|
166
171
|
end
|
167
172
|
|
168
173
|
# part_content = Page.render_params part_content, params_hash
|
@@ -16,6 +16,10 @@ module Gloo
|
|
16
16
|
HOST = 'host'.freeze
|
17
17
|
PORT = 'port'.freeze
|
18
18
|
|
19
|
+
# SSL Configuration
|
20
|
+
SSL_CERT = 'ssl_cert'.freeze
|
21
|
+
SSL_KEY = 'ssl_key'.freeze
|
22
|
+
|
19
23
|
# Events
|
20
24
|
ON_START = 'on_start'.freeze
|
21
25
|
ON_STOP = 'on_stop'.freeze
|
@@ -32,7 +36,7 @@ module Gloo
|
|
32
36
|
|
33
37
|
|
34
38
|
# Messages
|
35
|
-
SERVER_NOT_RUNNING = 'The web server is not running
|
39
|
+
SERVER_NOT_RUNNING = 'The web server is not running!'.freeze
|
36
40
|
|
37
41
|
#
|
38
42
|
# Should the current request be redirected?
|
@@ -115,6 +119,56 @@ module Gloo
|
|
115
119
|
return o
|
116
120
|
end
|
117
121
|
|
122
|
+
|
123
|
+
# ---------------------------------------------------------------------
|
124
|
+
# SSL
|
125
|
+
# ---------------------------------------------------------------------
|
126
|
+
|
127
|
+
#
|
128
|
+
# Is SSL configured for this server?
|
129
|
+
# True if the Cert and Key are both present.
|
130
|
+
#
|
131
|
+
def use_ssl?
|
132
|
+
return ssl_cert && ssl_key
|
133
|
+
end
|
134
|
+
|
135
|
+
#
|
136
|
+
# Get the SSL certificate from the child object.
|
137
|
+
# Returns nil if there is none.
|
138
|
+
#
|
139
|
+
def ssl_cert
|
140
|
+
cert = find_child SSL_CERT
|
141
|
+
return nil unless cert
|
142
|
+
|
143
|
+
cert = Gloo::Objs::Alias.resolve_alias( @engine, cert )
|
144
|
+
return cert
|
145
|
+
end
|
146
|
+
|
147
|
+
#
|
148
|
+
# Get the SSL key from the child object.
|
149
|
+
# Returns nil if there is none.
|
150
|
+
#
|
151
|
+
def ssl_key
|
152
|
+
key = find_child SSL_KEY
|
153
|
+
return nil unless key
|
154
|
+
|
155
|
+
key = Gloo::Objs::Alias.resolve_alias( @engine, key )
|
156
|
+
return key
|
157
|
+
end
|
158
|
+
|
159
|
+
#
|
160
|
+
# Get the SSL configuration for the server.
|
161
|
+
#
|
162
|
+
def ssl_config
|
163
|
+
return nil unless use_ssl?
|
164
|
+
|
165
|
+
return {
|
166
|
+
:private_key_file => ssl_key.value,
|
167
|
+
:cert_chain_file => ssl_cert.value,
|
168
|
+
:verify_peer => false,
|
169
|
+
}
|
170
|
+
end
|
171
|
+
|
118
172
|
# ---------------------------------------------------------------------
|
119
173
|
# Children
|
120
174
|
# ---------------------------------------------------------------------
|
@@ -156,7 +210,7 @@ module Gloo
|
|
156
210
|
# Get a list of message names that this object receives.
|
157
211
|
#
|
158
212
|
def self.messages
|
159
|
-
return super + [ 'start', 'stop' ]
|
213
|
+
return super + [ 'start', 'stop', 'routes' ]
|
160
214
|
end
|
161
215
|
|
162
216
|
#
|
@@ -183,6 +237,18 @@ module Gloo
|
|
183
237
|
end
|
184
238
|
end
|
185
239
|
|
240
|
+
#
|
241
|
+
# Helper message to show all routes in the running server.
|
242
|
+
#
|
243
|
+
def msg_routes
|
244
|
+
if @router
|
245
|
+
@router.show_routes
|
246
|
+
else
|
247
|
+
@engine.log.error SERVER_NOT_RUNNING
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
|
186
252
|
# ---------------------------------------------------------------------
|
187
253
|
# Start and Stop Events
|
188
254
|
# Might come from messages or from other application events.
|
@@ -197,10 +263,10 @@ module Gloo
|
|
197
263
|
@engine.log.info "Web Server URL: #{config.base_url}"
|
198
264
|
|
199
265
|
handler = Gloo::WebSvr::Handler.new( @engine, self )
|
200
|
-
@web_server = Gloo::WebSvr::Server.new( @engine, handler, config )
|
266
|
+
@web_server = Gloo::WebSvr::Server.new( @engine, handler, config, ssl_config )
|
201
267
|
@web_server.start
|
202
268
|
|
203
|
-
@router = Gloo::WebSvr::Router.new( @engine, self )
|
269
|
+
@router = Gloo::WebSvr::Routing::Router.new( @engine, self )
|
204
270
|
@router.add_page_routes
|
205
271
|
|
206
272
|
@asset = Gloo::WebSvr::Asset.new( @engine, self )
|
@@ -219,6 +285,7 @@ module Gloo
|
|
219
285
|
@engine.log.info "Stopping web server…"
|
220
286
|
@web_server.stop
|
221
287
|
@web_server = nil
|
288
|
+
@router = nil
|
222
289
|
|
223
290
|
run_on_stop
|
224
291
|
@engine.log.info "Web server stopped…"
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# Author:: Eric Crane (mailto:eric.crane@mac.com)
|
2
|
+
# Copyright:: Copyright (c) 2024 Eric Crane. All rights reserved.
|
3
|
+
#
|
4
|
+
# Break out of the script without error.
|
5
|
+
#
|
6
|
+
|
7
|
+
module Gloo
|
8
|
+
module Verbs
|
9
|
+
class Break < Gloo::Core::Verb
|
10
|
+
|
11
|
+
KEYWORD = 'break'.freeze
|
12
|
+
KEYWORD_SHORT = 'stop'.freeze
|
13
|
+
|
14
|
+
#
|
15
|
+
# Run the verb.
|
16
|
+
# Stop the execution of the current script.
|
17
|
+
#
|
18
|
+
def run
|
19
|
+
@engine.exec_env.running_script.break_out
|
20
|
+
end
|
21
|
+
|
22
|
+
#
|
23
|
+
# Get the Verb's keyword.
|
24
|
+
#
|
25
|
+
def self.keyword
|
26
|
+
return KEYWORD
|
27
|
+
end
|
28
|
+
|
29
|
+
#
|
30
|
+
# Get the Verb's keyword shortcut.
|
31
|
+
#
|
32
|
+
def self.keyword_shortcut
|
33
|
+
return KEYWORD_SHORT
|
34
|
+
end
|
35
|
+
|
36
|
+
# ---------------------------------------------------------------------
|
37
|
+
# Private functions
|
38
|
+
# ---------------------------------------------------------------------
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/gloo/verbs/create.rb
CHANGED
@@ -57,6 +57,12 @@ module Gloo
|
|
57
57
|
if Gloo::Expr::LString.string?( value )
|
58
58
|
value = Gloo::Expr::LString.strip_quotes( value )
|
59
59
|
end
|
60
|
+
|
61
|
+
# Check to see if this is an alias
|
62
|
+
pn = Gloo::Core::Pn.new( @engine, name )
|
63
|
+
obj = pn.resolve if pn
|
64
|
+
name = obj.value if obj&.is_alias?
|
65
|
+
|
60
66
|
obj = @engine.factory.create( { name: name, type: type, value: value } )
|
61
67
|
|
62
68
|
obj.add_default_children if obj&.add_children_on_create?
|
data/lib/gloo/verbs/log.rb
CHANGED
@@ -16,11 +16,11 @@ module Gloo
|
|
16
16
|
#
|
17
17
|
def run
|
18
18
|
if @tokens.token_count > 1
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
if is_clear_cmd?
|
20
|
+
@engine.log.clear
|
21
|
+
else
|
22
|
+
write_to_log
|
23
|
+
end
|
24
24
|
else
|
25
25
|
@engine.log.debug ''
|
26
26
|
end
|
@@ -46,6 +46,27 @@ module Gloo
|
|
46
46
|
|
47
47
|
private
|
48
48
|
|
49
|
+
#
|
50
|
+
# Write to the specified logger.
|
51
|
+
#
|
52
|
+
def write_to_log
|
53
|
+
expr = Gloo::Expr::Expression.new( @engine, @tokens.params )
|
54
|
+
result = expr.evaluate
|
55
|
+
level = log_level_specified( result )
|
56
|
+
@engine.log.write result, level
|
57
|
+
@engine.heap.it.set_to result
|
58
|
+
end
|
59
|
+
|
60
|
+
#
|
61
|
+
# Is this a clear logs command?
|
62
|
+
#
|
63
|
+
def is_clear_cmd?
|
64
|
+
return true if ( ( @tokens.token_count == 2 ) &&
|
65
|
+
( @tokens.params.first == 'clear' ) )
|
66
|
+
|
67
|
+
return false
|
68
|
+
end
|
69
|
+
|
49
70
|
#
|
50
71
|
# Get the formatted string.
|
51
72
|
#
|
data/lib/gloo/verbs/redirect.rb
CHANGED
@@ -12,7 +12,11 @@ module Gloo
|
|
12
12
|
KEYWORD = 'redirect'.freeze
|
13
13
|
KEYWORD_SHORT = 'go'.freeze
|
14
14
|
|
15
|
+
RUN_MESSAGE = 'run'.freeze
|
16
|
+
|
15
17
|
MISSING_EXPR_ERR = 'Missing Expression!'.freeze
|
18
|
+
APP_NOT_RUNING_ERR = 'The application is not running!'.freeze
|
19
|
+
BAD_TARGET_ERR = 'Bad redirect target!'.freeze
|
16
20
|
|
17
21
|
#
|
18
22
|
# Run the verb.
|
@@ -23,12 +27,8 @@ module Gloo
|
|
23
27
|
return
|
24
28
|
end
|
25
29
|
|
26
|
-
|
27
|
-
|
28
|
-
obj_name = @tokens.second
|
29
|
-
pn = Gloo::Core::Pn.new( @engine, obj_name )
|
30
|
-
@engine.running_app.obj.redirect = pn.resolve
|
31
|
-
end
|
30
|
+
determine_target
|
31
|
+
redirect_to_target
|
32
32
|
end
|
33
33
|
|
34
34
|
#
|
@@ -51,6 +51,54 @@ module Gloo
|
|
51
51
|
|
52
52
|
private
|
53
53
|
|
54
|
+
#
|
55
|
+
# Send the control to the redirect target.
|
56
|
+
# This could be a page or a script.
|
57
|
+
#
|
58
|
+
def redirect_to_target
|
59
|
+
if @target_obj.class == Gloo::Objs::Page
|
60
|
+
redirect_to_page
|
61
|
+
elsif @target_obj.can_receive_message?( RUN_MESSAGE )
|
62
|
+
redirect_to_script
|
63
|
+
else
|
64
|
+
@engine.err BAD_TARGET_ERR
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
#
|
69
|
+
# Find the target of the redirect.
|
70
|
+
#
|
71
|
+
def determine_target
|
72
|
+
obj_name = @tokens.second
|
73
|
+
pn = Gloo::Core::Pn.new( @engine, obj_name )
|
74
|
+
|
75
|
+
@target_obj = pn.resolve
|
76
|
+
|
77
|
+
@engine.log.info "obj type: #{@target_obj.class}"
|
78
|
+
end
|
79
|
+
|
80
|
+
#
|
81
|
+
# Redirect to a page.
|
82
|
+
# This requires a running web server.
|
83
|
+
#
|
84
|
+
def redirect_to_page
|
85
|
+
if @engine.app_running?
|
86
|
+
@engine.running_app.obj.redirect = @target_obj
|
87
|
+
else
|
88
|
+
@engine.err APP_NOT_RUNING_ERR
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
#
|
93
|
+
# Redirect to another script.
|
94
|
+
# This stops execution of the current script.
|
95
|
+
#
|
96
|
+
def redirect_to_script
|
97
|
+
@engine.exec_env.running_script.break_out
|
98
|
+
|
99
|
+
Gloo::Exec::Dispatch.message( @engine, RUN_MESSAGE, @target_obj )
|
100
|
+
end
|
101
|
+
|
54
102
|
end
|
55
103
|
end
|
56
104
|
end
|
data/lib/gloo/web_svr/asset.rb
CHANGED
@@ -11,6 +11,7 @@ module Gloo
|
|
11
11
|
ASSETS_FOLDER = 'assets'.freeze
|
12
12
|
IMAGES_FOLDER = 'images'.freeze
|
13
13
|
STYLESHEETS_FOLDER = 'stylesheets'.freeze
|
14
|
+
JAVASCRIPT_FOLDER = 'javascript'.freeze
|
14
15
|
|
15
16
|
CSS_TYPE = 'text/css'.freeze
|
16
17
|
JS_TYPE = 'text/javascript'.freeze
|
@@ -59,6 +60,13 @@ module Gloo
|
|
59
60
|
return File.join( assets_folder, STYLESHEETS_FOLDER )
|
60
61
|
end
|
61
62
|
|
63
|
+
#
|
64
|
+
# Get the stylesheets folder in the project.
|
65
|
+
#
|
66
|
+
def javascript_folder
|
67
|
+
return File.join( assets_folder, JAVASCRIPT_FOLDER )
|
68
|
+
end
|
69
|
+
|
62
70
|
#
|
63
71
|
# Find and return the page for the given route.
|
64
72
|
#
|
@@ -125,6 +133,7 @@ module Gloo
|
|
125
133
|
add_containers
|
126
134
|
add_images
|
127
135
|
add_stylesheets
|
136
|
+
add_javascript
|
128
137
|
end
|
129
138
|
|
130
139
|
#
|
@@ -141,6 +150,9 @@ module Gloo
|
|
141
150
|
|
142
151
|
@stylesheets = @assets.find_child( STYLESHEETS_FOLDER ) ||
|
143
152
|
@factory.create_can( STYLESHEETS_FOLDER, @assets )
|
153
|
+
|
154
|
+
@javascript = @assets.find_child( JAVASCRIPT_FOLDER ) ||
|
155
|
+
@factory.create_can( JAVASCRIPT_FOLDER, @assets )
|
144
156
|
end
|
145
157
|
|
146
158
|
#
|
@@ -175,6 +187,22 @@ module Gloo
|
|
175
187
|
end
|
176
188
|
end
|
177
189
|
|
190
|
+
#
|
191
|
+
# Add the Javascript files to the web server pages.
|
192
|
+
#
|
193
|
+
def add_javascript
|
194
|
+
@log.debug 'Adding javascript asset routes to web server…'
|
195
|
+
|
196
|
+
return unless File.exist? javascript_folder
|
197
|
+
|
198
|
+
# for each file in the javascript folder
|
199
|
+
# 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
|
204
|
+
end
|
205
|
+
|
178
206
|
#
|
179
207
|
# Add a file object (page route) to the given container.
|
180
208
|
#
|