From ed7e5f0e165a766c7707fd1ef8e2bb77597a859e Mon Sep 17 00:00:00 2001 From: jimweirich Date: Mon, 16 Jun 2008 15:19:22 +0000 Subject: [PATCH] fixed revealed method & block issue git-svn-id: svn+ssh://rubyforge.org/var/svn/builder/trunk@114 b15df707-ad1a-0410-81b8-e991873a3486 --- lib/blankslate.rb | 10 +++------- test/test_blankslate.rb | 13 +++++++++++++ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/lib/blankslate.rb b/lib/blankslate.rb index 0f30838..5d136b1 100644 --- a/lib/blankslate.rb +++ b/lib/blankslate.rb @@ -36,13 +36,9 @@ def find_hidden_method(name) # Redefine a previously hidden method so that it may be called on a blank # slate object. def reveal(name) - bound_method = nil - unbound_method = find_hidden_method(name) - fail "Don't know how to reveal method '#{name}'" unless unbound_method - define_method(name) do |*args| - bound_method ||= unbound_method.bind(self) - bound_method.call(*args) - end + hidden_method = find_hidden_method(name) + fail "Don't know how to reveal method '#{name}'" unless hidden_method + define_method(name, hidden_method) end end diff --git a/test/test_blankslate.rb b/test/test_blankslate.rb index ae5794e..a528ea9 100644 --- a/test/test_blankslate.rb +++ b/test/test_blankslate.rb @@ -155,6 +155,19 @@ def test_revealing_previously_hidden_methods_are_callable assert_match /^#<.*>$/, with_to_s.new.to_s end + def test_revealing_previously_hidden_methods_are_callable_with_block + Object.class_eval <<-EOS + def given_block(&block) + block + end + EOS + + with_given_block = Class.new(BlankSlate) do + reveal :given_block + end + assert_not_nil with_given_block.new.given_block {} + end + def test_revealing_a_hidden_method_twice_is_ok with_to_s = Class.new(BlankSlate) do reveal :to_s