Class: Vagrant::Util::TemplateRenderer
- Inherits:
-
OpenStruct
- Object
- OpenStruct
- Vagrant::Util::TemplateRenderer
- 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
-
.render(*args) ⇒ String
Render a given template and return the result.
-
.render_string(*args) ⇒ String
Render a given string and return the result.
-
.render_with(method, template, data = {}) {|renderer| ... } ⇒ Object
Method used internally to DRY out the other renderers.
Instance Method Summary collapse
-
#full_template_path ⇒ String
Returns the full path to the template, taking into accoun the gem directory and adding the
.erbextension to the end. -
#initialize(template, data = {}) ⇒ TemplateRenderer
constructor
A new instance of TemplateRenderer.
-
#render ⇒ String
Renders the template using the class intance as the binding.
-
#render_string ⇒ String
Renders a template, handling the template as a string, but otherwise acting the same way as #render.
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.
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.
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_path ⇒ String
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 |
#render ⇒ String
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_string ⇒ String
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 |