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