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 # = ostruct.rb: OpenStruct implementation
# #
@ -308,25 +308,20 @@ class OpenStruct
# Returns a string containing a detailed summary of the keys and values. # Returns a string containing a detailed summary of the keys and values.
# #
def inspect def inspect
str = "#<#{self.class}"
ids = (Thread.current[InspectKey] ||= []) ids = (Thread.current[InspectKey] ||= [])
if ids.include?(object_id) if ids.include?(object_id)
return str << ' ...>' detail = ' ...'
end else
ids << object_id
ids << object_id begin
begin detail = @table.map do |key, value|
first = true " #{key}=#{value.inspect}"
for k,v in @table end.join(',')
str << "," unless first ensure
first = false ids.pop
str << " #{k}=#{v.inspect}"
end end
return str << '>'
ensure
ids.pop
end end
['#<', self.class, detail, '>'].join
end end
alias :to_s :inspect alias :to_s :inspect

View File

@ -52,12 +52,14 @@ class TC_OpenStruct < Test::Unit::TestCase
foo.bar = 1 foo.bar = 1
foo.baz = 2 foo.baz = 2
assert_equal("#<OpenStruct bar=1, baz=2>", foo.inspect) assert_equal("#<OpenStruct bar=1, baz=2>", foo.inspect)
assert_equal(false, foo.inspect.frozen?)
foo = OpenStruct.new foo = OpenStruct.new
foo.bar = OpenStruct.new foo.bar = OpenStruct.new
assert_equal('#<OpenStruct bar=#<OpenStruct>>', foo.inspect) assert_equal('#<OpenStruct bar=#<OpenStruct>>', foo.inspect)
foo.bar.foo = foo foo.bar.foo = foo
assert_equal('#<OpenStruct bar=#<OpenStruct foo=#<OpenStruct ...>>>', foo.inspect) assert_equal('#<OpenStruct bar=#<OpenStruct foo=#<OpenStruct ...>>>', foo.inspect)
assert_equal(false, foo.inspect.frozen?)
end end
def test_frozen def test_frozen