Skip to content

Instantly share code, notes, and snippets.

@sometimesfood
Last active August 29, 2015 14:23
Show Gist options
  • Save sometimesfood/b1b10e0ec1b36a0b65d7 to your computer and use it in GitHub Desktop.
Save sometimesfood/b1b10e0ec1b36a0b65d7 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
require 'minitest/autorun'
require 'erb'
class ErbTemplate
def initialize(hash)
hash.each do |k, v|
instance_var = "@#{k}"
instance_variable_set(instance_var, v)
define_singleton_method(k) { instance_variable_get(instance_var) }
end
end
def render(template)
ERB.new(template).result(binding)
end
def self.render(template, hash)
new(hash).render(template)
end
end
describe ErbTemplate do
it 'should render ERB' do
expected = 'foo bar'
actual = ErbTemplate.render('<%= foo %> <%= bar %>', foo: :foo, bar: :bar)
actual.must_equal expected
end
it 'should throw exceptions for undefined variables' do
-> { ErbTemplate.render('<%= foo %>', bar: :bar) }.must_raise NameError
end
end
#!/usr/bin/env ruby
require 'minitest/autorun'
require 'erb'
require 'ostruct'
class ErbTemplateFail < OpenStruct
def render(template)
ERB.new(template).result(binding)
end
def self.render(template, hash)
new(hash).render(template)
end
end
describe ErbTemplateFail do
it 'should render ERB' do
expected = 'foo bar'
actual = ErbTemplateFail.render('<%= foo %> <%= bar %>', foo: :foo, bar: :bar)
actual.must_equal expected
end
it 'should throw exceptions for undefined variables' do
-> { ErbTemplateFail.render('<%= foo %>', bar: :bar) }.must_raise NameError
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment