summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorksss <[email protected]>2016-09-11 17:02:35 +0900
committerksss <[email protected]>2016-09-11 22:01:45 +0900
commitff845be72cc146dc8c16d408a5694e6587de5957 (patch)
tree4f34590b8e89469739b67a1b04687b377ba46ff2
parent7c9d941003b48d3551b28879598b3329c3b5d98b (diff)
downloadmruby-ff845be72cc146dc8c16d408a5694e6587de5957.tar.gz
mruby-ff845be72cc146dc8c16d408a5694e6587de5957.zip
Support Array argument
-rw-r--r--mrblib/file.rb61
-rw-r--r--test/file.rb2
2 files changed, 39 insertions, 24 deletions
diff --git a/mrblib/file.rb b/mrblib/file.rb
index 86074c3e3..f84bd0ed3 100644
--- a/mrblib/file.rb
+++ b/mrblib/file.rb
@@ -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 = '.')
diff --git a/test/file.rb b/test/file.rb
index 029454ea5..48a6eea9d 100644
--- a/test/file.rb
+++ b/test/file.rb
@@ -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"]])
end
assert('File.realpath') do