From 99d5d90f2f8d61d37b6eb110b54d84a08de5a4d1 Mon Sep 17 00:00:00 2001 From: marcandre Date: Wed, 23 Oct 2013 15:13:38 +0000 Subject: * lib/ostruct.rb (OpenStruct#delete): Use the converted argument. Patch by Kenichi Kamiya. [Fixes GH-383] * test/ostruct/test_ostruct.rb: Added tests for above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43403 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/ostruct.rb | 2 +- test/ostruct/test_ostruct.rb | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/ostruct.rb b/lib/ostruct.rb index 6b60bdf3fe..3c14454437 100644 --- a/lib/ostruct.rb +++ b/lib/ostruct.rb @@ -220,7 +220,7 @@ class OpenStruct # def delete_field(name) sym = name.to_sym - singleton_class.__send__(:remove_method, sym, "#{name}=") + singleton_class.__send__(:remove_method, sym, "#{sym}=") @table.delete sym end diff --git a/test/ostruct/test_ostruct.rb b/test/ostruct/test_ostruct.rb index a472509b88..3c1d574e32 100644 --- a/test/ostruct/test_ostruct.rb +++ b/test/ostruct/test_ostruct.rb @@ -68,6 +68,16 @@ class TC_OpenStruct < Test::Unit::TestCase assert_not_respond_to(o, :a, bug) assert_not_respond_to(o, :a=, bug) assert_equal(a, 'a') + s = Object.new + def s.to_sym + :foo + end + o[s] = true + assert_respond_to(o, :foo) + assert_respond_to(o, :foo=) + o.delete_field s + assert_not_respond_to(o, :foo) + assert_not_respond_to(o, :foo=) end def test_setter -- cgit v1.2.3