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
- RETURN_CODE =
'return_code'.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.
-
#head ⇒ Object
Get the head element.
-
#head_content ⇒ Object
Get the header content.
-
#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_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.
291 292 293 |
# File 'lib/gloo/objs/web_svr/page.rb', line 291 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.
446 447 448 449 450 451 452 453 |
# File 'lib/gloo/objs/web_svr/page.rb', line 446 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.
50 51 52 |
# File 'lib/gloo/objs/web_svr/page.rb', line 50 def self.short_typename return KEYWORD_SHORT end |
.typename ⇒ Object
The name of the object type.
43 44 45 |
# File 'lib/gloo/objs/web_svr/page.rb', line 43 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.
247 248 249 |
# File 'lib/gloo/objs/web_svr/page.rb', line 247 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.
256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 |
# File 'lib/gloo/objs/web_svr/page.rb', line 256 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.
92 93 94 |
# File 'lib/gloo/objs/web_svr/page.rb', line 92 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.
101 102 103 104 105 106 107 |
# File 'lib/gloo/objs/web_svr/page.rb', line 101 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.
158 159 160 161 |
# File 'lib/gloo/objs/web_svr/page.rb', line 158 def content_type type = find_child CONTENT_TYPE return type ? type.value : nil end |
#head ⇒ Object
Get the head element.
72 73 74 |
# File 'lib/gloo/objs/web_svr/page.rb', line 72 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.
81 82 83 84 85 86 87 |
# File 'lib/gloo/objs/web_svr/page.rb', line 81 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 |
#is_html? ⇒ Boolean
Is the return type HTML?
177 178 179 180 |
# File 'lib/gloo/objs/web_svr/page.rb', line 177 def is_html? return true if content_type.nil? return content_type == HTML_CONTENT end |
#is_json? ⇒ Boolean
Is the return type JSON?
192 193 194 |
# File 'lib/gloo/objs/web_svr/page.rb', line 192 def is_json? return content_type == JSON_CONTENT end |
#is_text? ⇒ Boolean
Is the return type TEXT?
185 186 187 |
# File 'lib/gloo/objs/web_svr/page.rb', line 185 def is_text? return content_type == TEXT_CONTENT end |
#msg_render ⇒ Object
Get the expiration date for the certificate.
298 299 300 301 302 |
# File 'lib/gloo/objs/web_svr/page.rb', line 298 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.
65 66 67 |
# File 'lib/gloo/objs/web_svr/page.rb', line 65 def multiline_value? return false end |
#page_layout ⇒ Object
Get the layout for this page.
166 167 168 169 170 171 172 |
# File 'lib/gloo/objs/web_svr/page.rb', line 166 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.
401 402 403 404 405 406 407 |
# File 'lib/gloo/objs/web_svr/page.rb', line 401 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.
113 114 115 116 117 118 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 144 |
# File 'lib/gloo/objs/web_svr/page.rb', line 113 def params_hash 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 h = {} params_can.children.each do |o| h[ o.name ] = o.value end return h end |
#redirect_set? ⇒ Boolean
Is there a redirect page set in the running app?
318 319 320 321 |
# File 'lib/gloo/objs/web_svr/page.rb', line 318 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.
345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 |
# File 'lib/gloo/objs/web_svr/page.rb', line 345 def render request=nil @request = request # TODO : refactor this set_id if @request # Run the on prerender script run_on_prerender # Set Params 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 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_html(params) ⇒ Object
Render the page as HTML.
381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 |
# File 'lib/gloo/objs/web_svr/page.rb', line 381 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.
412 413 414 415 416 |
# File 'lib/gloo/objs/web_svr/page.rb', line 412 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.
421 422 423 424 |
# File 'lib/gloo/objs/web_svr/page.rb', line 421 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.
431 432 433 434 435 436 437 438 439 |
# File 'lib/gloo/objs/web_svr/page.rb', line 431 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.
150 151 152 153 |
# File 'lib/gloo/objs/web_svr/page.rb', line 150 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.
228 229 230 231 232 233 234 235 |
# File 'lib/gloo/objs/web_svr/page.rb', line 228 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.
204 205 206 207 208 209 210 211 |
# File 'lib/gloo/objs/web_svr/page.rb', line 204 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.
216 217 218 219 220 221 222 223 |
# File 'lib/gloo/objs/web_svr/page.rb', line 216 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.
326 327 328 329 330 331 332 333 334 335 336 337 |
# File 'lib/gloo/objs/web_svr/page.rb', line 326 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.
57 58 59 |
# File 'lib/gloo/objs/web_svr/page.rb', line 57 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.
311 312 313 |
# File 'lib/gloo/objs/web_svr/page.rb', line 311 def wrap( tag, content, id=nil, classes=nil ) return "<#{tag}>#{content}</#{tag}>" end |