Class: Roda::RodaPlugins::Render::TemplateMtimeWrapper
- Inherits:
-
Object
- Object
- Roda::RodaPlugins::Render::TemplateMtimeWrapper
- Defined in:
- lib/roda/plugins/render.rb
Overview
Wrapper object for the Tilt template, that checks the modified time of the template file, and rebuilds the template if the template file has been modified. This is an internal class and the API is subject to change at any time.
Instance Method Summary collapse
-
#define_compiled_method(roda_class, method_name, locals_keys = EMPTY_ARRAY) ⇒ Object
Compile a method in the given module with the given name that will call the compiled template method, updating the compiled template method.
-
#if_modified ⇒ Object
If the template file has been updated, return true and update the template object and the modification time.
-
#initialize(roda_class, opts, template_opts) ⇒ TemplateMtimeWrapper
constructor
A new instance of TemplateMtimeWrapper.
-
#render(*args, &block) ⇒ Object
If the template file exists and the modification time has changed, rebuild the template file, then call render on it.
-
#template_last_modified ⇒ Object
Return when the template was last modified.
Constructor Details
#initialize(roda_class, opts, template_opts) ⇒ TemplateMtimeWrapper
Returns a new instance of TemplateMtimeWrapper.
323 324 325 326 327 328 329 330 331 332 333 |
# File 'lib/roda/plugins/render.rb', line 323 def initialize(roda_class, opts, template_opts) @roda_class = roda_class @opts = opts @template_opts = template_opts reset_template @path = opts[:path] deps = opts[:dependencies] @dependencies = ([@path] + Array(deps)) if deps @mtime = template_last_modified end |
Instance Method Details
#define_compiled_method(roda_class, method_name, locals_keys = EMPTY_ARRAY) ⇒ Object
Compile a method in the given module with the given name that will call the compiled template method, updating the compiled template method
377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 |
# File 'lib/roda/plugins/render.rb', line 377 def define_compiled_method(roda_class, method_name, locals_keys=EMPTY_ARRAY) mod = roda_class::RodaCompiledTemplates internal_method_name = :"_#{method_name}" begin mod.send(:define_method, internal_method_name, compiled_method(locals_keys, roda_class)) rescue ::NotImplementedError return false end mod.send(:private, internal_method_name) mod.send(:define_method, method_name, &compiled_method_lambda(roda_class, internal_method_name, locals_keys)) mod.send(:private, method_name) method_name end |
#if_modified ⇒ Object
If the template file has been updated, return true and update the template object and the modification time. Other return false.
360 361 362 363 364 365 366 367 368 369 370 371 372 |
# File 'lib/roda/plugins/render.rb', line 360 def if_modified begin mtime = template_last_modified rescue # ignore errors else if mtime != @mtime reset_template yield @mtime = mtime end end end |
#render(*args, &block) ⇒ Object
If the template file exists and the modification time has changed, rebuild the template file, then call render on it.
337 338 339 340 341 342 343 344 345 |
# File 'lib/roda/plugins/render.rb', line 337 def render(*args, &block) res = nil modified = false if_modified do res = @template.render(*args, &block) modified = true end modified ? res : @template.render(*args, &block) end |
#template_last_modified ⇒ Object
Return when the template was last modified. If the template depends on any other files, check the modification times of all dependencies and return the maximum.
350 351 352 353 354 355 356 |
# File 'lib/roda/plugins/render.rb', line 350 def template_last_modified if deps = @dependencies deps.map{|f| File.mtime(f)}.max else File.mtime(@path) end end |