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 ‘.erb` extension 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 |