def soft_merge(u2)
			# we want automatic unescaping of u2 components
			u2 = self.class.new(u2) unless u2.is_a?(self.class)
			# only merge if we are both opaque or path like
			if opaque.nil? == u2.opaque.nil?
				components = uri.component
				if components.include?(:userinfo)
					components += %i[user password]
					components.delete(:userinfo)
				end
				components.each do |m|
					# path returns "" by default but we don't want to merge in this case
					if u2.respond_to?(m) && (v = u2.public_send(m)) && !((v == "") && (m == :path))
						uri.public_send(:"#{m}=", v)
					end
				end
			end
			self
		end
def soft_merge(u2)
			# we want automatic unescaping of u2 components
			u2 = self.class.new(u2) unless u2.is_a?(self.class)
			# only merge if we are both opaque or path like
			if opaque.nil? == u2.opaque.nil?
				components = uri.component
				if components.include?(:userinfo)
					components += %i[user password]
					components.delete(:userinfo)
				end
				components.each do |m|
					# path returns "" by default but we don't want to merge in this case
					if u2.respond_to?(m) && (v = u2.public_send(m)) && !((v == "") && (m == :path))
						uri.public_send(:"#{m}=", v)
					end
				end
			end
			self
		end
merge(u2) replace self by u2 if u2 is aboslute
 soft_merge looks at each u2 components