summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-06-17 05:59:29 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-06-17 05:59:29 +0000
commit7d274ff6fbb97c3ac8ee0ce6903f0e77b05e0b07 (patch)
tree07625bbabe206f8454006d2488d9c8dc7b74260d
parenteeda97f8e39354d8a57c5bdd3ab0b5e4bda22a0d (diff)
* lib/pathname.rb (Kernel#Pathname): new method.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@10303 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--lib/pathname.rb31
-rw-r--r--test/pathname/test_pathname.rb25
3 files changed, 54 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index dbd5e8ccc7..2bc59e9415 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Sat Jun 17 14:53:32 2006 Tanaka Akira <akr@m17n.org>
+
+ * lib/pathname.rb (Kernel#Pathname): new method.
+
Sat Jun 17 02:01:00 2006 Tanaka Akira <akr@m17n.org>
* lib/pp.rb (Kernel#pretty_inspect): defined for pretty printed
diff --git a/lib/pathname.rb b/lib/pathname.rb
index 843d801305..7eaa82b7ce 100644
--- a/lib/pathname.rb
+++ b/lib/pathname.rb
@@ -182,12 +182,22 @@
# information. In some cases, a brief description will follow.
#
class Pathname
+
+ # :stopdoc:
+ if RUBY_VERSION < "1.9"
+ TO_PATH = :to_str
+ else
+ # to_path is implemented so Pathname objects are usable with File.open, etc.
+ TO_PATH = :to_path
+ end
+ # :startdoc:
+
#
# Create a Pathname object from the given String (or String-like object).
# If +path+ contains a NUL character (<tt>\0</tt>), an ArgumentError is raised.
#
def initialize(path)
- path = path.to_path if path.respond_to? :to_path
+ path = path.__send__(TO_PATH) if path.respond_to? TO_PATH
@path = path.dup
if /\0/ =~ @path
@@ -229,7 +239,7 @@ class Pathname
end
# to_path is implemented so Pathname objects are usable with File.open, etc.
- alias to_path to_s
+ alias_method TO_PATH, :to_s
def inspect # :nodoc:
"#<#{self.class}:#{@path}>"
@@ -491,9 +501,10 @@ class Pathname
# Pathname.new("/usr/bin/ruby").each_filename {|filename| ... }
# # yields "usr", "bin", and "ruby".
#
- def each_filename # :yield: s
+ def each_filename # :yield: filename
prefix, names = split_names(@path)
names.each {|filename| yield filename }
+ nil
end
# Iterates over and yields a new Pathname object
@@ -514,6 +525,8 @@ class Pathname
#
# It doesn't access actual filesystem.
#
+ # This method is available since 1.8.5.
+ #
def descend
vs = []
ascend {|v| vs << v }
@@ -539,6 +552,8 @@ class Pathname
#
# It doesn't access actual filesystem.
#
+ # This method is available since 1.8.5.
+ #
def ascend
path = @path
yield self
@@ -1031,3 +1046,13 @@ class Pathname # * mixed *
end
end
end
+
+module Kernel
+ # create a pathname object.
+ #
+ # This method is available since 1.8.5.
+ def Pathname(path) # :doc:
+ Pathname.new(path)
+ end
+ private :Pathname
+end
diff --git a/test/pathname/test_pathname.rb b/test/pathname/test_pathname.rb
index 20351fa0f8..ecf7a71be5 100644
--- a/test/pathname/test_pathname.rb
+++ b/test/pathname/test_pathname.rb
@@ -5,8 +5,16 @@ require 'pathname'
require 'fileutils'
require 'tmpdir'
+require 'enumerator'
class TestPathname < Test::Unit::TestCase
+
+ if RUBY_VERSION < "1.9"
+ FUNCALL = :__send__
+ else
+ FUNCALL = :funcall
+ end
+
def self.define_assertion(name, &block)
@defassert_num ||= {}
@defassert_num[name] ||= 0
@@ -115,7 +123,7 @@ class TestPathname < Test::Unit::TestCase
# has_trailing_separator?(path) -> bool
def has_trailing_separator?(path)
- Pathname.allocate.funcall(:has_trailing_separator?, path)
+ Pathname.allocate.send(FUNCALL, :has_trailing_separator?, path)
end
defassert(:has_trailing_separator?, false, "/")
@@ -124,11 +132,11 @@ class TestPathname < Test::Unit::TestCase
defassert(:has_trailing_separator?, true, "a/")
def add_trailing_separator(path)
- Pathname.allocate.funcall(:add_trailing_separator, path)
+ Pathname.allocate.send(FUNCALL, :add_trailing_separator, path)
end
def del_trailing_separator(path)
- Pathname.allocate.funcall(:del_trailing_separator, path)
+ Pathname.allocate.send(FUNCALL, :del_trailing_separator, path)
end
defassert(:del_trailing_separator, "/", "/")
@@ -313,6 +321,10 @@ class TestPathname < Test::Unit::TestCase
assert_equal(p1, p2)
end
+ def test_initialize_nul
+ assert_raise(ArgumentError) { Pathname.new("a\0") }
+ end
+
class AnotherStringLike # :nodoc:
def initialize(s) @s = s end
def to_str() @s end
@@ -374,6 +386,9 @@ class TestPathname < Test::Unit::TestCase
assert_equal(nil, "a" <=> Pathname.new("a"))
end
+ def pathsub(path, pat, repl) Pathname.new(path).sub(pat, repl).to_s end
+ defassert(:pathsub, "a.o", "a.c", /\.c\z/, ".o")
+
def root?(path)
Pathname.new(path).root?
end
@@ -464,4 +479,8 @@ class TestPathname < Test::Unit::TestCase
Pathname.new("/usr/bin/ruby").each_filename {|f| result << f }
assert_equal(%w[usr bin ruby], result)
end
+
+ def test_kernel_pathname
+ assert_equal(Pathname.new("a"), Pathname("a"))
+ end
end