mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
+37
-24
@@ -19,34 +19,47 @@ class File < IO
|
||||
end
|
||||
|
||||
def self.join(*names)
|
||||
if names.size == 0
|
||||
""
|
||||
elsif names.size == 1
|
||||
names[0]
|
||||
else
|
||||
if names[0][-1] == File::SEPARATOR
|
||||
s = names[0][0..-2]
|
||||
else
|
||||
s = names[0].dup
|
||||
end
|
||||
(1..names.size-2).each { |i|
|
||||
t = names[i]
|
||||
if t[0] == File::SEPARATOR and t[-1] == File::SEPARATOR
|
||||
t = t[1..-2]
|
||||
elsif t[0] == File::SEPARATOR
|
||||
t = t[1..-1]
|
||||
elsif t[-1] == File::SEPARATOR
|
||||
t = t[0..-2]
|
||||
return "" if names.empty?
|
||||
|
||||
names.map! do |name|
|
||||
case name
|
||||
when String
|
||||
name
|
||||
when Array
|
||||
if names == name
|
||||
raise ArgumentError, "recursive array"
|
||||
end
|
||||
s += File::SEPARATOR + t if t != ""
|
||||
}
|
||||
if names[-1][0] == File::SEPARATOR
|
||||
s += File::SEPARATOR + names[-1][1..-1]
|
||||
join(*name)
|
||||
else
|
||||
s += File::SEPARATOR + names[-1]
|
||||
raise TypeError, "no implicit conversion of #{name.class} into String"
|
||||
end
|
||||
s
|
||||
end
|
||||
|
||||
return names[0] if names.size == 1
|
||||
|
||||
if names[0][-1] == File::SEPARATOR
|
||||
s = names[0][0..-2]
|
||||
else
|
||||
s = names[0].dup
|
||||
end
|
||||
|
||||
(1..names.size-2).each { |i|
|
||||
t = names[i]
|
||||
if t[0] == File::SEPARATOR and t[-1] == File::SEPARATOR
|
||||
t = t[1..-2]
|
||||
elsif t[0] == File::SEPARATOR
|
||||
t = t[1..-1]
|
||||
elsif t[-1] == File::SEPARATOR
|
||||
t = t[0..-2]
|
||||
end
|
||||
s += File::SEPARATOR + t if t != ""
|
||||
}
|
||||
if names[-1][0] == File::SEPARATOR
|
||||
s += File::SEPARATOR + names[-1][1..-1]
|
||||
else
|
||||
s += File::SEPARATOR + names[-1]
|
||||
end
|
||||
s
|
||||
end
|
||||
|
||||
def self.expand_path(path, default_dir = '.')
|
||||
|
||||
+10
-8
@@ -69,14 +69,16 @@ assert('IO#flock') do
|
||||
end
|
||||
|
||||
assert('File.join') do
|
||||
File.join() == "" and
|
||||
File.join("a") == "a" and
|
||||
File.join("/a") == "/a" and
|
||||
File.join("a/") == "a/" and
|
||||
File.join("a", "b", "c") == "a/b/c" and
|
||||
File.join("/a", "b", "c") == "/a/b/c" and
|
||||
File.join("a", "b", "c/") == "a/b/c/" and
|
||||
File.join("a/", "/b/", "/c") == "a/b/c"
|
||||
assert_equal "", File.join()
|
||||
assert_equal "a", File.join("a")
|
||||
assert_equal "/a", File.join("/a")
|
||||
assert_equal "a/", File.join("a/")
|
||||
assert_equal "a/b/c", File.join("a", "b", "c")
|
||||
assert_equal "/a/b/c", File.join("/a", "b", "c")
|
||||
assert_equal "a/b/c/", File.join("a", "b", "c/")
|
||||
assert_equal "a/b/c", File.join("a/", "/b/", "/c")
|
||||
assert_equal "a/b/c", File.join(["a", "b", "c"])
|
||||
assert_equal "a/b/c", File.join("a", ["b", ["c"]])
|
||||
end
|
||||
|
||||
assert('File.realpath') do
|
||||
|
||||
Reference in New Issue
Block a user