aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--lib/ostruct.rb2
-rw-r--r--test/ostruct/test_ostruct.rb3
3 files changed, 8 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 12670410b3..1450b9cb79 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Thu Feb 23 03:58:08 2012 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/ostruct.rb (delete_field): Bug fix so previous value is
+ returned. Patch by Nick Recobra [Bug #6063]
+
Thu Feb 23 02:33:00 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
* io.c (rb_io_extract_modeenc): fail only if conflicting
diff --git a/lib/ostruct.rb b/lib/ostruct.rb
index 46c178c489..21bda73c37 100644
--- a/lib/ostruct.rb
+++ b/lib/ostruct.rb
@@ -190,8 +190,8 @@ class OpenStruct
#
def delete_field(name)
sym = name.to_sym
- @table.delete sym
singleton_class.__send__(:remove_method, sym, "#{name}=")
+ @table.delete sym
end
InspectKey = :__inspect_key__ # :nodoc:
diff --git a/test/ostruct/test_ostruct.rb b/test/ostruct/test_ostruct.rb
index db8e7415eb..dca2382b2b 100644
--- a/test/ostruct/test_ostruct.rb
+++ b/test/ostruct/test_ostruct.rb
@@ -57,9 +57,10 @@ class TC_OpenStruct < Test::Unit::TestCase
o.a = 'a'
assert_respond_to(o, :a)
assert_respond_to(o, :a=)
- o.delete_field :a
+ a = o.delete_field :a
assert_not_respond_to(o, :a, bug)
assert_not_respond_to(o, :a=, bug)
+ assert_equal(a, 'a')
end
def test_method_missing_handles_square_bracket_equals