diff options
| -rw-r--r-- | mrblib/file.rb | 10 | ||||
| -rw-r--r-- | test/file.rb | 9 |
2 files changed, 19 insertions, 0 deletions
diff --git a/mrblib/file.rb b/mrblib/file.rb index aa0981930..f644ff691 100644 --- a/mrblib/file.rb +++ b/mrblib/file.rb @@ -170,4 +170,14 @@ class File < IO ext = fname.split('.').last ext.empty? ? '' : ".#{ext}" end + + def self.path(filename) + if filename.kind_of?(String) + filename + elsif filename.respond_to?(:to_path) + filename.to_path + else + raise TypeError, "no implicit conversion of #{filename.class} into String" + end + end end diff --git a/test/file.rb b/test/file.rb index d6f39ceb1..487b54f38 100644 --- a/test/file.rb +++ b/test/file.rb @@ -106,3 +106,12 @@ assert('File.expand_path (with ENV)') do assert_equal "#{ENV['HOME']}/user", File.expand_path("user", ENV['HOME']), "relative with base_dir" end + +assert('File.path') do + assert_equal "", File.path("") + assert_equal "a/b/c", File.path("a/b/c") + assert_equal "a/../b/./c", File.path("a/../b/./c") + assert_raise(TypeError) { File.path(nil) } + assert_raise(TypeError) { File.path(123) } + +end |
