Feature #12843

Updated by nobu (Nobuyoshi Nakada) over 6 years ago

We currently have `File.basename()` File.basename() and `File.dirname()`, File.dirname(), both of which 
 work very well and are quite useful when working with files and 

 When you want to get the filename without extension, you can use 
 something like this: 


     File.basename('foo/bar/test.rb', '.rb') 
     File.basename('foo/bar/test.rb', '.*') 

 While this works very well, I was wondering if it would be possible 
 to add a method that does precisely that for you but which requires 
 only one argument - the path. That would allow us to omit the ',' 
 and the second argument, which I think would be nice to have. 

 Resulting ruby code may be a tiny bit shorter: 


     File.basename('foo/bar/test.rb', '.*') 

 Where `.methodXY()` .methodXY() should be the name of the new method added. 

 I would thus like to suggest a way for a new method addition, on the 
 class `File` File namespace, just like `.basename()` .basename() and `.dirname()`, .dirname(), that will 
 return the filename of a given path/file, but without any suffix and 
 without any path - so, similar to `File.basename()` File.basename() but to additionally 
 already chop away all extname suffixes. 

 Giving things a proper, meaningful name is often difficult. In 
 particular when method names should ideally be short; both 
 `.dirname` .dirname and `.basename` .basename are quite short too. 

 My obvious choice would be: 



 But I am not sure if this is a good name. A problem is that I 
 can not come up with a better name. 

 We also already have `File.extname()` File.extname() in order to determine the 
 "extension name" of the file. 

 So we essentially have 3 behaviours - obtain the name of the 
 directory via `.dirname`; .dirname; obtain the name of the file/entry itself, 
 via `.basename`; .basename; and being able to obtain the name of the extension 
 via `.extname`. .extname. 

 What we actually appear to be missing is to obtain the part 
 of the name of a path/file/directory WITHOUT the extension 
 and WITHOUT the leading    dirname part. 

 If `File.filename()` File.filename() is not a good name then perhaps any of the 
 following may serve as better alternatives; some are obviously 
 not really great names though, I add them mostly for comparison: 


     File.filename_without_extension() # Probably too verbose but 
       # probably more descriptive than the other names 

 Anyway, I guess the name of the method is one thing - if the 
 functionality itself would be approved, then I am sure a good 
 name can be found for the functionality anyway if none of 
 the above are very good choices. I just thought that it should 
 fit towards `.dirname` `.basename` .dirname .basename and `.extname`, .extname, hence why I put 
 `.filename` .filename first. 

 Thanks for reading!