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 account 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 instance 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.
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.
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.
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.
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_path ⇒ String
Returns the full path to the template, taking into account the gem directory
and adding the .erb
extension to the end.
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 |
#render ⇒ String
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.
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_string ⇒ String
Renders a template, handling the template as a string, but otherwise acting the same way as #render.
75 76 77 |
# File 'lib/vagrant/util/template_renderer.rb', line 75 def render_string Erubis::Eruby.new(template, trim: true).result(binding) end |