mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
erb.rb: Add ERB#result_with_hash
[ruby-core:55985] [Feature #8631] [fix GH-1623] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58891 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
fd8df3ab3d
commit
eb1652b571
2 changed files with 39 additions and 0 deletions
10
lib/erb.rb
10
lib/erb.rb
|
@ -889,6 +889,16 @@ class ERB
|
|||
end
|
||||
end
|
||||
|
||||
# Render a template on a new toplevel binding with local variables specified
|
||||
# by a Hash object.
|
||||
def result_with_hash(hash)
|
||||
b = new_toplevel
|
||||
hash.each_pair do |key, value|
|
||||
b.local_variable_set(key, value)
|
||||
end
|
||||
result(b)
|
||||
end
|
||||
|
||||
##
|
||||
# Returns a new binding each time *near* TOPLEVEL_BINDING for runs that do
|
||||
# not specify a binding.
|
||||
|
|
|
@ -564,6 +564,35 @@ EOS
|
|||
assert_equal(flag, erb.result)
|
||||
end
|
||||
end
|
||||
|
||||
def test_result_with_hash
|
||||
erb = @erb.new("<%= foo %>")
|
||||
assert_equal("1", erb.result_with_hash(foo: "1"))
|
||||
end
|
||||
|
||||
def test_result_with_hash_does_not_use_caller_local_variables
|
||||
erb = @erb.new("<%= foo %>")
|
||||
foo = 1
|
||||
assert_raise(NameError) { erb.result_with_hash({}) }
|
||||
end
|
||||
|
||||
def test_result_with_hash_does_not_modify_caller_binding
|
||||
erb = @erb.new("<%= foo %>")
|
||||
erb.result_with_hash(foo: "1")
|
||||
assert_equal(false, binding.local_variable_defined?(:foo))
|
||||
end
|
||||
|
||||
def test_result_with_hash_does_not_modify_toplevel_binding
|
||||
erb = @erb.new("<%= foo %>")
|
||||
erb.result_with_hash(foo: "1")
|
||||
assert_equal(false, TOPLEVEL_BINDING.local_variable_defined?(:foo))
|
||||
end
|
||||
|
||||
# This depends on the behavior that #local_variable_set raises TypeError by invalid key.
|
||||
def test_result_with_hash_with_invalid_keys_raises_type_error
|
||||
erb = @erb.new("<%= 1 %>")
|
||||
assert_raise(TypeError) { erb.result_with_hash({ 1 => "1" }) }
|
||||
end
|
||||
end
|
||||
|
||||
class TestERBCoreWOStrScan < TestERBCore
|
||||
|
|
Loading…
Add table
Reference in a new issue