summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-10-23 15:13:38 +0000
committermarcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-10-23 15:13:38 +0000
commit99d5d90f2f8d61d37b6eb110b54d84a08de5a4d1 (patch)
treeb2815647f44ee1c99ed117a9a94b43e389912928
parentb9e18abe4a881a638d0c6cfbbffeacea43813e86 (diff)
* 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
-rw-r--r--lib/ostruct.rb2
-rw-r--r--test/ostruct/test_ostruct.rb10
2 files changed, 11 insertions, 1 deletions
diff --git a/lib/ostruct.rb b/lib/ostruct.rb
index 6b60bdf..3c14454 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 a472509..3c1d574 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