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



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.



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.



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.



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.



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.



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

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