1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

merges r21496 from trunk into ruby_1_9_1.

* lib/ostruct.rb (OpenStruct#inspect): fixed the recursion check.
  Patch by Kornelius Kalnbach.  [ruby-core:20992].

* test/ostruct/test_ostruct.rb: test for inspect.
  Patch by Kornelius Kalnbach.  [ruby-core:20992].

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@21555 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
yugui 2009-01-15 15:38:08 +00:00
parent 03d1b314b8
commit d5159ddec8
3 changed files with 34 additions and 14 deletions

View file

@ -1,7 +1,15 @@
Tue Jan 13 21:45:53 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
* lib/ostruct.rb (OpenStruct#inspect): fixed the recursion check.
Patch by Kornelius Kalnbach. [ruby-core:20992].
* test/ostruct/test_ostruct.rb: test for inspect.
Patch by Kornelius Kalnbach. [ruby-core:20992].
Tue Jan 13 21:28:14 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp> Tue Jan 13 21:28:14 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
* object.c (rb_obj_not_match): rdoc. * object.c (rb_obj_not_match): rdoc.
Patch by Kornelius Kalnbach. Patch by Kornelius Kalnbach. [ruby-core:20991]
Tue Jan 13 21:44:30 2009 NAKAMURA Usaku <usa@ruby-lang.org> Tue Jan 13 21:44:30 2009 NAKAMURA Usaku <usa@ruby-lang.org>

View file

@ -112,26 +112,24 @@ class OpenStruct
def inspect def inspect
str = "#<#{self.class}" str = "#<#{self.class}"
Thread.current[InspectKey] ||= [] ids = (Thread.current[InspectKey] ||= [])
if Thread.current[InspectKey].include?(self) then if ids.include?(object_id)
str << " ..." return str << ' ...>'
else end
ids << object_id
begin
first = true first = true
for k,v in @table for k,v in @table
str << "," unless first str << "," unless first
first = false first = false
Thread.current[InspectKey] << v
begin
str << " #{k}=#{v.inspect}" str << " #{k}=#{v.inspect}"
end
return str << '>'
ensure ensure
Thread.current[InspectKey].pop ids.pop
end end
end end
end
str << ">"
end
alias :to_s :inspect alias :to_s :inspect
attr_reader :table # :nodoc: attr_reader :table # :nodoc:

View file

@ -20,4 +20,18 @@ class TC_OpenStruct < Test::Unit::TestCase
o2.instance_eval{@table = {:a => 'b'}} o2.instance_eval{@table = {:a => 'b'}}
assert_not_equal(o1, o2) assert_not_equal(o1, o2)
end end
def test_inspect
foo = OpenStruct.new
assert_equal("#<OpenStruct>", foo.inspect)
foo.bar = 1
foo.baz = 2
assert_equal("#<OpenStruct bar=1, baz=2>", foo.inspect)
foo = OpenStruct.new
foo.bar = OpenStruct.new
assert_equal('#<OpenStruct bar=#<OpenStruct>>', foo.inspect)
foo.bar.foo = foo
assert_equal('#<OpenStruct bar=#<OpenStruct foo=#<OpenStruct ...>>>', foo.inspect)
end
end end