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.


40
41
42
43
44
45
46
47
48
49
50
51
# 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

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


17
18
19
# File 'lib/vagrant/util/template_renderer.rb', line 17

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


27
28
29
# 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| ... } ⇒ 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)

33
34
35
36
37
# 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

Instance Method Details

#full_template_pathString

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

Returns:

  • (String)

83
84
85
# File 'lib/vagrant/util/template_renderer.rb', line 83

def full_template_path
  @template_root.join("#{template}.erb").to_s.squeeze("/")
end

#renderString

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.

Returns:

  • (String)

58
59
60
61
62
63
64
65
66
67
68
69
# 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_stringString

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

Returns:

  • (String)

75
76
77
# File 'lib/vagrant/util/template_renderer.rb', line 75

def render_string
  binding.eval(Erubi::Engine.new(template, trim: true).src)
end