Unverified Commit ff845be7 authored by ksss's avatar ksss

Support Array argument

parent 7c9d9410
...@@ -19,16 +19,30 @@ class File < IO ...@@ -19,16 +19,30 @@ class File < IO
end end
def self.join(*names) def self.join(*names)
if names.size == 0 return "" if names.empty?
""
elsif names.size == 1 names.map! do |name|
names[0] case name
when String
name
when Array
if names == name
raise ArgumentError, "recursive array"
end
join(*name)
else else
raise TypeError, "no implicit conversion of #{name.class} into String"
end
end
return names[0] if names.size == 1
if names[0][-1] == File::SEPARATOR if names[0][-1] == File::SEPARATOR
s = names[0][0..-2] s = names[0][0..-2]
else else
s = names[0].dup s = names[0].dup
end end
(1..names.size-2).each { |i| (1..names.size-2).each { |i|
t = names[i] t = names[i]
if t[0] == File::SEPARATOR and t[-1] == File::SEPARATOR if t[0] == File::SEPARATOR and t[-1] == File::SEPARATOR
...@@ -47,7 +61,6 @@ class File < IO ...@@ -47,7 +61,6 @@ class File < IO
end end
s s
end end
end
def self.expand_path(path, default_dir = '.') def self.expand_path(path, default_dir = '.')
def concat_path(path, base_path) def concat_path(path, base_path)
......
...@@ -77,6 +77,8 @@ assert('File.join') do ...@@ -77,6 +77,8 @@ assert('File.join') do
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")
assert_equal "a/b/c", File.join(["a", "b", "c"])
assert_equal "a/b/c", File.join("a", ["b", ["c"]])
end end
assert('File.realpath') do assert('File.realpath') do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment