Project

General

Profile

Feature #12194

File.dirname optional parameter

Added by nobu (Nobuyoshi Nakada) about 1 year ago. Updated about 1 year ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:74448]

Description

As talked at the last developers' meeting, I propose an addition of an optional parameter to File.dirname.

Often I see the code, like

File.dirname(File.dirname(path)) # or
File.expand_path("../..", path)

which are not concise.

This proposal can make them as:

File.dirname(path, 2)

https://github.com/ruby/ruby/compare/trunk...nobu:feature/dirname-level?expand=1

History

#1 [ruby-core:74452] Updated by vo.x (Vit Ondruch) about 1 year ago

  • Subject changed from File.dirname optonal parameter to File.dirname optional parameter

#2 [ruby-core:74453] Updated by Eregon (Benoit Daloze) about 1 year ago

Using Pathname would already make this much nicer:

Pathname(path).parent.parent

And less error prone than File.dirname if the path is not absolute.
Just my opinion, but I do not like this particular syntax.

#3 [ruby-core:74477] Updated by shevegen (Robert A. Heiler) about 1 year ago

I myself have found Pathname harder or less elegant to use than the direct File* or Dir* methods so I am in support of the suggestion by nobu.

So to Benoit, I understand that you may consider File.dirname(path, 2) not ideal either (a user may wonder what the 2 means), the alternative
suggestion to use Pathname is not ideal either and additionally requires one to require pathname for that toplevel Pathname() method and
subsequent use of pathname:

require 'pathname'
# require 'fileutils'; FileUtils.mkdir_p('/tmp/foobar/') # <-- this line just for testing purpose, disregard it
Pathname("/tmp/foobar/").parent.parent.to_s # => "/"

Being able to directly do so on File.dirname() itself is good, in my opinion.

Also available in: Atom PDF