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?
Updated by shevegen (Robert A. Heiler) 9 months 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:
Updated by Hanmac (Hans Mackowiak) 9 months 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
Updated by znz (Kazuhiro NISHIYAMA) 9 months ago
I think it is expected behavior.
defassert(:plus, '/b', 'a', '/b')