summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mrblib/file.rb10
-rw-r--r--test/file.rb9
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