Implement `template' task keyword

This commit is contained in:
Thibault Jouan 2014-09-28 14:32:01 +00:00
parent ff0287b545
commit 6cd294a0b8
3 changed files with 47 additions and 0 deletions

View File

@ -0,0 +1,27 @@
Feature: `template' task keyword
Background:
Given a file named "basic.erb" with:
"""
basic template
"""
Given a file named "variables.erb" with:
"""
<%= @foo %>
"""
Scenario: renders an ERB template file
Given a recipe with:
"""
task(:echo_template) { echo template 'basic' }
"""
When I execute the recipe
Then the output must contain "basic template"
Scenario: renders ERB with given attributes as member data
Given a recipe with:
"""
task(:echo_template) { echo template('variables', foo: 'bar') }
"""
When I execute the recipe
Then the output must contain "bar"

View File

@ -1,3 +1,4 @@
require 'erb'
require 'etc'
require 'forwardable'
require 'optparse'

View File

@ -57,6 +57,25 @@ module Producer
def get(key)
@env[key]
end
def template(path, variables = {})
path = "#{path}.erb"
tpl = ERB.new(File.read(path), nil, '-')
tpl.filename = path
tpl.result build_erb_binding variables
end
private
def build_erb_binding(variables)
Object.new.instance_eval do |o|
variables.each do |k, v|
o.instance_variable_set "@#{k}", v
end
binding
end
end
end
end
end