[#97063] [Ruby master Bug#16608] ConditionVariable#wait should return false when timeout exceeded — shugo@...

Issue #16608 has been reported by shugo (Shugo Maeda).

10 messages 2020/02/05

[#97084] [Ruby master Feature#16614] New method cache mechanism for Guild — ko1@...

Issue #16614 has been reported by ko1 (Koichi Sasada).

18 messages 2020/02/07

[#97248] [Ruby master Bug#16651] Extensions Do Not Compile on Mingw64 — cfis@...

Issue #16651 has been reported by cfis (Charlie Savage).

17 messages 2020/02/24

[#97289] [Ruby master Bug#16658] `method__cache__clear` DTrace hook was dropped without replacement — v.ondruch@...

Issue #16658 has been reported by vo.x (Vit Ondruch).

9 messages 2020/02/27

[#97307] [Ruby master Feature#16663] Add block or filtered forms of Kernel#caller to allow early bail-out — headius@...

Issue #16663 has been reported by headius (Charles Nutter).

29 messages 2020/02/28

[#97310] [Ruby master Feature#16665] Add an Array#except_index method — alexandr1golubenko@...

Issue #16665 has been reported by alex_golubenko (Alex Golubenko).

12 messages 2020/02/29

[ruby-core:97189] [Ruby master Bug#14891] Pathname#join has different behaviour to File.join

From: me@...
Date: 2020-02-18 13:39:17 UTC
List: ruby-core #97189
Issue #14891 has been updated by jnchito (Junichi Ito).


zverok (Victor Shepelev) wrote in #note-7:
> > I am wondering about the current behavior of Pathname#join, too. Are there any useful use cases for `Pathname.new('/a').join('/c', '/b').to_s #=> "/b"`
> 
> I believe that `Pathname#join` acts kinda like `cd` in the shell: `cd x` is "go deeper to `x` level" while `cd /x` si "go to the root, then into `/x` folder".

Thank you for your explanation. It is easy to understand the behavior if I think `Pathname.new('/a').join('/c', '/b')` means `cd /a` then `cd /c` then `cd /b`. (params can be both directories and files, though.)

> I assume that those finding the behavior less logical think about paths about "just some abstract strings" and `Pathname#join` as a fancy way to write `Array#join(SYSTEM_PATH_DELIMITER)`. But `Pathname` tries to represent "filesystem path object" in a meaningful way, consistent with filesystem's intuitions.

That is me who thought "`Pathname#join` as a fancy way to write `Array#join(SYSTEM_PATH_DELIMITER)`". However, Rails developers like me often see `Rails.root.join('foo/bar.jpg')` as main use case of `Pathname#join`. So I guess many of them might misunderstand it just joins two strings in a readable way. 

In addition, it is very confusing `File#join` has the same name and different behavior, and File and Pathname are also close idea. Many people might misunderstand they act in the same way. So probably `Pathname#join` should have been given an another good name. (`Pathname#merge` might not be a bad idea.)

----------------------------------------
Bug #14891: Pathname#join has different behaviour to File.join
https://bugs.ruby-lang.org/issues/14891#change-84297

* Author: robotdana (Dana Sherson)
* Status: Open
* Priority: Normal
* ruby -v: 2.6.0-preview2, and before
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
~~~ ruby
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?



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next