module Goofy::Render

Public Class Methods

setup(app) click to toggle source
# File lib/goofy/render.rb, line 5
def self.setup(app)
  app.settings[:render] ||= {}
  app.settings[:render][:template_engine] ||= "erb"
  app.settings[:render][:layout] ||= "layout"
  app.settings[:render][:views] ||= File.expand_path("views", Dir.pwd)
  app.settings[:render][:options] ||= {
    default_encoding: Encoding.default_external
  }
end

Public Instance Methods

_cache() click to toggle source

@private Used internally by #_render to cache the

Tilt templates.
# File lib/goofy/render.rb, line 59
def _cache
  Thread.current[:_cache] ||= Tilt::Cache.new
end
_render(template, locals = {}, options = {}, &block) click to toggle source

@private Renders any type of template file supported by Tilt.

@example

# Renders home, and is assumed to be HAML.
_render("home.haml")

# Renders with some local variables
_render("home.haml", site_name: "My Site")

# Renders with HAML options
_render("home.haml", {}, ugly: true, format: :html5)

# Renders in layout
_render("layout.haml") { _render("home.haml") }
# File lib/goofy/render.rb, line 51
def _render(template, locals = {}, options = {}, &block)
  _cache.fetch(template) {
    Tilt.new(template, 1, options.merge(outvar: '@_output'))
  }.render(self, locals, &block)
end
partial(template, locals = {}) click to toggle source
# File lib/goofy/render.rb, line 24
def partial(template, locals = {})
  _render(template_path(template), locals, settings[:render][:options])
end
render(template, locals = {}, layout = settings[:render][:layout]) click to toggle source
# File lib/goofy/render.rb, line 15
def render(template, locals = {}, layout = settings[:render][:layout])
  res.headers["Content-Type"] ||= "text/html; charset=utf-8"
  res.write(view(template, locals, layout))
end
template_path(template) click to toggle source
# File lib/goofy/render.rb, line 28
def template_path(template)
  dir = settings[:render][:views]
  ext = settings[:render][:template_engine]

  return File.join(dir, "#{ template }.#{ ext }")
end
view(template, locals = {}, layout = settings[:render][:layout]) click to toggle source
# File lib/goofy/render.rb, line 20
def view(template, locals = {}, layout = settings[:render][:layout])
  partial(layout, locals.merge(content: partial(template, locals)))
end