Given File.dirname("/some/folder/") the result of /some is very surprising because the path is "obviously" a directory without a file specified. (I got bit by this today… yes, I needed more tests)
My expectation was that it would return /some/folder. My expectation seems consistent with the method's documentation which states "Returns all components of the filename given in file_name except the last one." – the "last one" should be the item after the last File::SEPARATOR ("/" on my system)
What is the reasoning for the above being the behavior?
Subject changed from Result of Pathname#dirname / File.dirname handling of paths with trailing slashes is surprising to Result of Pathname#dirname / File.dirname handling of paths with trailing File::SEPARATOR is surprising
Given File.dirname("/some/folder/") the result of /some is very surprising because the path is "obviously" a directory without a file specified. (I got bit by this today… yes, I needed more tests)
My expectation was that it would return /some/folder. My expectation seems consistent with the method's documentation which states "Returns all components of the filename given in file_name except the last one." – the "last one" should be the item after the last File::SEPARATOR ("/" on my system)
What is the reasoning for the above being the behavior?
The path is obvious a directory.. true. However, the docs says to call the method with a filename, not a directory name. I'm not quite sure what you would be trying to achieve by calling it with just a directory name. Perhaps you intend to use Pathname.new("/some/folder/") instead?
file.c (rb_file_s_basename, rb_file_s_dirname): [DOC] state
that trailing separators will be stripped first, like as
basename(1) and dirname(1). [ruby-core:82828] [Bug #13908]