pathname2 1.4.2 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +3 -0
- data/lib/pathname2.rb +40 -30
- data/test/tc_pathname.rb +8 -1
- data/test/tc_pathname_win.rb +6 -0
- metadata +2 -2
data/CHANGES
CHANGED
data/lib/pathname2.rb
CHANGED
@@ -6,8 +6,8 @@
|
|
6
6
|
# All functionality from File, FileTest, and Dir is included, using a facade
|
7
7
|
# pattern.
|
8
8
|
#
|
9
|
-
# This class works on both Unix and
|
10
|
-
# that forward slashes are converted to backslashes on
|
9
|
+
# This class works on both Unix and Windows, including UNC path names. Note
|
10
|
+
# that forward slashes are converted to backslashes on Windows systems.
|
11
11
|
#
|
12
12
|
# == Usage
|
13
13
|
#
|
@@ -20,7 +20,7 @@
|
|
20
20
|
# path1 + path2 # "/foo/bar/zap"
|
21
21
|
# path1.dirname # "/foo/bar"
|
22
22
|
#
|
23
|
-
# #
|
23
|
+
# # Windows
|
24
24
|
# path1 = Pathname.new("C:\\foo\\bar\\baz")
|
25
25
|
# path2 = Pathname.new("..\\zap")
|
26
26
|
#
|
@@ -34,7 +34,7 @@
|
|
34
34
|
# imperator on IRC (irc.freenode.net)
|
35
35
|
#
|
36
36
|
# == Copyright
|
37
|
-
# Copyright (c) 2005 Daniel J. Berger.
|
37
|
+
# Copyright (c) 2005-2006 Daniel J. Berger.
|
38
38
|
# Licensed under the same terms as Ruby itself.
|
39
39
|
#
|
40
40
|
require "facade"
|
@@ -48,41 +48,41 @@ class Pathname < String
|
|
48
48
|
|
49
49
|
alias :_plus_ :+ # Used to prevent infinite loops in some cases
|
50
50
|
|
51
|
-
if
|
52
|
-
require
|
53
|
-
@@PathStripToRoot = Win32API.new(
|
54
|
-
@@PathIsUNC = Win32API.new(
|
55
|
-
@@PathIsURL = Win32API.new(
|
56
|
-
@@PathCanonicalize = Win32API.new(
|
57
|
-
@@PathAppend = Win32API.new(
|
58
|
-
@@PathIsRoot = Win32API.new(
|
59
|
-
@@PathIsDirectory = Win32API.new(
|
60
|
-
@@PathIsRelative = Win32API.new(
|
61
|
-
@@PathFileExists = Win32API.new(
|
62
|
-
@@PathUndecorate = Win32API.new(
|
51
|
+
if RUBY_PLATFORM.match('mswin')
|
52
|
+
require 'Win32API'
|
53
|
+
@@PathStripToRoot = Win32API.new('shlwapi', 'PathStripToRoot', 'P', 'L')
|
54
|
+
@@PathIsUNC = Win32API.new('shlwapi', 'PathIsUNC', 'P', 'L')
|
55
|
+
@@PathIsURL = Win32API.new('shlwapi', 'PathIsURL', 'P', 'L')
|
56
|
+
@@PathCanonicalize = Win32API.new('shlwapi', 'PathCanonicalize','PP','L')
|
57
|
+
@@PathAppend = Win32API.new('shlwapi', 'PathAppend', 'PP', 'L')
|
58
|
+
@@PathIsRoot = Win32API.new('shlwapi', 'PathIsRoot', 'P', 'L')
|
59
|
+
@@PathIsDirectory = Win32API.new('shlwapi', 'PathIsDirectory', 'P', 'L')
|
60
|
+
@@PathIsRelative = Win32API.new('shlwapi', 'PathIsRelative', 'P', 'L')
|
61
|
+
@@PathFileExists = Win32API.new('shlwapi', 'PathFileExists', 'P', 'L')
|
62
|
+
@@PathUndecorate = Win32API.new('shlwapi', 'PathUndecorate', 'P', 'L')
|
63
63
|
|
64
64
|
@@GetShortPathName =
|
65
|
-
Win32API.new(
|
65
|
+
Win32API.new('kernel32', 'GetShortPathName', 'PPL', 'L')
|
66
66
|
|
67
67
|
@@GetLongPathName =
|
68
|
-
Win32API.new(
|
68
|
+
Win32API.new('kernel32', 'GetLongPathName', 'PPL', 'L')
|
69
69
|
|
70
70
|
@@PathGetDriveNumber =
|
71
|
-
Win32API.new(
|
71
|
+
Win32API.new('shlwapi', 'PathGetDriveNumber', 'P', 'L')
|
72
72
|
|
73
73
|
@@PathCreateFromUrl =
|
74
|
-
Win32API.new(
|
74
|
+
Win32API.new('shlwapi', 'PathCreateFromUrl', 'PPPL', 'L')
|
75
75
|
|
76
76
|
@@PathRemoveBackslash =
|
77
|
-
Win32API.new(
|
77
|
+
Win32API.new('shlwapi', 'PathRemoveBackslash', 'P', 'P')
|
78
78
|
end
|
79
79
|
|
80
|
-
VERSION =
|
80
|
+
VERSION = '1.4.3'
|
81
81
|
MAX_PATH = 260
|
82
82
|
|
83
83
|
# Creates and returns a new Pathname object.
|
84
84
|
#
|
85
|
-
# On
|
85
|
+
# On Windows systems, all forward slashes are replaced with backslashes.
|
86
86
|
def initialize(path)
|
87
87
|
if path.length > MAX_PATH
|
88
88
|
msg = "string too long. maximum string length is " + MAX_PATH.to_s
|
@@ -90,7 +90,7 @@ class Pathname < String
|
|
90
90
|
end
|
91
91
|
|
92
92
|
@sep = File::ALT_SEPARATOR || File::SEPARATOR
|
93
|
-
@win =
|
93
|
+
@win = RUBY_PLATFORM.match('mswin')
|
94
94
|
|
95
95
|
# Handle File URL's for Windows
|
96
96
|
if @win
|
@@ -109,6 +109,16 @@ class Pathname < String
|
|
109
109
|
path = path.tr("/", @sep) if @win
|
110
110
|
super(path)
|
111
111
|
end
|
112
|
+
|
113
|
+
# Returns a real (absolute) pathname of +self+ in the actual filesystem.
|
114
|
+
#
|
115
|
+
# Unlike most Pathname methods, this one assumes that the path actually
|
116
|
+
# exists on your filesystem. If it doesn't, an error is raised.
|
117
|
+
def realpath
|
118
|
+
pwd = Pathname.new(Dir.pwd)
|
119
|
+
File.stat(self) # Check to ensure that the path exists
|
120
|
+
pwd + self
|
121
|
+
end
|
112
122
|
|
113
123
|
# Returns the children of the directory, files and subdirectories, as an
|
114
124
|
# array of Pathname objects. If you set +with_directory+ to +false+, then
|
@@ -132,7 +142,7 @@ class Pathname < String
|
|
132
142
|
result
|
133
143
|
end
|
134
144
|
|
135
|
-
#
|
145
|
+
# Windows only
|
136
146
|
#
|
137
147
|
# Removes the decoration from a path string. For example,
|
138
148
|
# C:\Path\File[5].txt would become C:\Path\File.txt. Non-destructive.
|
@@ -146,7 +156,7 @@ class Pathname < String
|
|
146
156
|
Pathname.new(buf.split(0.chr).first)
|
147
157
|
end
|
148
158
|
|
149
|
-
#
|
159
|
+
# Windows only
|
150
160
|
#
|
151
161
|
# Performs the substitution of Pathname#undecorate in place.
|
152
162
|
def undecorate!
|
@@ -160,7 +170,7 @@ class Pathname < String
|
|
160
170
|
self
|
161
171
|
end
|
162
172
|
|
163
|
-
#
|
173
|
+
# Windows only
|
164
174
|
#
|
165
175
|
# Returns the short path for a long path name. For example,
|
166
176
|
# C:\Program Files\Java would return C:\Progra~1\Java.
|
@@ -174,7 +184,7 @@ class Pathname < String
|
|
174
184
|
Pathname.new(buf.split(0.chr).first)
|
175
185
|
end
|
176
186
|
|
177
|
-
#
|
187
|
+
# Windows only
|
178
188
|
#
|
179
189
|
# Returns the long path for a long path name. For example,
|
180
190
|
# C:\Progra~1\Java would return C:\Program Files\Java.
|
@@ -333,7 +343,7 @@ class Pathname < String
|
|
333
343
|
end
|
334
344
|
end
|
335
345
|
|
336
|
-
#
|
346
|
+
# Windows only
|
337
347
|
#
|
338
348
|
# Determines if the string is a valid Universal Naming Convention (UNC)
|
339
349
|
# for a server and share path.
|
@@ -345,7 +355,7 @@ class Pathname < String
|
|
345
355
|
@@PathIsUNC.call(self) > 0
|
346
356
|
end
|
347
357
|
|
348
|
-
#
|
358
|
+
# Windows only
|
349
359
|
#
|
350
360
|
# Returns the drive number that corresponds to the root, or nil if not
|
351
361
|
# applicable.
|
data/test/tc_pathname.rb
CHANGED
@@ -24,6 +24,7 @@ require "test/unit"
|
|
24
24
|
|
25
25
|
class TC_Pathname < Test::Unit::TestCase
|
26
26
|
def setup
|
27
|
+
@pwd = Dir.pwd
|
27
28
|
@abs_path = Pathname.new("/usr/local/bin")
|
28
29
|
@rel_path = Pathname.new("usr/local/bin")
|
29
30
|
@trl_path = Pathname.new("/usr/local/bin/")
|
@@ -71,7 +72,13 @@ class TC_Pathname < Test::Unit::TestCase
|
|
71
72
|
end
|
72
73
|
|
73
74
|
def test_version
|
74
|
-
assert_equal("1.4.
|
75
|
+
assert_equal("1.4.3", Pathname::VERSION)
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_realpath
|
79
|
+
assert_respond_to(@abs_path, :realpath)
|
80
|
+
assert_equal(@pwd, Pathname.new('.').realpath)
|
81
|
+
assert_raises(Errno::ENOENT){ Pathname.new('../bogus').realpath }
|
75
82
|
end
|
76
83
|
|
77
84
|
# These tests taken directly from Tanaka's pathname.rb. The one failure
|
data/test/tc_pathname_win.rb
CHANGED
@@ -80,6 +80,12 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
80
80
|
Pathname.new(to).relative_path_from(from)
|
81
81
|
}
|
82
82
|
end
|
83
|
+
|
84
|
+
def test_realpath
|
85
|
+
assert_respond_to(@abs_path, :realpath)
|
86
|
+
assert_equal(@cur_path, Pathname.new('.').realpath)
|
87
|
+
assert_raises(Errno::ENOENT){ Pathname.new('../bogus').realpath }
|
88
|
+
end
|
83
89
|
|
84
90
|
def test_relative_path_from
|
85
91
|
assert_relpath("..\\a", "a", "b")
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: pathname2
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.4.
|
7
|
-
date: 2006-
|
6
|
+
version: 1.4.3
|
7
|
+
date: 2006-03-03 00:00:00 -07:00
|
8
8
|
summary: An alternate implementation of the Pathname class
|
9
9
|
require_paths:
|
10
10
|
- lib
|