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:
marcandre 2017-10-24 18:08:15 +00:00
parent e077e7956a
commit e565c838ce
2 changed files with 13 additions and 16 deletions

View File

@ -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

View File

@ -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