pathname2 1.3.1 → 1.4.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 +14 -0
- data/MANIFEST +4 -0
- data/README +16 -5
- data/lib/pathname2.rb +81 -18
- data/test/tc_pathname.rb +74 -20
- data/test/tc_pathname_win.rb +248 -28
- metadata +5 -7
data/CHANGES
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
== 1.4.0 -
|
2
|
+
* Added destructive and non-destructive methods for some methods - pstrip,
|
3
|
+
pstrip!, undecorate, undecorate!, clean and clean!.
|
4
|
+
* Added a C extension version of this package. You can use the C version
|
5
|
+
instead of the pure Ruby version instead. See the README for more details.
|
6
|
+
* Fixed bug in the root method where the result wasn't guaranteed to be a
|
7
|
+
Pathname class.
|
8
|
+
* Fixed bugs in Windows version where the receiver was inadvertantly modified
|
9
|
+
in some cases, and added tests to check for this in the future.
|
10
|
+
* Modified the Dir.glob facade so that it (temporarily) changes to the path
|
11
|
+
directory, globs on that path, then returns to the original directory.
|
12
|
+
* Added the bench_pathname.rb script to let you benchmark all Pathname
|
13
|
+
methods.
|
14
|
+
|
1
15
|
== 1.3.1 - 21-Nov-2005
|
2
16
|
* Added the Pathname#children method.
|
3
17
|
* Added tests for the Pathname#children method.
|
data/MANIFEST
CHANGED
data/README
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
* Ruby 1.8.0 or later
|
6
6
|
* facade 1.0.0 or later (available on the RAA)
|
7
7
|
|
8
|
-
== Installation
|
8
|
+
== Installation, pure Ruby
|
9
9
|
=== Manual Installation
|
10
10
|
ruby test/tc_pathname.rb (Unix, optional)
|
11
11
|
ruby test/tc_pathname_win.rb (Windows, optional)
|
@@ -15,6 +15,13 @@
|
|
15
15
|
ruby test/tc_pathname.rb (Unix, optional)
|
16
16
|
ruby test/tc_pathname_win.rb (Windows, optional)
|
17
17
|
gem install pathname2-<version>.gem
|
18
|
+
|
19
|
+
== Installation, C extension
|
20
|
+
cd to the 'ext' directory.
|
21
|
+
ruby extconf.rb
|
22
|
+
make
|
23
|
+
run appropriate test (optional)
|
24
|
+
make install
|
18
25
|
|
19
26
|
== Synopsis
|
20
27
|
require "pathname2"
|
@@ -28,7 +35,7 @@
|
|
28
35
|
path1.dirname # "/foo/bar"
|
29
36
|
path1.to_a # ['foo','bar','baz']
|
30
37
|
|
31
|
-
#
|
38
|
+
# Windows
|
32
39
|
path1 = "C:/foo/bar/baz"
|
33
40
|
path2 = "../zap"
|
34
41
|
|
@@ -39,7 +46,7 @@
|
|
39
46
|
== Win32 Notes
|
40
47
|
All forward slashes are converted to backslashes for Pathname objects.
|
41
48
|
|
42
|
-
== Differences between Unix and
|
49
|
+
== Differences between Unix and Windows
|
43
50
|
If your pathname consists solely of ".", or "..", the return
|
44
51
|
value for Pathname#clean will be different. On Win32, "\\" is returned,
|
45
52
|
while on Unix "." is returned. I consider this an extreme edge case and
|
@@ -73,8 +80,12 @@
|
|
73
80
|
not the one defined in the FileUtils module.
|
74
81
|
|
75
82
|
== Known Issues
|
76
|
-
You cannot pass a frozen string to the constructor on
|
77
|
-
There is an unresolved issue with Win32API and frozen
|
83
|
+
You cannot pass a frozen string to the constructor on Windows using the
|
84
|
+
pure Ruby version. There is an unresolved issue with Win32API and frozen
|
85
|
+
objects.
|
86
|
+
|
87
|
+
Pathname#glob is not yet implemented in the C version.
|
88
|
+
Pathname#find is not implemented properly in the C version.
|
78
89
|
|
79
90
|
== License
|
80
91
|
Ruby's
|
data/lib/pathname2.rb
CHANGED
@@ -45,6 +45,8 @@ class Pathname < String
|
|
45
45
|
extend Facade
|
46
46
|
facade File
|
47
47
|
facade Dir
|
48
|
+
|
49
|
+
alias :_plus_ :+ # Used to prevent infinite loops in some cases
|
48
50
|
|
49
51
|
if PLATFORM.match("mswin")
|
50
52
|
require "Win32API"
|
@@ -75,7 +77,7 @@ class Pathname < String
|
|
75
77
|
Win32API.new("shlwapi", "PathRemoveBackslash", "P", "P")
|
76
78
|
end
|
77
79
|
|
78
|
-
VERSION = "1.
|
80
|
+
VERSION = "1.4.0"
|
79
81
|
MAX_PATH = 260
|
80
82
|
|
81
83
|
# Creates and returns a new Pathname object.
|
@@ -103,7 +105,7 @@ class Pathname < String
|
|
103
105
|
end
|
104
106
|
end
|
105
107
|
|
106
|
-
# Convert forward slashes to backslashes on
|
108
|
+
# Convert forward slashes to backslashes on Windows
|
107
109
|
path = path.tr("/", @sep) if @win
|
108
110
|
super(path)
|
109
111
|
end
|
@@ -133,7 +135,7 @@ class Pathname < String
|
|
133
135
|
# Win32 only
|
134
136
|
#
|
135
137
|
# Removes the decoration from a path string. For example,
|
136
|
-
# C:\Path\File[5].txt would become C:\Path\File.txt.
|
138
|
+
# C:\Path\File[5].txt would become C:\Path\File.txt. Non-destructive.
|
137
139
|
def undecorate
|
138
140
|
unless @win
|
139
141
|
raise NotImplementedError, "not supported on this platform"
|
@@ -144,6 +146,20 @@ class Pathname < String
|
|
144
146
|
Pathname.new(buf.split(0.chr).first)
|
145
147
|
end
|
146
148
|
|
149
|
+
# Win32 only
|
150
|
+
#
|
151
|
+
# Performs the substitution of Pathname#undecorate in place.
|
152
|
+
def undecorate!
|
153
|
+
unless @win
|
154
|
+
raise NotImplementedError, "not supported on this platform"
|
155
|
+
end
|
156
|
+
buf = 0.chr * MAX_PATH
|
157
|
+
buf[0..self.length-1] = self
|
158
|
+
@@PathUndecorate.call(buf)
|
159
|
+
replace(buf.split(0.chr).first)
|
160
|
+
self
|
161
|
+
end
|
162
|
+
|
147
163
|
# Win32 only
|
148
164
|
#
|
149
165
|
# Returns the short path for a long path name. For example,
|
@@ -172,8 +188,23 @@ class Pathname < String
|
|
172
188
|
Pathname.new(buf.split(0.chr).first)
|
173
189
|
end
|
174
190
|
|
175
|
-
# Removes trailing slash, if present.
|
191
|
+
# Removes trailing slash, if present. Non-destructive.
|
176
192
|
def pstrip
|
193
|
+
str = self.dup
|
194
|
+
if @win
|
195
|
+
@@PathRemoveBackslash.call(str)
|
196
|
+
str.strip!
|
197
|
+
else
|
198
|
+
if str[-1] == @sep
|
199
|
+
str.strip!
|
200
|
+
str.chop!
|
201
|
+
end
|
202
|
+
end
|
203
|
+
Pathname.new(str)
|
204
|
+
end
|
205
|
+
|
206
|
+
# Removes trailing slash, if present. Destructive.
|
207
|
+
def pstrip!
|
177
208
|
if @win
|
178
209
|
@@PathRemoveBackslash.call(self)
|
179
210
|
strip!
|
@@ -275,9 +306,9 @@ class Pathname < String
|
|
275
306
|
# Returns the root directory of the path, or '.' if there is no root
|
276
307
|
# directory.
|
277
308
|
#
|
278
|
-
# On Unix, this means the '/' character. On
|
279
|
-
#
|
280
|
-
#
|
309
|
+
# On Unix, this means the '/' character. On Windows, this can refer
|
310
|
+
# to the drive letter, or the server and share path if the path is a
|
311
|
+
# UNC path.
|
281
312
|
def root
|
282
313
|
dir = "."
|
283
314
|
if @win
|
@@ -285,12 +316,12 @@ class Pathname < String
|
|
285
316
|
buf[0..self.length-1] = self
|
286
317
|
|
287
318
|
if @@PathStripToRoot.call(buf) > 0
|
288
|
-
dir =
|
319
|
+
dir = buf.split(0.chr).first
|
289
320
|
end
|
290
321
|
else
|
291
322
|
dir = "/" if self =~ /^\//
|
292
323
|
end
|
293
|
-
dir
|
324
|
+
Pathname.new(dir)
|
294
325
|
end
|
295
326
|
|
296
327
|
# Returns whether or not the path consists only of a root directory.
|
@@ -352,12 +383,13 @@ class Pathname < String
|
|
352
383
|
|
353
384
|
# Any path plus "." is the same directory
|
354
385
|
return self if string == "."
|
386
|
+
return string if self == "."
|
355
387
|
|
356
388
|
# Use the builtin PathAppend method if on Windows - much easier
|
357
389
|
if @win
|
358
390
|
buf = 0.chr * MAX_PATH
|
359
391
|
buf[0..self.length-1] = self
|
360
|
-
@@PathAppend.call(buf, string
|
392
|
+
@@PathAppend.call(buf, string)
|
361
393
|
buf.strip!
|
362
394
|
return Pathname.new(buf) # PathAppend cleans automatically
|
363
395
|
end
|
@@ -369,7 +401,8 @@ class Pathname < String
|
|
369
401
|
new_string = array.join(@sep)
|
370
402
|
|
371
403
|
unless relative? || @win
|
372
|
-
|
404
|
+
temp = @sep + new_string # Add root path back if needed
|
405
|
+
new_string.replace(temp)
|
373
406
|
end
|
374
407
|
|
375
408
|
Pathname.new(new_string).clean
|
@@ -411,11 +444,39 @@ class Pathname < String
|
|
411
444
|
end
|
412
445
|
}
|
413
446
|
final = final.join(@sep)
|
414
|
-
final = root
|
447
|
+
final = root._plus_(final) if root != "."
|
415
448
|
final = "." if final.empty?
|
416
449
|
Pathname.new(final)
|
417
450
|
end
|
418
451
|
alias :cleanpath :clean
|
452
|
+
|
453
|
+
# Removes unnecessary '.' paths and ellides '..' paths appropriately.
|
454
|
+
# Modifies the receiver in place.
|
455
|
+
def clean!
|
456
|
+
return self if self.empty?
|
457
|
+
|
458
|
+
if @win
|
459
|
+
path = 0.chr * MAX_PATH
|
460
|
+
if @@PathCanonicalize.call(path, self) > 0
|
461
|
+
replace(path.split(0.chr).first)
|
462
|
+
end
|
463
|
+
return self
|
464
|
+
end
|
465
|
+
|
466
|
+
final = []
|
467
|
+
to_a.each{ |element|
|
468
|
+
next if element == "."
|
469
|
+
final.push(element)
|
470
|
+
if element == ".." && self != ".."
|
471
|
+
2.times{ final.pop }
|
472
|
+
end
|
473
|
+
}
|
474
|
+
final = final.join(@sep)
|
475
|
+
final = root + final if root != "."
|
476
|
+
final = "." if final.empty?
|
477
|
+
replace(Pathname.new(final))
|
478
|
+
self
|
479
|
+
end
|
419
480
|
|
420
481
|
#-- Find facade
|
421
482
|
|
@@ -434,7 +495,7 @@ class Pathname < String
|
|
434
495
|
if self == "."
|
435
496
|
Find.find(self){ |f| yield Pathname.new(f.sub(%r{\A\./}, '')) }
|
436
497
|
else
|
437
|
-
Find.find(self)
|
498
|
+
Find.find(self){ |f| yield Pathname.new(f) }
|
438
499
|
end
|
439
500
|
end
|
440
501
|
|
@@ -464,11 +525,13 @@ class Pathname < String
|
|
464
525
|
|
465
526
|
# Dir.glob
|
466
527
|
def glob(*args)
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
528
|
+
Dir.chdir(self){
|
529
|
+
if block_given?
|
530
|
+
Dir.glob(*args){ |file| yield Pathname.new(file) }
|
531
|
+
else
|
532
|
+
Dir.glob(*args).map{ |file| Pathname.new(file) }
|
533
|
+
end
|
534
|
+
}
|
472
535
|
end
|
473
536
|
|
474
537
|
# Dir.chdir
|
data/test/tc_pathname.rb
CHANGED
@@ -1,11 +1,18 @@
|
|
1
|
-
|
1
|
+
##############################################################################
|
2
2
|
# tc_pathname.rb
|
3
3
|
#
|
4
|
-
# Test suite for the pathname package (Unix)
|
5
|
-
|
4
|
+
# Test suite for the pathname package (Unix). If you pass a 'c' as command
|
5
|
+
# line option, it will test against the C extension. Otherwise, it will run
|
6
|
+
# the tests against the pure Ruby version.
|
7
|
+
##############################################################################
|
6
8
|
Dir.chdir ".." if File.basename(Dir.pwd) == "test"
|
7
|
-
|
8
|
-
|
9
|
+
|
10
|
+
# Test against the C extension if a 'c' is provided as an argument.
|
11
|
+
if ARGV[0] && ARGV[0].chomp.downcase == "c"
|
12
|
+
$LOAD_PATH.unshift Dir.pwd + "/ext"
|
13
|
+
else
|
14
|
+
$LOAD_PATH.unshift Dir.pwd + "/lib"
|
15
|
+
end
|
9
16
|
|
10
17
|
if PLATFORM.match("mswin")
|
11
18
|
STDERR.puts("Please run 'tc_pathname_win.rb' instead.")
|
@@ -19,10 +26,18 @@ class TC_Pathname < Test::Unit::TestCase
|
|
19
26
|
def setup
|
20
27
|
@abs_path = Pathname.new("/usr/local/bin")
|
21
28
|
@rel_path = Pathname.new("usr/local/bin")
|
29
|
+
@cur_path = Pathname.new(Dir.pwd)
|
22
30
|
|
23
31
|
@abs_array = []
|
24
32
|
@rel_array = []
|
25
33
|
end
|
34
|
+
|
35
|
+
# Convenience method to verify that the receiver was not modified
|
36
|
+
# except perhaps slashes
|
37
|
+
def assert_non_destructive
|
38
|
+
assert_equal("/usr/local/bin", @abs_path)
|
39
|
+
assert_equal("usr/local/bin", @rel_path)
|
40
|
+
end
|
26
41
|
|
27
42
|
# Convenience method for test_plus
|
28
43
|
def assert_pathname_plus(a, b, c)
|
@@ -41,7 +56,7 @@ class TC_Pathname < Test::Unit::TestCase
|
|
41
56
|
end
|
42
57
|
|
43
58
|
def test_version
|
44
|
-
assert_equal("1.
|
59
|
+
assert_equal("1.4.0", Pathname::VERSION)
|
45
60
|
end
|
46
61
|
|
47
62
|
def test_ascend
|
@@ -61,6 +76,8 @@ class TC_Pathname < Test::Unit::TestCase
|
|
61
76
|
assert_equal("usr/local", @rel_array[1])
|
62
77
|
assert_equal("usr", @rel_array[2])
|
63
78
|
assert_equal(3, @rel_array.length)
|
79
|
+
|
80
|
+
assert_non_destructive
|
64
81
|
end
|
65
82
|
|
66
83
|
def test_descend
|
@@ -80,35 +97,48 @@ class TC_Pathname < Test::Unit::TestCase
|
|
80
97
|
assert_equal("usr/local", @rel_array[1])
|
81
98
|
assert_equal("usr/local/bin", @rel_array[2])
|
82
99
|
assert_equal(3, @rel_array.length)
|
100
|
+
|
101
|
+
assert_non_destructive
|
83
102
|
end
|
84
103
|
|
85
104
|
def test_children
|
86
|
-
Dir.chdir("..") if File.basename(Dir.pwd) == "test"
|
87
|
-
@cur_path = Pathname.new(Dir.pwd)
|
88
|
-
|
89
105
|
assert_respond_to(@cur_path, :children)
|
90
106
|
assert_nothing_raised{ @cur_path.children }
|
91
107
|
assert_kind_of(Array, @cur_path.children)
|
92
108
|
|
109
|
+
# Delete Eclipse related files
|
110
|
+
children = @cur_path.children
|
111
|
+
children.delete_if{ |e| File.basename(e) == "CVS" }
|
112
|
+
children.delete_if{ |e| File.basename(e) == ".cvsignore" }
|
113
|
+
children.delete_if{ |e| File.basename(e) == ".project" }
|
114
|
+
|
93
115
|
assert_equal(
|
94
116
|
[
|
95
117
|
Dir.pwd + "/CHANGES",
|
96
118
|
Dir.pwd + "/MANIFEST",
|
97
119
|
Dir.pwd + "/README",
|
98
|
-
Dir.pwd + "/install.rb",
|
99
|
-
Dir.pwd + "/pathname2.gemspec",
|
100
120
|
Dir.pwd + "/examples",
|
121
|
+
Dir.pwd + "/ext",
|
122
|
+
Dir.pwd + "/install.rb",
|
101
123
|
Dir.pwd + "/lib",
|
124
|
+
Dir.pwd + "/pathname2.gemspec",
|
102
125
|
Dir.pwd + "/test"
|
103
126
|
],
|
104
|
-
|
127
|
+
children.sort
|
105
128
|
)
|
129
|
+
|
130
|
+
# Delete Eclipse related files
|
131
|
+
children = @cur_path.children(false)
|
132
|
+
children.delete("CVS")
|
133
|
+
children.delete(".cvsignore")
|
134
|
+
children.delete(".project")
|
135
|
+
|
106
136
|
assert_equal(
|
107
137
|
[
|
108
|
-
"CHANGES","MANIFEST","README","
|
109
|
-
"
|
138
|
+
"CHANGES", "MANIFEST", "README", "examples", "ext",
|
139
|
+
"install.rb", "lib", "pathname2.gemspec", "test"
|
110
140
|
],
|
111
|
-
|
141
|
+
children.sort
|
112
142
|
)
|
113
143
|
end
|
114
144
|
|
@@ -123,47 +153,67 @@ class TC_Pathname < Test::Unit::TestCase
|
|
123
153
|
def test_root
|
124
154
|
assert_respond_to(@abs_path, :root)
|
125
155
|
assert_nothing_raised{ @abs_path.root }
|
156
|
+
assert_nothing_raised{ @rel_path.root }
|
157
|
+
|
126
158
|
assert_equal("/", @abs_path.root)
|
159
|
+
assert_equal(".", @rel_path.root)
|
127
160
|
|
128
|
-
|
129
|
-
path2 = Pathname.new("foo/bar/baz")
|
130
|
-
assert_equal(".", path1.root)
|
131
|
-
assert_equal(".", path2.root)
|
161
|
+
assert_non_destructive
|
132
162
|
end
|
133
163
|
|
134
164
|
def test_root?
|
135
165
|
assert_respond_to(@abs_path, :root?)
|
136
166
|
assert_nothing_raised{ @abs_path.root? }
|
167
|
+
assert_nothing_raised{ @rel_path.root? }
|
137
168
|
|
138
169
|
path1 = Pathname.new("/")
|
139
170
|
path2 = Pathname.new("a")
|
140
171
|
assert_equal(true, path1.root?)
|
141
172
|
assert_equal(false, path2.root?)
|
173
|
+
|
174
|
+
assert_non_destructive
|
142
175
|
end
|
143
176
|
|
144
177
|
def test_absolute
|
145
178
|
assert_respond_to(@abs_path, :absolute?)
|
146
179
|
assert_nothing_raised{ @abs_path.absolute? }
|
180
|
+
assert_nothing_raised{ @rel_path.absolute? }
|
181
|
+
|
182
|
+
assert_equal(true, @abs_path.absolute?)
|
183
|
+
assert_equal(false, @rel_path.absolute?)
|
184
|
+
|
147
185
|
assert_equal(true, Pathname.new("/usr/bin/ruby").absolute?)
|
148
186
|
assert_equal(false, Pathname.new("foo").absolute?)
|
149
187
|
assert_equal(false, Pathname.new("foo/bar").absolute?)
|
150
188
|
assert_equal(false, Pathname.new("../foo/bar").absolute?)
|
189
|
+
|
190
|
+
assert_non_destructive
|
151
191
|
end
|
152
192
|
|
153
193
|
def test_relative
|
154
194
|
assert_respond_to(@abs_path, :relative?)
|
155
195
|
assert_nothing_raised{ @abs_path.relative? }
|
196
|
+
assert_nothing_raised{ @rel_path.relative? }
|
197
|
+
|
198
|
+
assert_equal(false, @abs_path.relative?)
|
199
|
+
assert_equal(true, @rel_path.relative?)
|
200
|
+
|
156
201
|
assert_equal(false, Pathname.new("/usr/bin/ruby").relative?)
|
157
202
|
assert_equal(true, Pathname.new("foo").relative?)
|
158
203
|
assert_equal(true, Pathname.new("foo/bar").relative?)
|
159
204
|
assert_equal(true, Pathname.new("../foo/bar").relative?)
|
205
|
+
|
206
|
+
assert_non_destructive
|
160
207
|
end
|
161
208
|
|
162
209
|
def test_to_a
|
163
210
|
assert_respond_to(@abs_path, :to_a)
|
164
211
|
assert_nothing_raised{ @abs_path.to_a }
|
212
|
+
assert_nothing_raised{ @rel_path.to_a }
|
165
213
|
assert_kind_of(Array, @abs_path.to_a)
|
166
214
|
assert_equal(%w/usr local bin/, @abs_path.to_a)
|
215
|
+
|
216
|
+
assert_non_destructive
|
167
217
|
end
|
168
218
|
|
169
219
|
def test_spaceship_operator
|
@@ -202,7 +252,7 @@ class TC_Pathname < Test::Unit::TestCase
|
|
202
252
|
# Any tests marked with "***" mean that this behavior is different than
|
203
253
|
# the current implementation. It also means I disagree with the current
|
204
254
|
# implementation.
|
205
|
-
def
|
255
|
+
def test_clean
|
206
256
|
# Standard stuff
|
207
257
|
assert_equal("/a/b/c", Pathname.new("/a/b/c").cleanpath)
|
208
258
|
assert_equal("b/c", Pathname.new("./b/c").cleanpath)
|
@@ -220,6 +270,8 @@ class TC_Pathname < Test::Unit::TestCase
|
|
220
270
|
assert_equal("..", Pathname.new("..").cleanpath)
|
221
271
|
assert_equal('/', Pathname.new('/').cleanpath)
|
222
272
|
assert_equal('/', Pathname.new('//').cleanpath)
|
273
|
+
|
274
|
+
assert_non_destructive
|
223
275
|
end
|
224
276
|
|
225
277
|
def test_facade_io
|
@@ -253,6 +305,7 @@ class TC_Pathname < Test::Unit::TestCase
|
|
253
305
|
}
|
254
306
|
end
|
255
307
|
|
308
|
+
# Doesn't work properly in 1.4.0
|
256
309
|
def test_facade_find
|
257
310
|
assert_respond_to(@abs_path, :find)
|
258
311
|
assert_nothing_raised{ @abs_path.find{} }
|
@@ -266,6 +319,7 @@ class TC_Pathname < Test::Unit::TestCase
|
|
266
319
|
def teardown
|
267
320
|
@abs_path = nil
|
268
321
|
@rel_path = nil
|
322
|
+
@cur_path = nil
|
269
323
|
|
270
324
|
@abs_array.clear
|
271
325
|
@rel_array.clear
|
data/test/tc_pathname_win.rb
CHANGED
@@ -1,11 +1,20 @@
|
|
1
|
-
|
1
|
+
##########################################################################
|
2
2
|
# tc_pathname_win.rb
|
3
3
|
#
|
4
|
-
# MS Windows test suite for the Pathname class.
|
5
|
-
|
4
|
+
# MS Windows test suite for the Pathname class. To test explicitly
|
5
|
+
# against the C extension pass the letter 'c' as an argument.
|
6
|
+
###########################################################################
|
6
7
|
Dir.chdir ".." if File.basename(Dir.pwd) == "test"
|
7
8
|
$LOAD_PATH.unshift Dir.pwd
|
8
|
-
$
|
9
|
+
$c_extension = false
|
10
|
+
|
11
|
+
# If the user passes a 'c', test against the C extension
|
12
|
+
if ARGV[0] && ARGV[0].downcase == "c"
|
13
|
+
$c_extension = true
|
14
|
+
$LOAD_PATH.unshift Dir.pwd + "/ext"
|
15
|
+
else
|
16
|
+
$LOAD_PATH.unshift Dir.pwd + "/lib"
|
17
|
+
end
|
9
18
|
|
10
19
|
unless PLATFORM.match("mswin")
|
11
20
|
STDERR.puts("Please run 'tc_pathname.rb' instead.")
|
@@ -19,6 +28,7 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
19
28
|
def setup
|
20
29
|
@fpath = Pathname.new("C:/Program Files/Windows NT/Accessories")
|
21
30
|
@bpath = Pathname.new("C:\\Program Files\\Windows NT\\Accessories")
|
31
|
+
@dpath = Pathname.new("C:\\Program Files\\File[5].txt")
|
22
32
|
@spath = Pathname.new("C:\\PROGRA~1\\WINDOW~1\\ACCESS~1")
|
23
33
|
@upath = Pathname.new("\\\\foo\\bar\\baz")
|
24
34
|
@npath = Pathname.new("foo\\bar\\baz")
|
@@ -27,6 +37,11 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
27
37
|
@ypath = Pathname.new("\\\\foo")
|
28
38
|
@zpath = Pathname.new("\\\\")
|
29
39
|
@epath = Pathname.new("")
|
40
|
+
@ppath = Pathname.new("C:\\foo\\bar\\")
|
41
|
+
@cpath = Pathname.new("C:\\foo\\..\\bar\\.\\baz")
|
42
|
+
@tpath = Pathname.new("C:\\foo\\bar")
|
43
|
+
|
44
|
+
@cur_path = Pathname.new(Dir.pwd)
|
30
45
|
|
31
46
|
@abs_array = []
|
32
47
|
@rel_array = []
|
@@ -34,7 +49,7 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
34
49
|
end
|
35
50
|
|
36
51
|
def test_version
|
37
|
-
assert_equal("1.
|
52
|
+
assert_equal("1.4.0", Pathname::VERSION)
|
38
53
|
end
|
39
54
|
|
40
55
|
# Convenience method for test_plus
|
@@ -53,11 +68,31 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
53
68
|
assert_equal(int, result)
|
54
69
|
end
|
55
70
|
|
71
|
+
# Convenience method to verify that the receiver was not modified
|
72
|
+
# except perhaps slashes
|
73
|
+
def assert_non_destructive
|
74
|
+
assert_equal("C:\\Program Files\\Windows NT\\Accessories", @fpath)
|
75
|
+
assert_equal("C:\\Program Files\\Windows NT\\Accessories", @bpath)
|
76
|
+
assert_equal("C:\\Program Files\\File[5].txt", @dpath)
|
77
|
+
assert_equal("C:\\PROGRA~1\\WINDOW~1\\ACCESS~1", @spath)
|
78
|
+
assert_equal("\\\\foo\\bar\\baz", @upath)
|
79
|
+
assert_equal("foo\\bar\\baz", @npath)
|
80
|
+
assert_equal("Z:\\", @rpath)
|
81
|
+
assert_equal("\\\\foo\\bar", @xpath)
|
82
|
+
assert_equal("\\\\foo", @ypath)
|
83
|
+
assert_equal("\\\\", @zpath)
|
84
|
+
assert_equal("", @epath)
|
85
|
+
assert_equal("C:\\foo\\bar\\", @ppath)
|
86
|
+
assert_equal("C:\\foo\\..\\bar\\.\\baz", @cpath)
|
87
|
+
end
|
88
|
+
|
56
89
|
def test_short_path
|
57
90
|
assert_respond_to(@bpath, :short_path)
|
58
91
|
assert_nothing_raised{ @bpath.short_path }
|
59
92
|
assert_kind_of(Pathname, @bpath.short_path)
|
60
93
|
assert_equal("C:\\PROGRA~1\\WINDOW~1\\ACCESS~1", @bpath.short_path)
|
94
|
+
|
95
|
+
assert_equal("C:\\Program Files\\Windows NT\\Accessories", @bpath)
|
61
96
|
end
|
62
97
|
|
63
98
|
def test_long_path
|
@@ -69,13 +104,108 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
69
104
|
"C:\\Program Files\\Windows NT\\Accessories",
|
70
105
|
@spath.long_path
|
71
106
|
)
|
107
|
+
|
108
|
+
assert_equal("C:\\PROGRA~1\\WINDOW~1\\ACCESS~1", @spath)
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_undecorate
|
112
|
+
assert_respond_to(@dpath, :undecorate)
|
113
|
+
assert_nothing_raised{ @dpath.undecorate }
|
114
|
+
assert_kind_of(Pathname, @dpath.undecorate)
|
115
|
+
|
116
|
+
assert_equal('C:\Program Files\File.txt', @dpath.undecorate)
|
117
|
+
assert_equal('C:\Path\File', Pathname.new('C:\Path\File').undecorate)
|
118
|
+
assert_equal('C:\Path\File', Pathname.new('C:\Path\File[12]').undecorate)
|
119
|
+
assert_equal('C:\Path\[3].txt',
|
120
|
+
Pathname.new('C:\Path\[3].txt').undecorate
|
121
|
+
)
|
122
|
+
assert_equal('\\foo\bar.txt',Pathname.new('\\foo\bar[5].txt').undecorate)
|
123
|
+
assert_equal('\\foo\bar', Pathname.new('\\foo\bar[5]').undecorate)
|
124
|
+
assert_equal('\\foo\bar', Pathname.new('\\foo\bar').undecorate)
|
125
|
+
|
126
|
+
assert_equal("C:\\Program Files\\File[5].txt", @dpath)
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_undecorate_bang
|
130
|
+
assert_respond_to(@dpath, :undecorate!)
|
131
|
+
assert_nothing_raised{ @dpath.undecorate! }
|
132
|
+
assert_kind_of(Pathname, @dpath.undecorate!)
|
133
|
+
|
134
|
+
assert_equal('C:\Program Files\File.txt', @dpath.undecorate!)
|
135
|
+
assert_equal('C:\Path\File', Pathname.new('C:\Path\File').undecorate!)
|
136
|
+
assert_equal('C:\Path\File', Pathname.new('C:\Path\File[12]').undecorate!)
|
137
|
+
assert_equal('C:\Path\[3].txt',
|
138
|
+
Pathname.new('C:\Path\[3].txt').undecorate!
|
139
|
+
)
|
140
|
+
assert_equal('\\foo\bar.txt',Pathname.new('\\foo\bar[5].txt').undecorate!)
|
141
|
+
assert_equal('\\foo\bar', Pathname.new('\\foo\bar[5]').undecorate!)
|
142
|
+
assert_equal('\\foo\bar', Pathname.new('\\foo\bar').undecorate!)
|
143
|
+
|
144
|
+
assert_equal('C:\Program Files\File.txt', @dpath)
|
145
|
+
end
|
146
|
+
|
147
|
+
def test_unc
|
148
|
+
assert_respond_to(@upath, :unc?)
|
149
|
+
assert_nothing_raised{ @upath.unc? }
|
150
|
+
|
151
|
+
assert_equal(true, @upath.unc?)
|
152
|
+
assert_equal(true, @xpath.unc?)
|
153
|
+
assert_equal(true, @ypath.unc?)
|
154
|
+
assert_equal(true, @zpath.unc?)
|
155
|
+
assert_equal(false, @fpath.unc?)
|
156
|
+
assert_equal(false, @bpath.unc?)
|
157
|
+
assert_equal(false, @dpath.unc?)
|
158
|
+
assert_equal(false, @spath.unc?)
|
159
|
+
assert_equal(false, @epath.unc?)
|
160
|
+
|
161
|
+
# Arguably a bug in the PathIsUNC() function since drive letters
|
162
|
+
# are, in fact, a legal part of a UNC path (for historical reasons).
|
163
|
+
assert_equal(false, Pathname.new("C:\\\\foo\\bar\\baz").unc?)
|
164
|
+
|
165
|
+
assert_non_destructive
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_pstrip
|
169
|
+
assert_respond_to(@ppath, :pstrip)
|
170
|
+
assert_nothing_raised{ @ppath.pstrip }
|
171
|
+
assert_nothing_raised{ @fpath.pstrip }
|
172
|
+
assert_kind_of(Pathname, @ppath.pstrip)
|
173
|
+
|
174
|
+
assert_equal('C:\foo', Pathname.new("C:\\foo\\").pstrip)
|
175
|
+
assert_equal('C:\foo', Pathname.new("C:\\foo").pstrip)
|
176
|
+
assert_equal("", Pathname.new("").pstrip)
|
177
|
+
|
178
|
+
assert_equal("C:\\foo\\bar\\", @ppath)
|
72
179
|
end
|
73
180
|
|
181
|
+
def test_pstrip_bang
|
182
|
+
assert_respond_to(@ppath, :pstrip!)
|
183
|
+
assert_nothing_raised{ @ppath.pstrip! }
|
184
|
+
assert_nothing_raised{ @fpath.pstrip! }
|
185
|
+
assert_kind_of(Pathname, @ppath.pstrip!)
|
186
|
+
|
187
|
+
assert_equal('C:\foo', Pathname.new("C:\\foo\\").pstrip!)
|
188
|
+
assert_equal('C:\foo', Pathname.new("C:\\foo").pstrip!)
|
189
|
+
assert_equal("", Pathname.new("").pstrip!)
|
190
|
+
|
191
|
+
assert_equal("C:\\foo\\bar", @ppath)
|
192
|
+
end
|
193
|
+
|
194
|
+
def test_exists
|
195
|
+
assert_respond_to(@fpath, :exists?)
|
196
|
+
assert_nothing_raised{ @fpath.exists? }
|
197
|
+
assert_equal(true, Pathname.new("C:\\").exists?)
|
198
|
+
assert_equal(false, Pathname.new("X:\\foo\\bar\\baz").exists?)
|
199
|
+
end
|
200
|
+
|
74
201
|
def test_each
|
202
|
+
array = []
|
203
|
+
|
75
204
|
assert_respond_to(@fpath, :each)
|
76
|
-
assert_nothing_raised{ @fpath.each{ |e| } }
|
205
|
+
assert_nothing_raised{ @fpath.each{ |e| array.push(e) } }
|
206
|
+
assert_equal(["C:", "Program Files", "Windows NT", "Accessories"], array)
|
77
207
|
end
|
78
|
-
|
208
|
+
|
79
209
|
def test_descend
|
80
210
|
assert_respond_to(@bpath, :descend)
|
81
211
|
assert_nothing_raised{ @bpath.descend{} }
|
@@ -95,8 +225,10 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
95
225
|
|
96
226
|
assert_equal("\\\\foo\\bar", @unc_array[0])
|
97
227
|
assert_equal("\\\\foo\\bar\\baz", @unc_array[1])
|
228
|
+
|
229
|
+
assert_non_destructive
|
98
230
|
end
|
99
|
-
|
231
|
+
|
100
232
|
def test_ascend
|
101
233
|
assert_respond_to(@bpath, :ascend)
|
102
234
|
assert_nothing_raised{ @bpath.ascend{} }
|
@@ -118,16 +250,20 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
118
250
|
|
119
251
|
assert_equal("\\\\foo\\bar\\baz", @unc_array[0])
|
120
252
|
assert_equal("\\\\foo\\bar", @unc_array[1])
|
121
|
-
assert_equal(2, @unc_array.length)
|
253
|
+
assert_equal(2, @unc_array.length)
|
254
|
+
|
255
|
+
assert_non_destructive
|
256
|
+
end
|
257
|
+
|
258
|
+
# Fails due to PathIsURL for some reason in pure Ruby
|
259
|
+
def test_immutability
|
260
|
+
if $c_extension
|
261
|
+
path = "C:\\Program Files\\foo\\bar".freeze
|
262
|
+
assert_equal(true, path.frozen?)
|
263
|
+
assert_nothing_raised{ Pathname.new(path) }
|
264
|
+
assert_nothing_raised{ Pathname.new(path).root }
|
265
|
+
end
|
122
266
|
end
|
123
|
-
|
124
|
-
# Fails due to PathIsURL for some reason
|
125
|
-
#def test_immutability
|
126
|
-
# path = "C:\\Program Files\\foo\\bar".freeze
|
127
|
-
# assert_equal(true, path.frozen?)
|
128
|
-
# assert_nothing_raised{ Pathname.new(path) }
|
129
|
-
# assert_nothing_raised{ Pathname.new(path).root }
|
130
|
-
#end
|
131
267
|
|
132
268
|
def test_plus_operator
|
133
269
|
# Standard stuff
|
@@ -144,9 +280,24 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
144
280
|
assert_pathname_plus("\\\\", "\\\\", "")
|
145
281
|
assert_pathname_plus("\\\\foo\\baz", "\\\\foo\\bar", "\\..\\baz")
|
146
282
|
assert_pathname_plus("\\\\", "\\\\", "..\\..\\..\\..")
|
283
|
+
|
284
|
+
# Pathname + String
|
285
|
+
assert_nothing_raised{ @tpath + "bar" }
|
286
|
+
assert_equal('C:\foo\bar\baz', @tpath + 'baz')
|
287
|
+
assert_equal('C:\foo\bar', @tpath)
|
288
|
+
|
289
|
+
# Ensure neither left nor right operand are modified
|
290
|
+
assert_nothing_raised{ @tpath + @npath }
|
291
|
+
assert_equal('C:\foo\bar\foo\bar\baz', @tpath + @npath)
|
292
|
+
assert_equal('C:\foo\bar', @tpath)
|
293
|
+
assert_equal('foo\bar\baz', @npath)
|
147
294
|
end
|
148
|
-
|
295
|
+
|
149
296
|
def test_clean
|
297
|
+
assert_respond_to(@cpath, :clean)
|
298
|
+
assert_nothing_raised{ @cpath.clean }
|
299
|
+
assert_kind_of(Pathname, @cpath.clean)
|
300
|
+
|
150
301
|
# Our preset stuff
|
151
302
|
assert_equal("C:\\Program Files\\Windows NT\\Accessories", @fpath.clean)
|
152
303
|
assert_equal("C:\\Program Files\\Windows NT\\Accessories", @bpath.clean)
|
@@ -157,6 +308,7 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
157
308
|
assert_equal("\\\\foo", @ypath.clean)
|
158
309
|
assert_equal("\\\\", @zpath.clean)
|
159
310
|
assert_equal("", @epath.clean)
|
311
|
+
assert_equal("C:\\bar\\baz", @cpath.clean)
|
160
312
|
|
161
313
|
# Standard stuff
|
162
314
|
assert_equal("C:\\a\\c", Pathname.new("C:\\a\\.\\b\\..\\c").clean)
|
@@ -170,8 +322,43 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
170
322
|
# Edge cases
|
171
323
|
assert_equal("\\", Pathname.new(".").clean)
|
172
324
|
assert_equal("\\", Pathname.new("..").clean)
|
325
|
+
|
326
|
+
assert_non_destructive
|
173
327
|
end
|
174
|
-
|
328
|
+
|
329
|
+
def test_clean_bang
|
330
|
+
assert_respond_to(@cpath, :clean!)
|
331
|
+
assert_nothing_raised{ @cpath.clean! }
|
332
|
+
assert_kind_of(Pathname, @cpath.clean!)
|
333
|
+
|
334
|
+
# Our preset stuff
|
335
|
+
assert_equal("C:\\Program Files\\Windows NT\\Accessories", @fpath.clean!)
|
336
|
+
assert_equal("C:\\Program Files\\Windows NT\\Accessories", @bpath.clean!)
|
337
|
+
assert_equal("\\\\foo\\bar\\baz", @upath.clean!)
|
338
|
+
assert_equal("foo\\bar\\baz", @npath.clean!)
|
339
|
+
assert_equal("Z:\\", @rpath.clean!)
|
340
|
+
assert_equal("\\\\foo\\bar", @xpath.clean!)
|
341
|
+
assert_equal("\\\\foo", @ypath.clean!)
|
342
|
+
assert_equal("\\\\", @zpath.clean!)
|
343
|
+
assert_equal("", @epath.clean!)
|
344
|
+
assert_equal("C:\\bar\\baz", @cpath.clean!)
|
345
|
+
|
346
|
+
# Standard stuff
|
347
|
+
assert_equal("C:\\a\\c", Pathname.new("C:\\a\\.\\b\\..\\c").clean!)
|
348
|
+
assert_equal("C:\\a", Pathname.new("C:\\.\\a").clean!)
|
349
|
+
assert_equal("C:\\a\\b", Pathname.new("C:\\a\\.\\b").clean!)
|
350
|
+
assert_equal("C:\\b", Pathname.new("C:\\a\\..\\b").clean!)
|
351
|
+
assert_equal("C:\\a", Pathname.new("C:\\a\\.").clean!)
|
352
|
+
assert_equal("C:\\d", Pathname.new("C:\\..\\..\\..\\d").clean!)
|
353
|
+
assert_equal("C:\\a\\", Pathname.new("C:\\a\\").clean!)
|
354
|
+
|
355
|
+
# Edge cases
|
356
|
+
assert_equal("\\", Pathname.new(".").clean!)
|
357
|
+
assert_equal("\\", Pathname.new("..").clean!)
|
358
|
+
|
359
|
+
assert_equal("C:\\bar\\baz", @cpath)
|
360
|
+
end
|
361
|
+
|
175
362
|
def test_absolute
|
176
363
|
assert_equal(true, @fpath.absolute?)
|
177
364
|
assert_equal(true, @bpath.absolute?)
|
@@ -182,6 +369,8 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
182
369
|
assert_equal(true, @ypath.absolute?)
|
183
370
|
assert_equal(true, @zpath.absolute?)
|
184
371
|
assert_equal(false, @epath.absolute?)
|
372
|
+
|
373
|
+
assert_non_destructive
|
185
374
|
end
|
186
375
|
|
187
376
|
def test_relative
|
@@ -194,10 +383,12 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
194
383
|
assert_equal(false, @ypath.relative?)
|
195
384
|
assert_equal(false, @zpath.relative?)
|
196
385
|
assert_equal(true, @epath.relative?)
|
386
|
+
|
387
|
+
assert_non_destructive
|
197
388
|
end
|
198
389
|
|
199
390
|
def test_root
|
200
|
-
assert_equal("C:\\", @fpath.root)
|
391
|
+
assert_equal("C:\\", @fpath.root)
|
201
392
|
assert_equal("C:\\", @bpath.root)
|
202
393
|
assert_equal("\\\\foo\\bar", @upath.root)
|
203
394
|
assert_equal(".", @npath.root)
|
@@ -210,6 +401,8 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
210
401
|
# Edge cases
|
211
402
|
assert_equal(".", Pathname.new("..").root)
|
212
403
|
assert_equal(".", Pathname.new(".").root)
|
404
|
+
|
405
|
+
assert_non_destructive
|
213
406
|
end
|
214
407
|
|
215
408
|
def test_drive_number
|
@@ -226,6 +419,8 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
226
419
|
# Edge cases
|
227
420
|
assert_equal(nil, Pathname.new("..").drive_number)
|
228
421
|
assert_equal(nil, Pathname.new(".").drive_number)
|
422
|
+
|
423
|
+
assert_non_destructive
|
229
424
|
end
|
230
425
|
|
231
426
|
def test_to_a
|
@@ -239,6 +434,9 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
239
434
|
assert_equal(["foo"], @ypath.to_a)
|
240
435
|
assert_equal([], @zpath.to_a)
|
241
436
|
assert_equal([], @epath.to_a)
|
437
|
+
assert_equal(["C:", "foo", "bar"], @ppath.to_a)
|
438
|
+
|
439
|
+
assert_non_destructive
|
242
440
|
end
|
243
441
|
|
244
442
|
def test_is_root
|
@@ -251,8 +449,13 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
251
449
|
assert_equal(true, @ypath.root?)
|
252
450
|
assert_equal(true, @zpath.root?)
|
253
451
|
assert_equal(false, @epath.root?)
|
452
|
+
assert_equal(false, @ppath.root?)
|
453
|
+
|
454
|
+
assert_non_destructive
|
254
455
|
end
|
255
|
-
|
456
|
+
|
457
|
+
# These are the methods from IO we have to explicitly define since
|
458
|
+
# they aren't handled by Facade.
|
256
459
|
def test_facade_io
|
257
460
|
assert_respond_to(@fpath, :foreach)
|
258
461
|
assert_respond_to(@fpath, :read)
|
@@ -297,17 +500,21 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
297
500
|
end
|
298
501
|
|
299
502
|
def test_children
|
300
|
-
Dir.chdir("..") if File.basename(Dir.pwd) == "test"
|
301
|
-
@cur_path = Pathname.new(Dir.pwd)
|
302
|
-
|
303
503
|
assert_respond_to(@cur_path, :children)
|
304
504
|
assert_nothing_raised{ @cur_path.children }
|
305
505
|
assert_kind_of(Array, @cur_path.children)
|
306
506
|
|
507
|
+
# Delete Eclipse related files
|
508
|
+
children = @cur_path.children
|
509
|
+
children.delete_if{ |e| File.basename(e) == "CVS" }
|
510
|
+
children.delete_if{ |e| File.basename(e) == ".cvsignore" }
|
511
|
+
children.delete_if{ |e| File.basename(e) == ".project" }
|
512
|
+
|
307
513
|
assert_equal(
|
308
514
|
[
|
309
515
|
Dir.pwd + "/CHANGES",
|
310
516
|
Dir.pwd + "/examples",
|
517
|
+
Dir.pwd + "/ext",
|
311
518
|
Dir.pwd + "/install.rb",
|
312
519
|
Dir.pwd + "/lib",
|
313
520
|
Dir.pwd + "/MANIFEST",
|
@@ -315,20 +522,28 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
315
522
|
Dir.pwd + "/README",
|
316
523
|
Dir.pwd + "/test"
|
317
524
|
].map{ |e| e.tr("/","\\") },
|
318
|
-
|
525
|
+
children
|
319
526
|
)
|
527
|
+
|
528
|
+
# Delete Eclipse related files
|
529
|
+
children = @cur_path.children(false)
|
530
|
+
children.delete("CVS")
|
531
|
+
children.delete(".cvsignore")
|
532
|
+
children.delete(".project")
|
533
|
+
|
320
534
|
assert_equal(
|
321
535
|
[
|
322
|
-
"CHANGES","examples","install.rb","lib",
|
536
|
+
"CHANGES","examples","ext","install.rb","lib",
|
323
537
|
"MANIFEST", "pathname2.gemspec", "README", "test"
|
324
538
|
],
|
325
|
-
|
539
|
+
children
|
326
540
|
)
|
327
541
|
end
|
328
|
-
|
542
|
+
|
329
543
|
def teardown
|
330
544
|
@fpath = nil
|
331
545
|
@bpath = nil
|
546
|
+
@dpath = nil
|
332
547
|
@spath = nil
|
333
548
|
@upath = nil
|
334
549
|
@npath = nil
|
@@ -337,6 +552,11 @@ class TC_Pathname_MSWin < Test::Unit::TestCase
|
|
337
552
|
@ypath = nil
|
338
553
|
@zpath = nil
|
339
554
|
@epath = nil
|
555
|
+
@ppath = nil
|
556
|
+
@cpath = nil
|
557
|
+
@tpath = nil
|
558
|
+
|
559
|
+
@cur_path = nil
|
340
560
|
|
341
561
|
@abs_array.clear
|
342
562
|
@rel_array.clear
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.8.
|
2
|
+
rubygems_version: 0.8.10
|
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.4.0
|
7
|
+
date: 2005-12-19
|
8
8
|
summary: An alternate implementation of the Pathname class
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -24,17 +24,15 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
24
24
|
version: 0.0.0
|
25
25
|
version:
|
26
26
|
platform: ruby
|
27
|
-
signing_key:
|
28
|
-
cert_chain:
|
29
27
|
authors:
|
30
28
|
- Daniel J. Berger
|
31
29
|
files:
|
32
30
|
- lib/pathname2.rb
|
31
|
+
- README
|
33
32
|
- CHANGES
|
34
33
|
- MANIFEST
|
35
|
-
- README
|
36
|
-
- test/tc_pathname.rb
|
37
34
|
- test/tc_pathname_win.rb
|
35
|
+
- test/tc_pathname.rb
|
38
36
|
test_files:
|
39
37
|
- test/tc_pathname.rb
|
40
38
|
rdoc_options: []
|