lib/ostruct.rb: Use frozen literals.
Patch adapted from Espartaco Palma. [GH-1714] [Bug #14000] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60406 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
e077e7956a
commit
e565c838ce
@ -1,4 +1,4 @@
|
||||
# frozen_string_literal: false
|
||||
# frozen_string_literal: true
|
||||
#
|
||||
# = ostruct.rb: OpenStruct implementation
|
||||
#
|
||||
@ -308,25 +308,20 @@ class OpenStruct
|
||||
# Returns a string containing a detailed summary of the keys and values.
|
||||
#
|
||||
def inspect
|
||||
str = "#<#{self.class}"
|
||||
|
||||
ids = (Thread.current[InspectKey] ||= [])
|
||||
if ids.include?(object_id)
|
||||
return str << ' ...>'
|
||||
end
|
||||
|
||||
ids << object_id
|
||||
begin
|
||||
first = true
|
||||
for k,v in @table
|
||||
str << "," unless first
|
||||
first = false
|
||||
str << " #{k}=#{v.inspect}"
|
||||
detail = ' ...'
|
||||
else
|
||||
ids << object_id
|
||||
begin
|
||||
detail = @table.map do |key, value|
|
||||
" #{key}=#{value.inspect}"
|
||||
end.join(',')
|
||||
ensure
|
||||
ids.pop
|
||||
end
|
||||
return str << '>'
|
||||
ensure
|
||||
ids.pop
|
||||
end
|
||||
['#<', self.class, detail, '>'].join
|
||||
end
|
||||
alias :to_s :inspect
|
||||
|
||||
|
@ -52,12 +52,14 @@ class TC_OpenStruct < Test::Unit::TestCase
|
||||
foo.bar = 1
|
||||
foo.baz = 2
|
||||
assert_equal("#<OpenStruct bar=1, baz=2>", foo.inspect)
|
||||
assert_equal(false, foo.inspect.frozen?)
|
||||
|
||||
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)
|
||||
assert_equal(false, foo.inspect.frozen?)
|
||||
end
|
||||
|
||||
def test_frozen
|
||||
|
Loading…
x
Reference in New Issue
Block a user