win32-file 0.5.4 → 0.5.5
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +7 -0
- data/MANIFEST +1 -3
- data/Rakefile +10 -8
- data/lib/win32/file.rb +48 -42
- data/test/tc_file_attributes.rb +4 -2
- data/test/tc_file_encryption.rb +4 -2
- data/test/tc_file_path.rb +9 -4
- data/test/tc_file_security.rb +3 -1
- data/test/tc_file_stat.rb +3 -1
- data/win32-file.gemspec +2 -2
- metadata +55 -45
- data/install.rb +0 -11
- data/test/ts_all.rb +0 -6
data/CHANGES
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
== 0.5.5 - 22-Nov-2007
|
2
|
+
* Fixed a bug in the File.dirname method with regards to relative paths.
|
3
|
+
Thanks go to an Laust Rud for the spot.
|
4
|
+
* Removed the install.rb file. Use the 'rake install' task instead.
|
5
|
+
* Added more tests to ensure the File.dirname method works properly and
|
6
|
+
did some test refactoring in general.
|
7
|
+
|
1
8
|
== 0.5.4 - 8-Apr-2007
|
2
9
|
* Now runs -w clean.
|
3
10
|
* Added a Rakefile. Manual installation and testing should now be handled
|
data/MANIFEST
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
* MANIFEST
|
3
3
|
* Rakefile
|
4
4
|
* README
|
5
|
-
* install.rb
|
6
5
|
* win32-file.gemspec
|
7
6
|
* lib/win32/file.rb
|
8
7
|
* test/sometestfile.txt
|
@@ -11,5 +10,4 @@
|
|
11
10
|
* test/tc_file_encryption.rb
|
12
11
|
* test/tc_file_path.rb
|
13
12
|
* test/tc_file_security.rb
|
14
|
-
* test/tc_file_stat.rb
|
15
|
-
* test/ts_all.rb
|
13
|
+
* test/tc_file_stat.rb
|
data/Rakefile
CHANGED
@@ -1,13 +1,20 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'rake/testtask'
|
3
|
+
require 'rbconfig'
|
4
|
+
include Config
|
3
5
|
|
4
6
|
task :clean do
|
5
7
|
rm 'sometestfile.txt' if File.exists? 'sometestfile.txt'
|
6
8
|
end
|
7
9
|
|
8
10
|
desc 'Install the win32-file package (non-gem)'
|
9
|
-
task :install
|
10
|
-
|
11
|
+
task :install do
|
12
|
+
sitelibdir = CONFIG['sitelibdir']
|
13
|
+
installdir = File.join(sitelibdir, 'win32')
|
14
|
+
file = 'lib\win32\file.rb'
|
15
|
+
|
16
|
+
Dir.mkdir(installdir) unless File.exists?(installdir)
|
17
|
+
FileUtils.cp(file, installdir, :verbose => true)
|
11
18
|
end
|
12
19
|
|
13
20
|
desc 'Install the win32-file package as a gem'
|
@@ -21,11 +28,10 @@ Rake::TestTask.new("test") do |t|
|
|
21
28
|
t.libs << 'test'
|
22
29
|
t.verbose = true
|
23
30
|
t.warning = true
|
24
|
-
t.test_files = FileList['test/
|
31
|
+
t.test_files = FileList['test/tc*']
|
25
32
|
end
|
26
33
|
|
27
34
|
Rake::TestTask.new("test_attributes") do |t|
|
28
|
-
cp('test/sometestfile.txt', '.')
|
29
35
|
t.verbose = true
|
30
36
|
t.warning = true
|
31
37
|
t.test_files = FileList['test/tc_file_attributes.rb']
|
@@ -38,28 +44,24 @@ Rake::TestTask.new("test_constants") do |t|
|
|
38
44
|
end
|
39
45
|
|
40
46
|
Rake::TestTask.new("test_encryption") do |t|
|
41
|
-
cp('test/sometestfile.txt', '.')
|
42
47
|
t.verbose = true
|
43
48
|
t.warning = true
|
44
49
|
t.test_files = FileList['test/tc_file_encryption.rb']
|
45
50
|
end
|
46
51
|
|
47
52
|
Rake::TestTask.new("test_path") do |t|
|
48
|
-
cp('test/sometestfile.txt', '.')
|
49
53
|
t.verbose = true
|
50
54
|
t.warning = true
|
51
55
|
t.test_files = FileList['test/tc_file_path.rb']
|
52
56
|
end
|
53
57
|
|
54
58
|
Rake::TestTask.new("test_security") do |t|
|
55
|
-
cp('test/sometestfile.txt', '.')
|
56
59
|
t.verbose = true
|
57
60
|
t.warning = true
|
58
61
|
t.test_files = FileList['test/tc_file_security.rb']
|
59
62
|
end
|
60
63
|
|
61
64
|
Rake::TestTask.new("test_stat") do |t|
|
62
|
-
cp('test/sometestfile.txt', '.')
|
63
65
|
t.verbose = true
|
64
66
|
t.warning = true
|
65
67
|
t.test_files = FileList['test/tc_file_stat.rb']
|
data/lib/win32/file.rb
CHANGED
@@ -16,7 +16,7 @@ class File
|
|
16
16
|
extend Windows::MSVCRT::Buffer
|
17
17
|
extend Windows::Limits
|
18
18
|
|
19
|
-
VERSION = '0.5.
|
19
|
+
VERSION = '0.5.5'
|
20
20
|
MAX_PATH = 260
|
21
21
|
|
22
22
|
# Abbreviated attribute constants for convenience
|
@@ -68,37 +68,37 @@ class File
|
|
68
68
|
# permission constants as possible values. The possible constant values
|
69
69
|
# are:
|
70
70
|
#
|
71
|
-
# FILE_READ_DATA
|
72
|
-
# FILE_WRITE_DATA
|
73
|
-
# FILE_APPEND_DATA
|
74
|
-
# FILE_READ_EA
|
75
|
-
# FILE_WRITE_EA
|
76
|
-
# FILE_EXECUTE
|
77
|
-
# FILE_DELETE_CHILD
|
78
|
-
# FILE_READ_ATTRIBUTES
|
79
|
-
# FILE_WRITE_ATTRIBUTES
|
80
|
-
# STANDARD_RIGHTS_ALL
|
81
|
-
# FULL
|
82
|
-
# READ
|
83
|
-
# ADD
|
84
|
-
# CHANGE
|
85
|
-
# DELETE
|
86
|
-
# READ_CONTROL
|
87
|
-
# WRITE_DAC
|
88
|
-
# WRITE_OWNER
|
89
|
-
# SYNCHRONIZE
|
90
|
-
# STANDARD_RIGHTS_REQUIRED
|
91
|
-
# STANDARD_RIGHTS_READ
|
92
|
-
# STANDARD_RIGHTS_WRITE
|
93
|
-
# STANDARD_RIGHTS_EXECUTE
|
94
|
-
# STANDARD_RIGHTS_ALL
|
95
|
-
# SPECIFIC_RIGHTS_ALL
|
96
|
-
# ACCESS_SYSTEM_SECURITY
|
97
|
-
# MAXIMUM_ALLOWED
|
98
|
-
# GENERIC_READ
|
99
|
-
# GENERIC_WRITE
|
100
|
-
# GENERIC_EXECUTE
|
101
|
-
# GENERIC_ALL
|
71
|
+
# * FILE_READ_DATA
|
72
|
+
# * FILE_WRITE_DATA
|
73
|
+
# * FILE_APPEND_DATA
|
74
|
+
# * FILE_READ_EA
|
75
|
+
# * FILE_WRITE_EA
|
76
|
+
# * FILE_EXECUTE
|
77
|
+
# * FILE_DELETE_CHILD
|
78
|
+
# * FILE_READ_ATTRIBUTES
|
79
|
+
# * FILE_WRITE_ATTRIBUTES
|
80
|
+
# * STANDARD_RIGHTS_ALL
|
81
|
+
# * FULL
|
82
|
+
# * READ
|
83
|
+
# * ADD
|
84
|
+
# * CHANGE
|
85
|
+
# * DELETE
|
86
|
+
# * READ_CONTROL
|
87
|
+
# * WRITE_DAC
|
88
|
+
# * WRITE_OWNER
|
89
|
+
# * SYNCHRONIZE
|
90
|
+
# * STANDARD_RIGHTS_REQUIRED
|
91
|
+
# * STANDARD_RIGHTS_READ
|
92
|
+
# * STANDARD_RIGHTS_WRITE
|
93
|
+
# * STANDARD_RIGHTS_EXECUTE
|
94
|
+
# * STANDARD_RIGHTS_ALL
|
95
|
+
# * SPECIFIC_RIGHTS_ALL
|
96
|
+
# * ACCESS_SYSTEM_SECURITY
|
97
|
+
# * MAXIMUM_ALLOWED
|
98
|
+
# * GENERIC_READ
|
99
|
+
# * GENERIC_WRITE
|
100
|
+
# * GENERIC_EXECUTE
|
101
|
+
# * GENERIC_ALL
|
102
102
|
#
|
103
103
|
def set_permissions(file, perms)
|
104
104
|
raise TypeError unless perms.kind_of?(Hash)
|
@@ -398,9 +398,11 @@ class File
|
|
398
398
|
# paths properly, i.e. it should not return anything less than the root.
|
399
399
|
# In all other respects it is identical to the current implementation.
|
400
400
|
#
|
401
|
-
#
|
402
|
-
#
|
403
|
-
#
|
401
|
+
# Examples:
|
402
|
+
#
|
403
|
+
# File.basename("C:\\foo\\bar.txt") -> "bar.txt"
|
404
|
+
# File.basename("C:\\foo\\bar.txt", ".txt") -> "bar"
|
405
|
+
# File.basename("\\\\foo\\bar") -> "\\\\foo\\bar"
|
404
406
|
#
|
405
407
|
def basename(file, suffix = nil)
|
406
408
|
fpath = false
|
@@ -453,10 +455,12 @@ class File
|
|
453
455
|
# paths properly, i.e. it should not return anything less than the root.
|
454
456
|
# In all other respects it is identical to the current implementation.
|
455
457
|
#
|
456
|
-
#
|
457
|
-
#
|
458
|
+
# Examples:
|
459
|
+
#
|
460
|
+
# File.dirname("C:\\foo\\bar\\baz.txt") -> "C:\\foo\\bar"
|
461
|
+
# File.dirname("\\\\foo\\bar") -> "\\\\foo\\bar"
|
458
462
|
#
|
459
|
-
def dirname(file)
|
463
|
+
def dirname(file)
|
460
464
|
fpath = false
|
461
465
|
file = file.dup
|
462
466
|
|
@@ -465,10 +469,6 @@ class File
|
|
465
469
|
fpath = true
|
466
470
|
end
|
467
471
|
|
468
|
-
if PathIsRelative(file)
|
469
|
-
return '.'
|
470
|
-
end
|
471
|
-
|
472
472
|
if PathIsRoot(file)
|
473
473
|
file.tr!("\\", '/') if fpath
|
474
474
|
return file
|
@@ -476,6 +476,12 @@ class File
|
|
476
476
|
|
477
477
|
PathRemoveFileSpec(file)
|
478
478
|
file = file.split(0.chr).first
|
479
|
+
|
480
|
+
# Empty paths, short relative paths
|
481
|
+
if file.nil? || (file && file.empty?)
|
482
|
+
return '.'
|
483
|
+
end
|
484
|
+
|
479
485
|
PathRemoveBackslash(file)
|
480
486
|
|
481
487
|
file.tr!("\\", '/') if fpath
|
data/test/tc_file_attributes.rb
CHANGED
@@ -10,13 +10,14 @@ require 'win32/file'
|
|
10
10
|
class TC_Win32_File_Attributes < Test::Unit::TestCase
|
11
11
|
include Windows::File
|
12
12
|
def setup
|
13
|
-
@
|
13
|
+
@dir = File.dirname(File.expand_path(__FILE__))
|
14
|
+
@file = File.join(@dir, 'sometestfile.txt')
|
14
15
|
@fh = File.open(@file)
|
15
16
|
@attr = GetFileAttributes(@file)
|
16
17
|
end
|
17
18
|
|
18
19
|
def test_version
|
19
|
-
assert_equal('0.5.
|
20
|
+
assert_equal('0.5.5', File::VERSION)
|
20
21
|
end
|
21
22
|
|
22
23
|
def test_temporary
|
@@ -241,6 +242,7 @@ class TC_Win32_File_Attributes < Test::Unit::TestCase
|
|
241
242
|
def teardown
|
242
243
|
SetFileAttributes(@file, @attr)
|
243
244
|
@file = nil
|
245
|
+
@dir = nil
|
244
246
|
@fh.close
|
245
247
|
end
|
246
248
|
end
|
data/test/tc_file_encryption.rb
CHANGED
@@ -11,8 +11,9 @@ require 'win32/file'
|
|
11
11
|
|
12
12
|
class TC_Win32_File_Encryption < Test::Unit::TestCase
|
13
13
|
def setup
|
14
|
-
@
|
15
|
-
@
|
14
|
+
@dir = File.dirname(File.expand_path(__FILE__))
|
15
|
+
@file = File.join(@dir, 'sometestfile.txt')
|
16
|
+
@msg = '=> Ignore. May not work due to security setup of your system.'
|
16
17
|
end
|
17
18
|
|
18
19
|
def test_encrypt
|
@@ -27,5 +28,6 @@ class TC_Win32_File_Encryption < Test::Unit::TestCase
|
|
27
28
|
|
28
29
|
def teardown
|
29
30
|
@file = nil
|
31
|
+
@dir = nil
|
30
32
|
end
|
31
33
|
end
|
data/test/tc_file_path.rb
CHANGED
@@ -9,8 +9,9 @@ require 'win32/file'
|
|
9
9
|
|
10
10
|
class TC_Win32_File_Path < Test::Unit::TestCase
|
11
11
|
def setup
|
12
|
-
@
|
13
|
-
@long_file = 'sometestfile.txt'
|
12
|
+
@dir = File.dirname(File.expand_path(__FILE__))
|
13
|
+
@long_file = File.join(@dir, 'sometestfile.txt')
|
14
|
+
@short_file = File.join(@dir, 'SOMETE~1.TXT')
|
14
15
|
end
|
15
16
|
|
16
17
|
def test_basename
|
@@ -98,11 +99,14 @@ class TC_Win32_File_Path < Test::Unit::TestCase
|
|
98
99
|
assert_equal("//foo/bar", File.dirname("//foo/bar"))
|
99
100
|
assert_equal("//foo", File.dirname("//foo"))
|
100
101
|
assert_equal("//", File.dirname("//"))
|
102
|
+
assert_equal(".", File.dirname("./foo"))
|
103
|
+
assert_equal("./foo", File.dirname("./foo/bar"))
|
101
104
|
|
102
105
|
# Edge cases
|
103
106
|
assert_equal(".", File.dirname(""))
|
104
107
|
assert_equal(".", File.dirname("."))
|
105
108
|
assert_equal(".", File.dirname("."))
|
109
|
+
assert_equal(".", File.dirname("./"))
|
106
110
|
assert_raises(TypeError){ File.dirname(nil) }
|
107
111
|
|
108
112
|
# Ensure original path not modified
|
@@ -148,17 +152,18 @@ class TC_Win32_File_Path < Test::Unit::TestCase
|
|
148
152
|
def test_long_path
|
149
153
|
assert_respond_to(File, :long_path)
|
150
154
|
assert_equal('sometestfile.txt', File.long_path(@short_file))
|
151
|
-
assert_equal('SOMETE~1.TXT', @short_file)
|
155
|
+
assert_equal('SOMETE~1.TXT', File.basename(@short_file))
|
152
156
|
end
|
153
157
|
|
154
158
|
def test_short_path
|
155
159
|
assert_respond_to(File, :short_path)
|
156
160
|
assert_equal('SOMETE~1.TXT', File.short_path(@long_file))
|
157
|
-
assert_equal('sometestfile.txt', @long_file)
|
161
|
+
assert_equal('sometestfile.txt', File.basename(@long_file))
|
158
162
|
end
|
159
163
|
|
160
164
|
def teardown
|
161
165
|
@short_file = nil
|
162
166
|
@long_file = nil
|
167
|
+
@dir = nil
|
163
168
|
end
|
164
169
|
end
|
data/test/tc_file_security.rb
CHANGED
@@ -11,7 +11,8 @@ require 'socket'
|
|
11
11
|
class TC_Win32_File_Security < Test::Unit::TestCase
|
12
12
|
def setup
|
13
13
|
@host = Socket.gethostname
|
14
|
-
@
|
14
|
+
@dir = File.dirname(File.expand_path(__FILE__))
|
15
|
+
@file = File.join(@dir, 'sometestfile.txt')
|
15
16
|
@perms = nil
|
16
17
|
end
|
17
18
|
|
@@ -45,5 +46,6 @@ class TC_Win32_File_Security < Test::Unit::TestCase
|
|
45
46
|
@file = nil
|
46
47
|
@host = nil
|
47
48
|
@perms = nil
|
49
|
+
@dir = nil
|
48
50
|
end
|
49
51
|
end
|
data/test/tc_file_stat.rb
CHANGED
@@ -9,7 +9,8 @@ require 'win32/file'
|
|
9
9
|
|
10
10
|
class TC_Win32_File_Stat < Test::Unit::TestCase
|
11
11
|
def setup
|
12
|
-
@
|
12
|
+
@dir = File.dirname(File.expand_path(__FILE__))
|
13
|
+
@file = File.join(@dir, 'sometestfile.txt')
|
13
14
|
end
|
14
15
|
|
15
16
|
# Although I don't perform a test against a file > 2gb here (since I
|
@@ -86,5 +87,6 @@ class TC_Win32_File_Stat < Test::Unit::TestCase
|
|
86
87
|
|
87
88
|
def teardown
|
88
89
|
@file = nil
|
90
|
+
@dir = nil
|
89
91
|
end
|
90
92
|
end
|
data/win32-file.gemspec
CHANGED
@@ -2,14 +2,14 @@ require "rubygems"
|
|
2
2
|
|
3
3
|
spec = Gem::Specification.new do |gem|
|
4
4
|
gem.name = "win32-file"
|
5
|
-
gem.version = "0.5.
|
5
|
+
gem.version = "0.5.5"
|
6
6
|
gem.author = "Daniel J. Berger"
|
7
7
|
gem.email = "djberg96@gmail.com"
|
8
8
|
gem.homepage = "http://www.rubyforge.org/projects/win32utils"
|
9
9
|
gem.platform = Gem::Platform::RUBY
|
10
10
|
gem.summary = "Extra or redefined methods for the File class on Windows."
|
11
11
|
gem.description = "Extra or redefined methods for the File class on Windows."
|
12
|
-
gem.
|
12
|
+
gem.test_files = Dir["test/tc*"]
|
13
13
|
gem.has_rdoc = true
|
14
14
|
gem.files = Dir["lib/win32/*.rb"] + Dir["test/*"] + Dir["[A-Z]*"]
|
15
15
|
gem.files.reject! { |fn| fn.include? "CVS" }
|
metadata
CHANGED
@@ -1,33 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.0.8
|
3
|
-
specification_version: 1
|
4
2
|
name: win32-file
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.5.
|
7
|
-
date: 2007-04-08 00:00:00 -06:00
|
8
|
-
summary: Extra or redefined methods for the File class on Windows.
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: djberg96@gmail.com
|
12
|
-
homepage: http://www.rubyforge.org/projects/win32utils
|
13
|
-
rubyforge_project:
|
14
|
-
description: Extra or redefined methods for the File class on Windows.
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 0.5.5
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Daniel J. Berger
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2007-11-22 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: win32-file-stat
|
17
|
+
version_requirement:
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.2.0
|
23
|
+
version:
|
24
|
+
description: Extra or redefined methods for the File class on Windows.
|
25
|
+
email: djberg96@gmail.com
|
26
|
+
executables: []
|
27
|
+
|
28
|
+
extensions: []
|
29
|
+
|
30
|
+
extra_rdoc_files:
|
31
|
+
- README
|
32
|
+
- CHANGES
|
31
33
|
files:
|
32
34
|
- lib/win32/file.rb
|
33
35
|
- test/CVS
|
@@ -38,36 +40,44 @@ files:
|
|
38
40
|
- test/tc_file_path.rb
|
39
41
|
- test/tc_file_security.rb
|
40
42
|
- test/tc_file_stat.rb
|
41
|
-
- test/ts_all.rb
|
42
43
|
- CHANGES
|
43
44
|
- CVS
|
44
|
-
- install.rb
|
45
45
|
- lib
|
46
46
|
- MANIFEST
|
47
47
|
- Rakefile
|
48
48
|
- README
|
49
49
|
- test
|
50
50
|
- win32-file.gemspec
|
51
|
-
|
52
|
-
|
51
|
+
has_rdoc: true
|
52
|
+
homepage: http://www.rubyforge.org/projects/win32utils
|
53
|
+
post_install_message:
|
53
54
|
rdoc_options: []
|
54
55
|
|
55
|
-
|
56
|
-
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: "0"
|
63
|
+
version:
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: "0"
|
69
|
+
version:
|
62
70
|
requirements: []
|
63
71
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
72
|
+
rubyforge_project:
|
73
|
+
rubygems_version: 0.9.5
|
74
|
+
signing_key:
|
75
|
+
specification_version: 2
|
76
|
+
summary: Extra or redefined methods for the File class on Windows.
|
77
|
+
test_files:
|
78
|
+
- test/tc_file_attributes.rb
|
79
|
+
- test/tc_file_constants.rb
|
80
|
+
- test/tc_file_encryption.rb
|
81
|
+
- test/tc_file_path.rb
|
82
|
+
- test/tc_file_security.rb
|
83
|
+
- test/tc_file_stat.rb
|
data/install.rb
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
# For those who don't like gems...
|
2
|
-
require 'rbconfig'
|
3
|
-
require 'ftools'
|
4
|
-
include Config
|
5
|
-
|
6
|
-
sitelibdir = CONFIG['sitelibdir']
|
7
|
-
installdir = sitelibdir + '/win32'
|
8
|
-
file = 'lib\win32\file.rb'
|
9
|
-
|
10
|
-
Dir.mkdir(installdir) unless File.exists?(installdir)
|
11
|
-
File.copy(file, installdir, true)
|