win32-dir 0.4.2 → 0.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.
- checksums.yaml +7 -0
- data/CHANGES +8 -0
- data/Rakefile +8 -2
- data/lib/win32/dir/functions.rb +23 -15
- data/lib/win32/dir.rb +3 -25
- data/test/test_win32_dir.rb +14 -3
- data/win32-dir.gemspec +1 -1
- metadata +17 -22
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ba7a9adc26183f9771184c4faad59d88fbc5bd22
|
4
|
+
data.tar.gz: 62e1d08549b6806816874e5299600394f9ebf5e3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7e388fc8eff13cf9cf188e82bdab4a7d4ee6164910daaa61889baebd69bc0269d0973a1d6d8bff4b993d33975071ffc73d358dbfd54e125a366e9bd5bf1ba7bd
|
7
|
+
data.tar.gz: b2fcfbe2d31741398df8cb55220f8256af771247dbb4bcaf7564e3c0bdbeceba50f4578e71cb46a0aced31380456ba3281bb9c4dfb7a66f814c797d9630cc371
|
data/CHANGES
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
== 0.4.3 - 24-Jul-2013
|
2
|
+
* Changed the Dir.read_junction and CSIDL constant strings so that they
|
3
|
+
use the default external encoding instead of UTF-16LE. This means that
|
4
|
+
they will now work with methods like File.join. Thanks go to Josh Cooper
|
5
|
+
for the patches.
|
6
|
+
* Some changes for internal handling of making FFI functions private.
|
7
|
+
* Updated gem:create task for rubygems 2.
|
8
|
+
|
1
9
|
== 0.4.2 - 8-Apr-2013
|
2
10
|
* Fixed the HANDLE function prototypes in the underlying FFI code and added
|
3
11
|
some custom typedefs for convenience. This affects 64 bit Ruby code.
|
data/Rakefile
CHANGED
@@ -6,10 +6,16 @@ CLEAN.include('**/*.gem', '**/*.log')
|
|
6
6
|
|
7
7
|
namespace 'gem' do
|
8
8
|
desc "Create the win32-dir gem"
|
9
|
-
task :
|
9
|
+
task :create => [:clean] do
|
10
10
|
Dir["*.gem"].each{ |f| File.delete(f) }
|
11
11
|
spec = eval(IO.read('win32-dir.gemspec'))
|
12
|
-
|
12
|
+
|
13
|
+
if Gem::VERSION.to_f < 2.0
|
14
|
+
Gem::Builder.new(spec).build
|
15
|
+
else
|
16
|
+
require 'rubygems/package'
|
17
|
+
Gem::Package.build(spec)
|
18
|
+
end
|
13
19
|
end
|
14
20
|
|
15
21
|
desc "Install the win32-dir gem"
|
data/lib/win32/dir/functions.rb
CHANGED
@@ -7,6 +7,14 @@ end
|
|
7
7
|
require 'ffi'
|
8
8
|
|
9
9
|
module Dir::Functions
|
10
|
+
module FFI::Library
|
11
|
+
# Wrapper method for attach_function + private
|
12
|
+
def attach_pfunc(*args)
|
13
|
+
attach_function(*args)
|
14
|
+
private args[0]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
10
18
|
extend FFI::Library
|
11
19
|
|
12
20
|
typedef :ulong, :dword
|
@@ -16,27 +24,27 @@ module Dir::Functions
|
|
16
24
|
|
17
25
|
ffi_lib :shell32
|
18
26
|
|
19
|
-
|
20
|
-
|
21
|
-
|
27
|
+
attach_pfunc :SHGetFolderPathW, [:hwnd, :int, :handle, :dword, :buffer_out], :dword
|
28
|
+
attach_pfunc :SHGetFolderLocation, [:hwnd, :int, :handle, :dword, :ptr], :dword
|
29
|
+
attach_pfunc :SHGetFileInfo, [:dword, :dword, :ptr, :uint, :uint], :dword
|
22
30
|
|
23
31
|
ffi_lib :shlwapi
|
24
32
|
|
25
|
-
|
33
|
+
attach_pfunc :PathIsDirectoryEmptyW, [:buffer_in], :bool
|
26
34
|
|
27
35
|
ffi_lib :kernel32
|
28
36
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
attach_pfunc :CloseHandle, [:handle], :bool
|
38
|
+
attach_pfunc :CreateDirectoryW, [:buffer_in, :ptr], :bool
|
39
|
+
attach_pfunc :CreateFileW, [:buffer_in, :dword, :dword, :ptr, :dword, :dword, :handle], :handle
|
40
|
+
attach_pfunc :DeviceIoControl, [:handle, :dword, :ptr, :dword, :ptr, :dword, :ptr, :ptr], :bool
|
41
|
+
attach_pfunc :GetCurrentDirectoryW, [:dword, :buffer_out], :dword
|
42
|
+
attach_pfunc :GetFileAttributesW, [:buffer_in], :dword
|
43
|
+
attach_pfunc :GetLastError, [], :dword
|
44
|
+
attach_pfunc :GetShortPathNameW, [:buffer_in, :buffer_out, :dword], :dword
|
45
|
+
attach_pfunc :GetLongPathNameW, [:buffer_in, :buffer_out, :dword], :dword
|
46
|
+
attach_pfunc :GetFullPathNameW, [:buffer_in, :dword, :buffer_out, :ptr], :dword
|
47
|
+
attach_pfunc :RemoveDirectoryW, [:buffer_in], :bool
|
40
48
|
end
|
41
49
|
|
42
50
|
class String
|
data/lib/win32/dir.rb
CHANGED
@@ -7,26 +7,8 @@ class Dir
|
|
7
7
|
include Dir::Constants
|
8
8
|
extend Dir::Functions
|
9
9
|
|
10
|
-
private_class_method(
|
11
|
-
:SHGetFolderPathW,
|
12
|
-
:SHGetFolderLocation,
|
13
|
-
:SHGetFileInfo,
|
14
|
-
:PathIsDirectoryEmptyW,
|
15
|
-
:CloseHandle,
|
16
|
-
:CreateDirectoryW,
|
17
|
-
:CreateFileW,
|
18
|
-
:DeviceIoControl,
|
19
|
-
:GetCurrentDirectoryW,
|
20
|
-
:GetFileAttributesW,
|
21
|
-
:GetLastError,
|
22
|
-
:GetShortPathNameW,
|
23
|
-
:GetLongPathNameW,
|
24
|
-
:GetFullPathNameW,
|
25
|
-
:RemoveDirectoryW
|
26
|
-
)
|
27
|
-
|
28
10
|
# The version of the win32-dir library.
|
29
|
-
VERSION = '0.4.
|
11
|
+
VERSION = '0.4.3'
|
30
12
|
|
31
13
|
# CSIDL constants
|
32
14
|
csidl = Hash[
|
@@ -110,7 +92,7 @@ class Dir
|
|
110
92
|
end
|
111
93
|
end
|
112
94
|
|
113
|
-
Dir.const_set(key, path) if path
|
95
|
+
Dir.const_set(key, path.encode(Encoding.default_external)) if path
|
114
96
|
}
|
115
97
|
|
116
98
|
# Set Dir::MYDOCUMENTS to the same as Dir::PERSONAL if undefined
|
@@ -287,10 +269,6 @@ class Dir
|
|
287
269
|
# Raises +ENOENT+ if given path does not exist, returns +false+
|
288
270
|
# if it is not a junction.
|
289
271
|
#
|
290
|
-
# Note that regardless of the encoding of the string passed in,
|
291
|
-
# +read_junction()+ will always return a result as UTF-16LE, as it's
|
292
|
-
# actually written in the reparse point.
|
293
|
-
#
|
294
272
|
# Example:
|
295
273
|
#
|
296
274
|
# Dir.mkdir('C:/from')
|
@@ -368,7 +346,7 @@ class Dir
|
|
368
346
|
jname = jname.bytes.to_a.pack('C*')
|
369
347
|
jname = jname.force_encoding("UTF-16LE")
|
370
348
|
raise "Junction name came back as #{jname}" unless jname[0..3] == "\\??\\".encode("UTF-16LE")
|
371
|
-
|
349
|
+
File.expand_path(jname[4..-1].encode(Encoding.default_external))
|
372
350
|
end
|
373
351
|
|
374
352
|
# Returns whether or not +path+ is empty. Returns false if +path+ is not
|
data/test/test_win32_dir.rb
CHANGED
@@ -25,7 +25,7 @@ class TC_Win32_Dir < Test::Unit::TestCase
|
|
25
25
|
end
|
26
26
|
|
27
27
|
test "version number is set to expected value" do
|
28
|
-
assert_equal('0.4.
|
28
|
+
assert_equal('0.4.3', Dir::VERSION)
|
29
29
|
end
|
30
30
|
|
31
31
|
test 'glob handles backslashes' do
|
@@ -72,13 +72,19 @@ class TC_Win32_Dir < Test::Unit::TestCase
|
|
72
72
|
test "read_junction works as expected with ascii characters" do
|
73
73
|
assert_nothing_raised{ Dir.create_junction(@ascii_to, @@from) }
|
74
74
|
assert_true(File.exists?(@ascii_to))
|
75
|
-
assert_equal(Dir.read_junction(@ascii_to), @@from
|
75
|
+
assert_equal(Dir.read_junction(@ascii_to), @@from)
|
76
76
|
end
|
77
77
|
|
78
78
|
test "read_junction works as expected with unicode characters" do
|
79
79
|
assert_nothing_raised{ Dir.create_junction(@unicode_to, @@from) }
|
80
80
|
assert_true(File.exists?(@unicode_to))
|
81
|
-
assert_equal(Dir.read_junction(@unicode_to), @@from
|
81
|
+
assert_equal(Dir.read_junction(@unicode_to), @@from)
|
82
|
+
end
|
83
|
+
|
84
|
+
test "read_junction with unicode characters is joinable" do
|
85
|
+
assert_nothing_raised{ Dir.create_junction(@unicode_to, @@from) }
|
86
|
+
assert_true(File.exists?(@unicode_to))
|
87
|
+
assert_nothing_raised{ File.join(Dir.read_junction(@unicode_to), 'foo') }
|
82
88
|
end
|
83
89
|
|
84
90
|
test "junction? method returns boolean value" do
|
@@ -380,6 +386,11 @@ class TC_Win32_Dir < Test::Unit::TestCase
|
|
380
386
|
assert_kind_of(String, Dir::WINDOWS)
|
381
387
|
end
|
382
388
|
|
389
|
+
test "constants are ascii_compatible?" do
|
390
|
+
assert_true(Dir::COMMON_APPDATA.encoding.ascii_compatible?)
|
391
|
+
assert_nothing_raised{ File.join(Dir::COMMON_APPDATA, 'foo') }
|
392
|
+
end
|
393
|
+
|
383
394
|
test "ffi functions are private" do
|
384
395
|
assert_not_respond_to(Dir, :SHGetFolderPathW)
|
385
396
|
end
|
data/win32-dir.gemspec
CHANGED
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: win32-dir
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
5
|
-
prerelease:
|
4
|
+
version: 0.4.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Daniel J. Berger
|
@@ -10,45 +9,42 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date: 2013-
|
12
|
+
date: 2013-07-24 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: ffi
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
17
|
requirements:
|
20
|
-
- -
|
18
|
+
- - '>='
|
21
19
|
- !ruby/object:Gem::Version
|
22
20
|
version: 1.0.0
|
23
21
|
type: :runtime
|
24
22
|
prerelease: false
|
25
23
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
24
|
requirements:
|
28
|
-
- -
|
25
|
+
- - '>='
|
29
26
|
- !ruby/object:Gem::Version
|
30
27
|
version: 1.0.0
|
31
28
|
- !ruby/object:Gem::Dependency
|
32
29
|
name: test-unit
|
33
30
|
requirement: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
31
|
requirements:
|
36
|
-
- -
|
32
|
+
- - '>='
|
37
33
|
- !ruby/object:Gem::Version
|
38
34
|
version: 2.4.0
|
39
35
|
type: :development
|
40
36
|
prerelease: false
|
41
37
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
38
|
requirements:
|
44
|
-
- -
|
39
|
+
- - '>='
|
45
40
|
- !ruby/object:Gem::Version
|
46
41
|
version: 2.4.0
|
47
|
-
description:
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
42
|
+
description: |2
|
43
|
+
The win32-dir library provides extra methods and constants for the
|
44
|
+
builtin Dir class. The constants provide a convenient way to identify
|
45
|
+
certain directories across all versions of Windows. Some methods have
|
46
|
+
been added, such as the ability to create junctions. Others have been
|
47
|
+
modified to provide a more consistent result for MS Windows.
|
52
48
|
email: djberg96@gmail.com
|
53
49
|
executables: []
|
54
50
|
extensions: []
|
@@ -71,27 +67,26 @@ files:
|
|
71
67
|
homepage: http://github.com/djberg96/win32-dir
|
72
68
|
licenses:
|
73
69
|
- Artistic 2.0
|
70
|
+
metadata: {}
|
74
71
|
post_install_message:
|
75
72
|
rdoc_options: []
|
76
73
|
require_paths:
|
77
74
|
- lib
|
78
75
|
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
-
none: false
|
80
76
|
requirements:
|
81
|
-
- -
|
77
|
+
- - '>='
|
82
78
|
- !ruby/object:Gem::Version
|
83
79
|
version: 1.9.2
|
84
80
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
-
none: false
|
86
81
|
requirements:
|
87
|
-
- -
|
82
|
+
- - '>='
|
88
83
|
- !ruby/object:Gem::Version
|
89
84
|
version: '0'
|
90
85
|
requirements: []
|
91
86
|
rubyforge_project: win32utils
|
92
|
-
rubygems_version:
|
87
|
+
rubygems_version: 2.0.3
|
93
88
|
signing_key:
|
94
|
-
specification_version:
|
89
|
+
specification_version: 4
|
95
90
|
summary: Extra constants and methods for the Dir class on Windows.
|
96
91
|
test_files:
|
97
92
|
- test/test_win32_dir.rb
|