@@ -186,18 +186,18 @@ def initialize(scheme,
186186
187187 if arg_check
188188 self . scheme = scheme
189- self . userinfo = userinfo
190189 self . hostname = host
191190 self . port = port
191+ self . userinfo = userinfo
192192 self . path = path
193193 self . query = query
194194 self . opaque = opaque
195195 self . fragment = fragment
196196 else
197197 self . set_scheme ( scheme )
198- self . set_userinfo ( userinfo )
199198 self . set_host ( host )
200199 self . set_port ( port )
200+ self . set_userinfo ( userinfo )
201201 self . set_path ( path )
202202 self . query = query
203203 self . set_opaque ( opaque )
@@ -511,7 +511,7 @@ def set_userinfo(user, password = nil)
511511 user , password = split_userinfo ( user )
512512 end
513513 @user = user
514- @password = password if password
514+ @password = password
515515
516516 [ @user , @password ]
517517 end
@@ -522,7 +522,7 @@ def set_userinfo(user, password = nil)
522522 # See also Bundler::URI::Generic.user=.
523523 #
524524 def set_user ( v )
525- set_userinfo ( v , @password )
525+ set_userinfo ( v , nil )
526526 v
527527 end
528528 protected :set_user
@@ -574,6 +574,12 @@ def password
574574 @password
575575 end
576576
577+ # Returns the authority info (array of user, password, host and
578+ # port), if any is set. Or returns +nil+.
579+ def authority
580+ return @user , @password , @host , @port if @user || @password || @host || @port
581+ end
582+
577583 # Returns the user component after Bundler::URI decoding.
578584 def decoded_user
579585 Bundler ::URI . decode_uri_component ( @user ) if @user
@@ -615,6 +621,13 @@ def set_host(v)
615621 end
616622 protected :set_host
617623
624+ # Protected setter for the authority info (+user+, +password+, +host+
625+ # and +port+). If +port+ is +nil+, +default_port+ will be set.
626+ #
627+ protected def set_authority ( user , password , host , port = nil )
628+ @user , @password , @host , @port = user , password , host , port || self . default_port
629+ end
630+
618631 #
619632 # == Args
620633 #
@@ -639,6 +652,7 @@ def set_host(v)
639652 def host = ( v )
640653 check_host ( v )
641654 set_host ( v )
655+ set_userinfo ( nil )
642656 v
643657 end
644658
@@ -729,6 +743,7 @@ def set_port(v)
729743 def port = ( v )
730744 check_port ( v )
731745 set_port ( v )
746+ set_userinfo ( nil )
732747 port
733748 end
734749
@@ -1121,7 +1136,7 @@ def merge(oth)
11211136
11221137 base = self . dup
11231138
1124- authority = rel . userinfo || rel . host || rel . port
1139+ authority = rel . authority
11251140
11261141 # RFC2396, Section 5.2, 2)
11271142 if ( rel . path . nil? || rel . path . empty? ) && !authority && !rel . query
@@ -1134,9 +1149,7 @@ def merge(oth)
11341149
11351150 # RFC2396, Section 5.2, 4)
11361151 if authority
1137- base . set_userinfo ( rel . userinfo )
1138- base . set_host ( rel . host )
1139- base . set_port ( rel . port || base . default_port )
1152+ base . set_authority ( *authority )
11401153 base . set_path ( rel . path )
11411154 elsif base . path && rel . path
11421155 base . set_path ( merge_path ( base . path , rel . path ) )
0 commit comments