class Vagrant::Util::TemplateRenderer

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

Public Class Methods

new(template, data = {}) click to toggle source
Calls superclass method
# File lib/vagrant/util/template_renderer.rb, line 40
def initialize(template, data = {})
  super()

  @template_root = data.delete(:template_root)
  @template_root ||= Vagrant.source_root.join("templates")
  @template_root = Pathname.new(@template_root)

  data[:template] = template
  data.each do |key, value|
    send("#{key}=", value)
  end
end
render(*args) click to toggle source

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.

@return [String] Rendered template

# File lib/vagrant/util/template_renderer.rb, line 17
def render(*args)
  render_with(:render, *args)
end
render_string(*args) click to toggle source

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.

@param [String] template The template data string. @return [String] Rendered template

# File lib/vagrant/util/template_renderer.rb, line 27
def render_string(*args)
  render_with(:render_string, *args)
end
render_with(method, template, data={}) { |renderer| ... } click to toggle source

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

# File lib/vagrant/util/template_renderer.rb, line 33
def render_with(method, template, data={})
  renderer = new(template, data)
  yield renderer if block_given?
  renderer.send(method.to_sym)
end

Public Instance Methods

full_template_path() click to toggle source

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

@return [String]

# File lib/vagrant/util/template_renderer.rb, line 83
def full_template_path
  @template_root.join("#{template}.erb").to_s.squeeze("/")
end
render() click to toggle source

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

@return [String]

# File lib/vagrant/util/template_renderer.rb, line 58
def render
  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_string() click to toggle source

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

@return [String]

# File lib/vagrant/util/template_renderer.rb, line 75
def render_string
  binding.eval(Erubi::Engine.new(template, trim: true).src)
end