From 139c3cda1a573926996822bc26bc36d2c01faeae Mon Sep 17 00:00:00 2001 From: David Celis Date: Tue, 1 Dec 2015 17:15:23 -0800 Subject: [PATCH] Do not mutate strings in URI#to_s When running Ruby with `--enable-frozen-string-literal`, URI#to_s fails because it tries to mutate frozen strings. We can get around this by creating new strings as necessary instead of repeatedly mutating the same string. Signed-off-by: David Celis --- lib/uri/generic.rb | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/lib/uri/generic.rb b/lib/uri/generic.rb index 5c134e59..c5f4425 100644 --- a/lib/uri/generic.rb +++ b/lib/uri/generic.rb @@ -1340,37 +1340,33 @@ def normalize! # def to_s str = '' + if @scheme - str << @scheme - str << ':'.freeze + str = "#{str}#{@scheme}:" end if @opaque - str << @opaque + str = "#{str}#{@opaque}" else if @host - str << '//'.freeze + str = "#{str}//" end if self.userinfo - str << self.userinfo - str << '@'.freeze + str = "#{str}#{self.userinfo}@" end if @host - str << @host + str = "#{str}#{@host}" end if @port && @port != self.default_port - str << ':'.freeze - str << @port.to_s + str = "#{str}:#{@port}" end - str << @path + str = "#{str}#{@path}" if @query - str << '?'.freeze - str << @query + str = "#{str}?#{@query}" end end if @fragment - str << '#'.freeze - str << @fragment + str = "#{str}##{@fragment}" end str end -- 2.6.3