pathname2 1.2.1 → 1.3.0
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 +19 -13
- data/lib/pathname2.rb +50 -20
- data/test/tc_pathname.rb +6 -1
- data/test/tc_pathname_win.rb +31 -6
- metadata +2 -2
data/CHANGES
CHANGED
@@ -1,13 +1,19 @@
|
|
1
|
-
== 1.
|
2
|
-
*
|
3
|
-
*
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
*
|
1
|
+
== 1.3.0 - 28-Oct-2005
|
2
|
+
* Added the short_path and long_path methods for MS Windows.
|
3
|
+
* Optimization for the '+' method on Unix.
|
4
|
+
* Added some examples under the 'examples' directory.
|
5
|
+
* More tests added and some minor changes to the test suite in general.
|
6
|
+
|
7
|
+
== 1.2.1 - 1-Sep-2005
|
8
|
+
* Bug fix for the ascend and descend methods wrt Windows and UNC paths.
|
9
|
+
* More tests added for ascend and descend methods.
|
10
|
+
|
11
|
+
== 1.2.0 - 29-Aug-2005
|
12
|
+
* Added the 'ascend' and 'descend' methods.
|
13
|
+
* Added corresponding test suite additions.
|
14
|
+
|
15
|
+
== 1.1.0 - 13-Jul-2005
|
16
|
+
* Added the 'find' facade.
|
17
|
+
|
18
|
+
== 1.0.0 - 11-Jun-2005
|
19
|
+
* Initial release
|
data/lib/pathname2.rb
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
#
|
12
12
|
# == Usage
|
13
13
|
#
|
14
|
-
# require "
|
14
|
+
# require "pathname2"
|
15
15
|
#
|
16
16
|
# # Unix
|
17
17
|
# path1 = Pathname.new("/foo/bar/baz")
|
@@ -58,6 +58,12 @@ class Pathname < String
|
|
58
58
|
@@PathIsRelative = Win32API.new("shlwapi","PathIsRelative","P","L")
|
59
59
|
@@PathFileExists = Win32API.new("shlwapi","PathFileExists","P","L")
|
60
60
|
@@PathUndecorate = Win32API.new("shlwapi","PathUndecorate","P","L")
|
61
|
+
|
62
|
+
@@GetShortPathName =
|
63
|
+
Win32API.new("kernel32","GetShortPathName","PPL","L")
|
64
|
+
|
65
|
+
@@GetLongPathName =
|
66
|
+
Win32API.new("kernel32","GetLongPathName","PPL","L")
|
61
67
|
|
62
68
|
@@PathGetDriveNumber =
|
63
69
|
Win32API.new("shlwapi","PathGetDriveNumber","P","L")
|
@@ -69,7 +75,7 @@ class Pathname < String
|
|
69
75
|
Win32API.new("shlwapi", "PathRemoveBackslash", "P", "P")
|
70
76
|
end
|
71
77
|
|
72
|
-
VERSION = "1.
|
78
|
+
VERSION = "1.3.0"
|
73
79
|
MAX_PATH = 260
|
74
80
|
|
75
81
|
# Creates and returns a new Pathname object.
|
@@ -115,16 +121,44 @@ class Pathname < String
|
|
115
121
|
@@PathUndecorate.call(buf)
|
116
122
|
Pathname.new(buf.split(0.chr).first)
|
117
123
|
end
|
118
|
-
|
124
|
+
|
125
|
+
# Win32 only
|
126
|
+
#
|
127
|
+
# Returns the short path for a long path name. For example,
|
128
|
+
# C:\Program Files\Java would return C:\Progra~1\Java.
|
129
|
+
def short_path
|
130
|
+
unless @win
|
131
|
+
raise NotImplementedError, "not supported on this platform"
|
132
|
+
end
|
133
|
+
buf = 0.chr * MAX_PATH
|
134
|
+
buf[0..self.length-1] = self
|
135
|
+
@@GetShortPathName.call(self, buf, buf.length)
|
136
|
+
Pathname.new(buf.split(0.chr).first)
|
137
|
+
end
|
138
|
+
|
139
|
+
# Win32 only
|
140
|
+
#
|
141
|
+
# Returns the long path for a long path name. For example,
|
142
|
+
# C:\Progra~1\Java would return C:\Program Files\Java.
|
143
|
+
def long_path
|
144
|
+
unless @win
|
145
|
+
raise NotImplementedError, "not supported on this platform"
|
146
|
+
end
|
147
|
+
buf = 0.chr * MAX_PATH
|
148
|
+
buf[0..self.length-1] = self
|
149
|
+
@@GetLongPathName.call(self, buf, buf.length)
|
150
|
+
Pathname.new(buf.split(0.chr).first)
|
151
|
+
end
|
152
|
+
|
119
153
|
# Removes trailing slash, if present.
|
120
154
|
def pstrip
|
121
155
|
if @win
|
122
156
|
@@PathRemoveBackslash.call(self)
|
123
|
-
|
157
|
+
strip!
|
124
158
|
else
|
125
159
|
if self[-1] == @sep
|
126
|
-
|
127
|
-
|
160
|
+
strip!
|
161
|
+
chop!
|
128
162
|
end
|
129
163
|
end
|
130
164
|
self
|
@@ -140,7 +174,7 @@ class Pathname < String
|
|
140
174
|
|
141
175
|
# Yields each component of the path name to a block.
|
142
176
|
def each
|
143
|
-
|
177
|
+
to_a.each{ |element| yield element }
|
144
178
|
end
|
145
179
|
|
146
180
|
# Yields each component of the path, concatenating the next component on
|
@@ -166,7 +200,7 @@ class Pathname < String
|
|
166
200
|
yield root if absolute?
|
167
201
|
end
|
168
202
|
|
169
|
-
|
203
|
+
each{ |element|
|
170
204
|
if @win && unc?
|
171
205
|
next if root.to_a.include?(element)
|
172
206
|
end
|
@@ -187,11 +221,11 @@ class Pathname < String
|
|
187
221
|
return
|
188
222
|
end
|
189
223
|
|
190
|
-
n =
|
224
|
+
n = to_a.length
|
191
225
|
|
192
226
|
while n > 0
|
193
|
-
path =
|
194
|
-
if
|
227
|
+
path = to_a[0..n-1].join(@sep)
|
228
|
+
if absolute?
|
195
229
|
if @win && unc?
|
196
230
|
path = "\\\\" << path
|
197
231
|
end
|
@@ -232,12 +266,8 @@ class Pathname < String
|
|
232
266
|
dir = Pathname.new(buf.split(0.chr).first)
|
233
267
|
end
|
234
268
|
else
|
235
|
-
dir =
|
236
|
-
while dir != "/" && dir != "."
|
237
|
-
dir = File.dirname(dir)
|
238
|
-
end
|
269
|
+
dir = "/" if self =~ /^\//
|
239
270
|
end
|
240
|
-
dir = "." if dir.empty?
|
241
271
|
dir
|
242
272
|
end
|
243
273
|
|
@@ -313,11 +343,11 @@ class Pathname < String
|
|
313
343
|
# If the string is an absolute directory, return it
|
314
344
|
return string if string.absolute?
|
315
345
|
|
316
|
-
array =
|
346
|
+
array = to_a + string.to_a
|
317
347
|
new_string = array.join(@sep)
|
318
348
|
|
319
|
-
unless
|
320
|
-
new_string = @sep + new_string
|
349
|
+
unless relative? || @win
|
350
|
+
new_string = @sep + new_string # Add root path back if needed
|
321
351
|
end
|
322
352
|
|
323
353
|
Pathname.new(new_string).clean
|
@@ -351,7 +381,7 @@ class Pathname < String
|
|
351
381
|
end
|
352
382
|
|
353
383
|
final = []
|
354
|
-
|
384
|
+
to_a.each{ |element|
|
355
385
|
next if element == "."
|
356
386
|
final.push(element)
|
357
387
|
if element == ".." && self != ".."
|
data/test/tc_pathname.rb
CHANGED
@@ -7,6 +7,11 @@ Dir.chdir ".." if File.basename(Dir.pwd) == "test"
|
|
7
7
|
$LOAD_PATH.unshift Dir.pwd
|
8
8
|
$LOAD_PATH.unshift Dir.pwd + "/lib"
|
9
9
|
|
10
|
+
if PLATFORM.match("mswin")
|
11
|
+
STDERR.puts("Please run 'tc_pathname_win.rb' instead.")
|
12
|
+
exit
|
13
|
+
end
|
14
|
+
|
10
15
|
require "pathname2"
|
11
16
|
require "test/unit"
|
12
17
|
|
@@ -36,7 +41,7 @@ class TC_Pathname < Test::Unit::TestCase
|
|
36
41
|
end
|
37
42
|
|
38
43
|
def test_version
|
39
|
-
assert_equal("1.
|
44
|
+
assert_equal("1.3.0", Pathname::VERSION)
|
40
45
|
end
|
41
46
|
|
42
47
|
def test_ascend
|
data/test/tc_pathname_win.rb
CHANGED
@@ -1,19 +1,25 @@
|
|
1
|
-
|
2
|
-
#
|
1
|
+
######################################################
|
2
|
+
# tc_pathname_win.rb
|
3
3
|
#
|
4
|
-
#
|
5
|
-
|
4
|
+
# MS Windows test suite for the Pathname class.
|
5
|
+
######################################################
|
6
6
|
Dir.chdir ".." if File.basename(Dir.pwd) == "test"
|
7
7
|
$LOAD_PATH.unshift Dir.pwd
|
8
8
|
$LOAD_PATH.unshift Dir.pwd + "/lib"
|
9
9
|
|
10
|
+
unless PLATFORM.match("mswin")
|
11
|
+
STDERR.puts("Please run 'tc_pathname.rb' instead.")
|
12
|
+
exit
|
13
|
+
end
|
14
|
+
|
10
15
|
require "pathname2"
|
11
16
|
require "test/unit"
|
12
17
|
|
13
|
-
class
|
18
|
+
class TC_Pathname_MSWin < Test::Unit::TestCase
|
14
19
|
def setup
|
15
20
|
@fpath = Pathname.new("C:/Program Files/Windows NT/Accessories")
|
16
21
|
@bpath = Pathname.new("C:\\Program Files\\Windows NT\\Accessories")
|
22
|
+
@spath = Pathname.new("C:\\PROGRA~1\\WINDOW~1\\ACCESS~1")
|
17
23
|
@upath = Pathname.new("\\\\foo\\bar\\baz")
|
18
24
|
@npath = Pathname.new("foo\\bar\\baz")
|
19
25
|
@rpath = Pathname.new("Z:\\")
|
@@ -28,7 +34,7 @@ class TC_Pathname < Test::Unit::TestCase
|
|
28
34
|
end
|
29
35
|
|
30
36
|
def test_version
|
31
|
-
assert_equal("1.
|
37
|
+
assert_equal("1.3.0", Pathname::VERSION)
|
32
38
|
end
|
33
39
|
|
34
40
|
# Convenience method for test_plus
|
@@ -47,6 +53,24 @@ class TC_Pathname < Test::Unit::TestCase
|
|
47
53
|
assert_equal(int, result)
|
48
54
|
end
|
49
55
|
|
56
|
+
def test_short_path
|
57
|
+
assert_respond_to(@bpath, :short_path)
|
58
|
+
assert_nothing_raised{ @bpath.short_path }
|
59
|
+
assert_kind_of(Pathname, @bpath.short_path)
|
60
|
+
assert_equal("C:\\PROGRA~1\\WINDOW~1\\ACCESS~1", @bpath.short_path)
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_long_path
|
64
|
+
assert_respond_to(@spath, :long_path)
|
65
|
+
assert_nothing_raised{ @spath.long_path }
|
66
|
+
assert_kind_of(Pathname, @spath.long_path)
|
67
|
+
|
68
|
+
assert_equal(
|
69
|
+
"C:\\Program Files\\Windows NT\\Accessories",
|
70
|
+
@spath.long_path
|
71
|
+
)
|
72
|
+
end
|
73
|
+
|
50
74
|
def test_each
|
51
75
|
assert_respond_to(@fpath, :each)
|
52
76
|
assert_nothing_raised{ @fpath.each{ |e| } }
|
@@ -275,6 +299,7 @@ class TC_Pathname < Test::Unit::TestCase
|
|
275
299
|
def teardown
|
276
300
|
@fpath = nil
|
277
301
|
@bpath = nil
|
302
|
+
@spath = nil
|
278
303
|
@upath = nil
|
279
304
|
@npath = nil
|
280
305
|
@rpath = nil
|
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.
|
7
|
-
date: 2005-
|
6
|
+
version: 1.3.0
|
7
|
+
date: 2005-10-26 00:00:00 -06:00
|
8
8
|
summary: An alternate implementation of the Pathname class
|
9
9
|
require_paths:
|
10
10
|
- lib
|