mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05: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>
|
||||
|
||||
* test/rexml/test_core.rb (Tester::test_text_frozen): split frozen
|
||||
|
|
|
@ -177,15 +177,15 @@ class OpenStruct
|
|||
def method_missing(mid, *args) # :nodoc:
|
||||
mname = mid.id2name
|
||||
len = args.length
|
||||
if mname.chomp!('=')
|
||||
if mname.chomp!('=') && mid != :[]=
|
||||
if len != 1
|
||||
raise ArgumentError, "wrong number of arguments (#{len} for 1)", caller(1)
|
||||
end
|
||||
modifiable[new_ostruct_member(mname)] = args[0]
|
||||
elsif len == 0
|
||||
elsif len == 0 && mid != :[]
|
||||
@table[mid]
|
||||
else
|
||||
raise NoMethodError, "undefined method `#{mname}' for #{self}", caller(1)
|
||||
raise NoMethodError, "undefined method `#{mid}' for #{self}", caller(1)
|
||||
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)
|
||||
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
|
||||
|
|
Loading…
Add table
Reference in a new issue