Class: Gloo::Objs::Page
- Inherits:
-
Core::Obj
- Object
- Core::Baseo
- Core::Obj
- Gloo::Objs::Page
- Defined in:
- lib/gloo/objs/web_svr/page.rb
Constant Summary collapse
- KEYWORD =
'page'.freeze
- KEYWORD_SHORT =
'page'.freeze
- ON_RENDER =
Events
'on_render'.freeze
- ON_PRERENDER =
'on_prerender'.freeze
- AFTER_RENDER =
'after_render'.freeze
- PARAMS =
Parameters used during render.
'params'.freeze
- ID =
'id'.freeze
- HEAD =
Content
'head'.freeze
- BODY =
'body'.freeze
- CONTENT =
'content'.freeze
- TITLE =
'title'.freeze
- LAYOUT =
Layout for this page. If not specified, use the layout for the app.
'layout'.freeze
- CONTENT_TYPE =
Return Content type and HTML Code
'content_type'.freeze
- HTML_CONTENT =
'html'.freeze
- TEXT_CONTENT =
'text'.freeze
- JSON_CONTENT =
'json'.freeze
- FILE_CONTENT =
'file'.freeze
- RETURN_CODE =
'return_code'.freeze
- FILE_TYPE =
Children for FILE pages.
'file_type'.freeze
- FILE_PATH =
'file_path'.freeze
- FILE_NAME =
'file_name'.freeze
- DOWNLOAD_FILE =
'download_file'.freeze
Constants inherited from Core::Baseo
Core::Baseo::NOT_IMPLEMENTED_ERR
Instance Attribute Summary
Attributes inherited from Core::Obj
Attributes inherited from Core::Baseo
Class Method Summary collapse
-
.messages ⇒ Object
Get a list of message names that this object receives.
-
.render_params(content, params) ⇒ Object
Render content with the given params.
-
.short_typename ⇒ Object
The short name of the object type.
-
.typename ⇒ Object
The name of the object type.
Instance Method Summary collapse
-
#add_children_on_create? ⇒ Boolean
Does this object have children to add when an object is created in interactive mode? This does not apply during obj load, etc.
-
#add_default_children ⇒ Object
Add children to this object.
-
#body ⇒ Object
Get the body element.
-
#body_content ⇒ Object
Get the body content.
-
#content_type ⇒ Object
Get the content type.
- #download_file ⇒ Object
-
#file_name ⇒ Object
Get the name of the file.
-
#file_path ⇒ Object
Get the path to the file.
-
#file_type ⇒ Object
Get the type of the file.
-
#head ⇒ Object
Get the head element.
-
#head_content ⇒ Object
Get the header content.
-
#init_params ⇒ Object
Init params container with request values.
- #is_file? ⇒ Boolean
-
#is_html? ⇒ Boolean
Is the return type HTML?.
-
#is_json? ⇒ Boolean
Is the return type JSON?.
-
#is_text? ⇒ Boolean
Is the return type TEXT?.
-
#msg_render ⇒ Object
Get the expiration date for the certificate.
-
#multiline_value? ⇒ Boolean
Does this object support multi-line values? Initially only true for scripts.
-
#page_layout ⇒ Object
Get the layout for this page.
-
#page_layout_or_app_layout ⇒ Object
Get the layout for this page or if none for the app.
-
#params_hash ⇒ Object
Get the params hash from the child object.
-
#redirect_set? ⇒ Boolean
Is there a redirect page set in the running app?.
-
#render(request = nil) ⇒ Object
Render the page.
-
#render_file(params) ⇒ Object
Render a file.
-
#render_html(params) ⇒ Object
Render the page as HTML.
-
#render_json ⇒ Object
Render the page as JSON.
-
#render_text(params) ⇒ Object
Render the page as TEXT.
-
#render_with_params(obj, render_ƒ, params) ⇒ Object
Given an object and a render message, render the object.
-
#return_code ⇒ Object
Get the return code.
-
#run_after_render ⇒ Object
Run the on rendered script if there is one.
-
#run_on_prerender ⇒ Object
Run the on prerender script if there is one.
-
#run_on_render ⇒ Object
Run the on render script if there is one.
-
#set_id ⇒ Object
Set the ID parameter if there is one.
-
#set_value(new_value) ⇒ Object
Set the value with any necessary type conversions.
-
#wrap(tag, content, id = nil, classes = nil) ⇒ Object
Wrap the content in the tag with id and class.
Methods inherited from Core::Obj
#add_child, can_create?, #can_receive_message?, #child_count, #child_index, #contains_child?, #delete_children, #dispatch, #display_value, #find_add_child, #find_child, #find_child_resolve_alias, #find_child_value, help, inherited, #initialize, #is_alias?, #is_container?, #is_function?, #msg_blank?, #msg_contains?, #msg_reload, #msg_unload, #pn, #remove_child, #root?, #send_message, #set_parent, #sql_value, #type_display, #value_display, #value_is_array?, #value_is_blank?, #value_string?
Methods inherited from Core::Baseo
Constructor Details
This class inherits a constructor from Gloo::Core::Obj
Class Method Details
.messages ⇒ Object
Get a list of message names that this object receives.
312 313 314 |
# File 'lib/gloo/objs/web_svr/page.rb', line 312 def self. return super + [ 'render' ] end |
.render_params(content, params) ⇒ Object
Render content with the given params. Params might be nil, in which case the content is returned with no changes.
473 474 475 476 477 478 479 480 |
# File 'lib/gloo/objs/web_svr/page.rb', line 473 def self.render_params content, params return content unless params renderer = ERB.new( content ) content = renderer.result_with_hash( params ) return content end |
.short_typename ⇒ Object
The short name of the object type.
57 58 59 |
# File 'lib/gloo/objs/web_svr/page.rb', line 57 def self.short_typename return KEYWORD_SHORT end |
.typename ⇒ Object
The name of the object type.
50 51 52 |
# File 'lib/gloo/objs/web_svr/page.rb', line 50 def self.typename return KEYWORD end |
Instance Method Details
#add_children_on_create? ⇒ Boolean
Does this object have children to add when an object is created in interactive mode? This does not apply during obj load, etc.
268 269 270 |
# File 'lib/gloo/objs/web_svr/page.rb', line 268 def add_children_on_create? return true end |
#add_default_children ⇒ Object
Add children to this object. This is used by containers to add children needed for default configurations.
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 |
# File 'lib/gloo/objs/web_svr/page.rb', line 277 def add_default_children fac = @engine.factory fac.create_script ON_RENDER, '', self fac.create_script AFTER_RENDER, '', self fac.create_can PARAMS, self params = { :name => HEAD, :type => Gloo::Objs::Element.typename, :value => nil, :parent => self } head = fac.create params content = fac.create_can CONTENT, head params = { :name => TITLE, :type => Gloo::Objs::Element.typename, :value => nil, :parent => content } title = fac.create params params = { :name => BODY, :type => Gloo::Objs::Element.typename, :value => nil, :parent => self } body = fac.create params content = fac.create_can CONTENT, body end |
#body ⇒ Object
Get the body element.
99 100 101 |
# File 'lib/gloo/objs/web_svr/page.rb', line 99 def body return find_child BODY end |
#body_content ⇒ Object
Get the body content. This might be in a content child, or it might be the body object itself.
108 109 110 111 112 113 114 |
# File 'lib/gloo/objs/web_svr/page.rb', line 108 def body_content body_obj = body return nil unless body_obj content_obj = body_obj.find_child CONTENT return content_obj ? content_obj : body_obj end |
#content_type ⇒ Object
Get the content type.
175 176 177 178 |
# File 'lib/gloo/objs/web_svr/page.rb', line 175 def content_type type = find_child CONTENT_TYPE return type ? type.value : nil end |
#download_file ⇒ Object
520 521 522 523 524 525 526 |
# File 'lib/gloo/objs/web_svr/page.rb', line 520 def download_file o = find_child DOWNLOAD_FILE return false unless o o = Gloo::Objs::Alias.resolve_alias( @engine, o ) return o&.value end |
#file_name ⇒ Object
Get the name of the file.
512 513 514 515 516 517 518 |
# File 'lib/gloo/objs/web_svr/page.rb', line 512 def file_name o = find_child FILE_NAME return nil unless o o = Gloo::Objs::Alias.resolve_alias( @engine, o ) return o&.value end |
#file_path ⇒ Object
Get the path to the file.
501 502 503 504 505 506 507 |
# File 'lib/gloo/objs/web_svr/page.rb', line 501 def file_path o = find_child FILE_PATH return nil unless o o = Gloo::Objs::Alias.resolve_alias( @engine, o ) return o&.value end |
#file_type ⇒ Object
Get the type of the file.
490 491 492 493 494 495 496 |
# File 'lib/gloo/objs/web_svr/page.rb', line 490 def file_type o = find_child FILE_TYPE return nil unless o o = Gloo::Objs::Alias.resolve_alias( @engine, o ) return o&.value end |
#head ⇒ Object
Get the head element.
79 80 81 |
# File 'lib/gloo/objs/web_svr/page.rb', line 79 def head return find_child HEAD end |
#head_content ⇒ Object
Get the header content. This might be in a content child, or it might be the head object itself.
88 89 90 91 92 93 94 |
# File 'lib/gloo/objs/web_svr/page.rb', line 88 def head_content head_obj = head return nil unless head_obj content_obj = head_obj.find_child CONTENT return content_obj ? content_obj : head_obj end |
#init_params ⇒ Object
Init params container with request values.
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/gloo/objs/web_svr/page.rb', line 119 def init_params params_can = find_child PARAMS return nil unless params_can # First set URL route params if there are any. if @request&.request_params&.route_params @request.request_params.route_params.each_with_index do |route_p,i| o = params_can.children[i] o.set_value( route_p ) if o && o.name != ID end end if @request url_params = @request.request_params.query_params url_params.each do |k,v| o = params_can.find_child k o.set_value( v ) if o end @request.request_params.body_params.each do |k,v| o = params_can.find_child k o.set_value( v ) if o end end end |
#is_file? ⇒ Boolean
213 214 215 |
# File 'lib/gloo/objs/web_svr/page.rb', line 213 def is_file? return content_type == FILE_CONTENT end |
#is_html? ⇒ Boolean
Is the return type HTML?
194 195 196 197 |
# File 'lib/gloo/objs/web_svr/page.rb', line 194 def is_html? return true if content_type.nil? return content_type == HTML_CONTENT end |
#is_json? ⇒ Boolean
Is the return type JSON?
209 210 211 |
# File 'lib/gloo/objs/web_svr/page.rb', line 209 def is_json? return content_type == JSON_CONTENT end |
#is_text? ⇒ Boolean
Is the return type TEXT?
202 203 204 |
# File 'lib/gloo/objs/web_svr/page.rb', line 202 def is_text? return content_type == TEXT_CONTENT end |
#msg_render ⇒ Object
Get the expiration date for the certificate.
319 320 321 322 323 |
# File 'lib/gloo/objs/web_svr/page.rb', line 319 def msg_render content = self.render @engine.heap.it.set_to content return content end |
#multiline_value? ⇒ Boolean
Does this object support multi-line values? Initially only true for scripts.
72 73 74 |
# File 'lib/gloo/objs/web_svr/page.rb', line 72 def multiline_value? return false end |
#page_layout ⇒ Object
Get the layout for this page.
183 184 185 186 187 188 189 |
# File 'lib/gloo/objs/web_svr/page.rb', line 183 def page_layout o = find_child LAYOUT return nil unless o o = Gloo::Objs::Alias.resolve_alias( @engine, o ) return o end |
#page_layout_or_app_layout ⇒ Object
Get the layout for this page or if none for the app.
428 429 430 431 432 433 434 |
# File 'lib/gloo/objs/web_svr/page.rb', line 428 def page_layout_or_app_layout layout = page_layout return layout if layout return nil unless @engine.app_running? return @engine.running_app.obj.default_page_layout end |
#params_hash ⇒ Object
Get the params hash from the child object. Returns nil if there is none.
149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/gloo/objs/web_svr/page.rb', line 149 def params_hash params_can = find_child PARAMS return nil unless params_can h = {} params_can.children.each do |o| # resolve aliases o = Gloo::Objs::Alias.resolve_alias( @engine, o ) h[ o.name ] = o.value end return h end |
#redirect_set? ⇒ Boolean
Is there a redirect page set in the running app?
340 341 342 343 |
# File 'lib/gloo/objs/web_svr/page.rb', line 340 def redirect_set? return false unless @engine.app_running? return @engine.running_app.obj.redirect end |
#render(request = nil) ⇒ Object
Render the page. If this is being called from the web server, the request will be passed in and will include request context such as params.
367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 |
# File 'lib/gloo/objs/web_svr/page.rb', line 367 def render request=nil @request = request # TODO : refactor this set_id if @request # Put params from request into params container. init_params # Run the on prerender script run_on_prerender # Get Params hash before running on render params = params_hash run_on_render return nil if redirect_set? if is_html? contents = render_html params elsif is_json? contents = render_json elsif is_text? contents = render_text params elsif is_file? contents = render_file params else @engine.err "Unknown content type: #{content_type}" return nil end run_after_render @request = nil return nil if redirect_set? return contents end |
#render_file(params) ⇒ Object
Render a file.
531 532 533 534 535 536 537 538 539 540 |
# File 'lib/gloo/objs/web_svr/page.rb', line 531 def render_file params type = file_type data = File.binread file_path code = Gloo::WebSvr::ResponseCode::SUCCESS fname = file_name download = download_file return Gloo::WebSvr::Response.new( @engine, code, type, data, true, fname, download ) end |
#render_html(params) ⇒ Object
Render the page as HTML.
408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 |
# File 'lib/gloo/objs/web_svr/page.rb', line 408 def render_html params head_obj = render_with_params head_content, :render_html, params body_obj = render_with_params body_content, :render_html, params layout = page_layout_or_app_layout if layout @engine.log.debug "Using Page Layout: #{layout.pn}" contents = layout.render_layout( head_obj, body_obj ) else @engine.log.debug "No layout for page." contents = wrap( 'html', head_obj + body_obj ) end return Gloo::WebSvr::Response.html_response( @engine, contents, return_code ) end |
#render_json ⇒ Object
Render the page as JSON.
439 440 441 442 443 |
# File 'lib/gloo/objs/web_svr/page.rb', line 439 def render_json json_content = Gloo::Objs::Json.convert_obj_to_json( body ) return Gloo::WebSvr::Response.json_response( @engine, json_content, return_code ) end |
#render_text(params) ⇒ Object
Render the page as TEXT.
448 449 450 451 |
# File 'lib/gloo/objs/web_svr/page.rb', line 448 def render_text params text_content = render_with_params body_content, :render_text, params return Gloo::WebSvr::Response.text_response( @engine, text_content, return_code ) end |
#render_with_params(obj, render_ƒ, params) ⇒ Object
Given an object and a render message, render the object. If the obj is nil, return an empty string. If the params are nil, no param rendering is done.
458 459 460 461 462 463 464 465 466 |
# File 'lib/gloo/objs/web_svr/page.rb', line 458 def render_with_params obj, render_ƒ, params return '' unless obj content = Element.render_obj( obj, render_ƒ, @engine ) # content = Page.render_params( content, params ) if params content = @engine.running_app.obj..render content, params return content end |
#return_code ⇒ Object
Get the return code. SUCCESS is the default if none is set.
167 168 169 170 |
# File 'lib/gloo/objs/web_svr/page.rb', line 167 def return_code code = find_child RETURN_CODE return code ? code.value : Gloo::WebSvr::ResponseCode::SUCCESS end |
#run_after_render ⇒ Object
Run the on rendered script if there is one.
249 250 251 252 253 254 255 256 |
# File 'lib/gloo/objs/web_svr/page.rb', line 249 def run_after_render o = find_child AFTER_RENDER return unless o @engine.log.debug "running after_render for page" Gloo::Exec::Dispatch.( @engine, 'run', o ) end |
#run_on_prerender ⇒ Object
Run the on prerender script if there is one.
225 226 227 228 229 230 231 232 |
# File 'lib/gloo/objs/web_svr/page.rb', line 225 def run_on_prerender o = find_child ON_PRERENDER return unless o @engine.log.debug "running on_prerender for page" Gloo::Exec::Dispatch.( @engine, 'run', o ) end |
#run_on_render ⇒ Object
Run the on render script if there is one.
237 238 239 240 241 242 243 244 |
# File 'lib/gloo/objs/web_svr/page.rb', line 237 def run_on_render o = find_child ON_RENDER return unless o @engine.log.debug "running on_render for page" Gloo::Exec::Dispatch.( @engine, 'run', o ) end |
#set_id ⇒ Object
Set the ID parameter if there is one.
348 349 350 351 352 353 354 355 356 357 358 359 |
# File 'lib/gloo/objs/web_svr/page.rb', line 348 def set_id return unless @request.request_params.id @engine.log.info "Setting ID: #{@request.request_params.id}" params_can = find_child PARAMS return nil unless params_can id_obj = params_can.find_child( ID ) return unless id_obj id_obj.set_value( @request.request_params.id ) end |
#set_value(new_value) ⇒ Object
Set the value with any necessary type conversions.
64 65 66 |
# File 'lib/gloo/objs/web_svr/page.rb', line 64 def set_value( new_value ) self.value = new_value.to_s end |
#wrap(tag, content, id = nil, classes = nil) ⇒ Object
Wrap the content in the tag with id and class.
333 334 335 |
# File 'lib/gloo/objs/web_svr/page.rb', line 333 def wrap( tag, content, id=nil, classes=nil ) return "<#{tag}>#{content}</#{tag}>" end |