Class: Vagrant::Util::TemplateRenderer

Inherits:
OpenStruct
  • Object
show all
Defined in:
lib/vagrant/util/template_renderer.rb

Overview

This class is used to render the ERB templates in the ‘GEM_ROOT/templates` directory.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(template, data = {}) ⇒ TemplateRenderer

Returns a new instance of TemplateRenderer.



38
39
40
41
42
43
44
45
# File 'lib/vagrant/util/template_renderer.rb', line 38

def initialize(template, data = {})
  super()

  data[:template] = template
  data.each do |key, value|
    send("#{key}=", value)
  end
end

Class Method Details

.render(*args) ⇒ String

Render a given template and return the result. This method optionally takes a block which will be passed the renderer prior to rendering, which allows the caller to set any view variables within the renderer itself.

Returns:

  • (String)

    Rendered template



15
16
17
# File 'lib/vagrant/util/template_renderer.rb', line 15

def render(*args)
  render_with(:render, *args)
end

.render_string(*args) ⇒ String

Render a given string and return the result. This method optionally takes a block which will be passed the renderer prior to rendering, which allows the caller to set any view variables within the renderer itself.

Parameters:

  • template (String)

    The template data string.

Returns:

  • (String)

    Rendered template



25
26
27
# File 'lib/vagrant/util/template_renderer.rb', line 25

def render_string(*args)
  render_with(:render_string, *args)
end

.render_with(method, template, data = {}) {|renderer| ... } ⇒ Object

Method used internally to DRY out the other renderers. This method creates and sets up the renderer before calling a specified method on it.

Yields:

  • (renderer)


31
32
33
34
35
# File 'lib/vagrant/util/template_renderer.rb', line 31

def render_with(method, template, data={})
  renderer = new(template, data)
  yield renderer if block_given?
  renderer.send(method.to_sym)
end

Instance Method Details

#full_template_pathString

Returns the full path to the template, taking into accoun the gem directory and adding the ‘.erb` extension to the end.

Returns:

  • (String)


78
79
80
# File 'lib/vagrant/util/template_renderer.rb', line 78

def full_template_path
  Vagrant.source_root.join('templates', "#{template}.erb").to_s.squeeze("/")
end

#renderString

Renders the template using the class intance as the binding. Because the renderer inherits from ‘OpenStruct`, additional view variables can be added like normal accessors.

Returns:

  • (String)


52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/vagrant/util/template_renderer.rb', line 52

def render
  # TODO: Seems like a pretty dirty way to do this. Perhaps refactor this
  old_template = template
  result = nil
  File.open(full_template_path, 'r') do |f|
    self.template = f.read
    result = render_string
  end

  result
ensure
  self.template = old_template
end

#render_stringString

Renders a template, handling the template as a string, but otherwise acting the same way as #render.

Returns:

  • (String)


70
71
72
# File 'lib/vagrant/util/template_renderer.rb', line 70

def render_string
  Erubis::Eruby.new(template, :trim => true).result(binding)
end