mirror of
https://github.com/ruby/ruby.git
synced 2025-09-15 16:44:01 +02:00
* lib/ostruct.rb (method_missing): Handle [] and []= correctly.
Based on a patch by Caius Durling, bug #4179 [ruby-core:33792] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31753 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
40e7d79391
commit
a50bdcd6df
3 changed files with 19 additions and 3 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
Sat May 28 00:58:40 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
|
||||||
|
|
||||||
|
* lib/ostruct.rb (method_missing): Handle [] and []= correctly.
|
||||||
|
Based on a patch by Caius Durling, bug #4179 [ruby-core:33792]
|
||||||
|
|
||||||
Fri May 27 23:56:54 2011 Kouhei Sutou <kou@cozmixng.org>
|
Fri May 27 23:56:54 2011 Kouhei Sutou <kou@cozmixng.org>
|
||||||
|
|
||||||
* test/rexml/test_core.rb (Tester::test_text_frozen): split frozen
|
* test/rexml/test_core.rb (Tester::test_text_frozen): split frozen
|
||||||
|
|
|
@ -177,15 +177,15 @@ class OpenStruct
|
||||||
def method_missing(mid, *args) # :nodoc:
|
def method_missing(mid, *args) # :nodoc:
|
||||||
mname = mid.id2name
|
mname = mid.id2name
|
||||||
len = args.length
|
len = args.length
|
||||||
if mname.chomp!('=')
|
if mname.chomp!('=') && mid != :[]=
|
||||||
if len != 1
|
if len != 1
|
||||||
raise ArgumentError, "wrong number of arguments (#{len} for 1)", caller(1)
|
raise ArgumentError, "wrong number of arguments (#{len} for 1)", caller(1)
|
||||||
end
|
end
|
||||||
modifiable[new_ostruct_member(mname)] = args[0]
|
modifiable[new_ostruct_member(mname)] = args[0]
|
||||||
elsif len == 0
|
elsif len == 0 && mid != :[]
|
||||||
@table[mid]
|
@table[mid]
|
||||||
else
|
else
|
||||||
raise NoMethodError, "undefined method `#{mname}' for #{self}", caller(1)
|
raise NoMethodError, "undefined method `#{mid}' for #{self}", caller(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -61,4 +61,15 @@ class TC_OpenStruct < Test::Unit::TestCase
|
||||||
assert_not_respond_to(o, :a, bug)
|
assert_not_respond_to(o, :a, bug)
|
||||||
assert_not_respond_to(o, :a=, bug)
|
assert_not_respond_to(o, :a=, bug)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_method_missing_handles_square_bracket_equals
|
||||||
|
o = OpenStruct.new
|
||||||
|
assert_raise(NoMethodError) { o[:foo] = :bar }
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_method_missing_handles_square_brackets
|
||||||
|
o = OpenStruct.new
|
||||||
|
assert_raise(NoMethodError) { o[:foo] }
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue