Pathname#join has different behaviour to File.join
Pathname.new('/a').join('/b').to_s # => "/b" File.join(Pathname.new('/a'), '/b').to_s # => "/a/b"
in my case
'/b' was in a variable and it wasn't immediately obvious why it wasn't working when I moved to use Pathname
This seems to not be desired behaviour as it's different to
File.join, and this case isn't document anywhere.
Can we either change the behaviour to treat the "other" of
Pathname#+ as always relative (possibly just removing a leading slash), or add this case to the documentation?
#2 [ruby-core:87762] Updated by shevegen (Robert A. Heiler) 16 days ago
This behaviour surprised me too. Is it expected that the information from "/a"
is lost? I have no idea but the documentation does not mention this; perhaps
the above could be added as an example OR the behaviour changed (or both).
I have little to none experience with pathname these days as I seem to handle
paths ... without pathname. :D
Documentation to Pathname .join is at:
#3 [ruby-core:87763] Updated by Hanmac (Hans Mackowiak) 16 days ago
Pathname.new('/a').join('c', 'b').to_s #=> "/a/c/b" Pathname.new('/a').join('/c', 'b').to_s #=> "/c/b" Pathname.new('/a').join('/c', '/b').to_s #=> "/b"
Why it does this?
"/c" means start of an absolute path there
#4 [ruby-core:87890] Updated by znz (Kazuhiro NISHIYAMA) 10 days ago
I think it is expected behavior.
defassert(:plus, '/b', 'a', '/b')