windows-api 0.2.3 → 0.2.4
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 +12 -1
- data/MANIFEST +1 -1
- data/Rakefile +0 -2
- data/lib/windows/api.rb +26 -13
- data/test/{tc_windows_api.rb → test_windows_api.rb} +21 -7
- data/windows-api.gemspec +2 -2
- data/windows-api.gemspec~ +25 -0
- metadata +7 -5
data/CHANGES
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
= 0.2.4 - 18-Jul-2008
|
2
|
+
* Eliminated unnecessary LoadLibrary() attempts for functions that explicitly
|
3
|
+
end with an 'A' or 'W', and all MSVCRT functions, since they have no 'A'
|
4
|
+
or 'W' equivalent.
|
5
|
+
* Replaced all of the attr_reader's with a delegation scheme using Forwardable.
|
6
|
+
All Win32::API functions now delegate to the internally stored Win32::API
|
7
|
+
object instead of reimplementing them. This change also fixed a bug where
|
8
|
+
the effective_function_name method did not work properly.
|
9
|
+
* Added more tests, and fixed one assertion that was wrong (the prototype).
|
10
|
+
* Some documentation additions.
|
11
|
+
|
1
12
|
= 0.2.3 - 26-Apr-2008
|
2
13
|
* Improved API.auto_constant and API.auto_method handling for functions that
|
3
14
|
start with a lower case character or an underscore.
|
@@ -19,4 +30,4 @@
|
|
19
30
|
* Fixed a void parameter bug.
|
20
31
|
|
21
32
|
= 0.1.0 - 24-May-2007
|
22
|
-
* Initial release
|
33
|
+
* Initial release
|
data/MANIFEST
CHANGED
data/Rakefile
CHANGED
data/lib/windows/api.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
require 'win32/api'
|
2
2
|
require 'rbconfig'
|
3
|
+
require 'forwardable'
|
3
4
|
include Config
|
4
5
|
|
6
|
+
# The Windows module serves as a namespace only
|
5
7
|
module Windows
|
8
|
+
|
6
9
|
# With Microsoft Visual C++ 8 and later users should use the associated
|
7
10
|
# DLL instead of msvcrt directly, if possible.
|
8
11
|
if CONFIG['host_os'].split('_')[1]
|
@@ -17,13 +20,23 @@ module Windows
|
|
17
20
|
MSVCRT_DLL = 'msvcrt'
|
18
21
|
end
|
19
22
|
|
23
|
+
# Wrapper around the Win32::API class
|
20
24
|
class API
|
21
|
-
|
25
|
+
extend Forwardable
|
26
|
+
|
27
|
+
# The version of this library
|
28
|
+
VERSION = '0.2.4'
|
22
29
|
|
30
|
+
# Error typically raised if any of the Windows::API methods fail
|
23
31
|
class Error < RuntimeError; end
|
32
|
+
|
33
|
+
# The methods from Win32::API are delegated to the appropriate object
|
34
|
+
def_delegators(:@api, :function_name, :dll_name, :prototype)
|
35
|
+
def_delegators(:@api, :return_type, :effective_function_name)
|
24
36
|
|
25
37
|
private
|
26
38
|
|
39
|
+
# Verbose data types that can be used instead of single letters
|
27
40
|
DATA_TYPES = {
|
28
41
|
'ATOM' => 'I',
|
29
42
|
'BOOL' => 'B',
|
@@ -275,11 +288,7 @@ module Windows
|
|
275
288
|
@auto_unicode = bool
|
276
289
|
end
|
277
290
|
|
278
|
-
|
279
|
-
attr_reader :dll_name
|
280
|
-
attr_reader :prototype
|
281
|
-
attr_reader :return_type
|
282
|
-
|
291
|
+
|
283
292
|
# call-seq:
|
284
293
|
# API.new(func, proto='V', rtype='L', dll='kernel32')
|
285
294
|
#
|
@@ -335,20 +344,24 @@ module Windows
|
|
335
344
|
api_w = nil
|
336
345
|
|
337
346
|
# If the auto_unicode option is set, and the func is not already
|
338
|
-
# an explicit ANSI or
|
347
|
+
# an explicit ANSI or Wide function name, generate Win32::API
|
339
348
|
# objects for those functions as well. Ignore errors because not
|
340
|
-
# all functions have explicit ANSI or
|
349
|
+
# all functions have explicit ANSI or Wide character implementations.
|
350
|
+
#
|
351
|
+
# This entire bit of logic is skipped if the DLL is msvcrt, since
|
352
|
+
# msvcrt functions never have explicit ANSI or Wide character
|
353
|
+
# versions.
|
341
354
|
#
|
342
|
-
if Windows::API.auto_unicode
|
355
|
+
if Windows::API.auto_unicode && dll.downcase != 'msvcrt'
|
343
356
|
begin
|
344
|
-
|
357
|
+
unless ['A', 'W'].include?(func[-1].chr)
|
345
358
|
api_a = Win32::API.new("#{func}A", proto, rtype, dll)
|
346
359
|
end
|
347
360
|
rescue RuntimeError
|
348
361
|
end
|
349
|
-
|
362
|
+
|
350
363
|
begin
|
351
|
-
|
364
|
+
unless ['W', 'A'].include?(func[-1].chr)
|
352
365
|
api_w = Win32::API.new("#{func}W", proto, rtype, dll)
|
353
366
|
end
|
354
367
|
rescue RuntimeError
|
@@ -478,7 +491,7 @@ module Windows
|
|
478
491
|
def call(*args)
|
479
492
|
@api.call(*args)
|
480
493
|
end
|
481
|
-
|
494
|
+
|
482
495
|
private
|
483
496
|
|
484
497
|
# Get a module's namespace. This is basically the equivalent of
|
@@ -1,5 +1,5 @@
|
|
1
1
|
############################################################################
|
2
|
-
#
|
2
|
+
# test_windows_api.rb
|
3
3
|
#
|
4
4
|
# Test case for the Windows::API class. You should run this as Rake task,
|
5
5
|
# i.e. 'rake test', instead of running it directly.
|
@@ -36,11 +36,11 @@ module Windows
|
|
36
36
|
API.auto_namespace = 'Windows::Baz'
|
37
37
|
API.auto_constant = true
|
38
38
|
API.auto_method = true
|
39
|
-
API.auto_unicode = false
|
40
39
|
|
41
|
-
API.new('strstr', 'PP', 'P', 'msvcrt')
|
42
|
-
API.new('_umask', 'I', 'I', 'msvcrt')
|
43
|
-
API.new('waveOutGetNumDevs', 'V', 'I', 'winmm')
|
40
|
+
$strstr = API.new('strstr', 'PP', 'P', 'msvcrt')
|
41
|
+
$umask = API.new('_umask', 'I', 'I', 'msvcrt')
|
42
|
+
$wave = API.new('waveOutGetNumDevs', 'V', 'I', 'winmm')
|
43
|
+
$read = API.new('ReadDirectoryChangesW', 'LPLILPPP', 'B') # No ANSI equivalent
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
@@ -55,7 +55,7 @@ class TC_Windows_API < Test::Unit::TestCase
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def test_version
|
58
|
-
assert_equal('0.2.
|
58
|
+
assert_equal('0.2.4', API::VERSION)
|
59
59
|
end
|
60
60
|
|
61
61
|
def test_full_data_types
|
@@ -75,6 +75,12 @@ class TC_Windows_API < Test::Unit::TestCase
|
|
75
75
|
assert_not_nil(Windows::Baz::WaveOutGetNumDevs)
|
76
76
|
end
|
77
77
|
|
78
|
+
def test_explicit_wide_function_only
|
79
|
+
assert_not_nil(Windows::Baz::ReadDirectoryChangesW)
|
80
|
+
assert_equal(false, Windows::Baz.constants.include?('ReadDirectoryChanges'))
|
81
|
+
assert_equal(false, Windows::Baz.constants.include?('ReadDirectoryChangesA'))
|
82
|
+
end
|
83
|
+
|
78
84
|
def test_lower_case_auto_methods
|
79
85
|
assert_respond_to(self, :strstr)
|
80
86
|
assert_respond_to(self, :umask)
|
@@ -126,13 +132,21 @@ class TC_Windows_API < Test::Unit::TestCase
|
|
126
132
|
|
127
133
|
def test_prototype
|
128
134
|
assert_respond_to($test_method, :prototype)
|
129
|
-
assert_equal('
|
135
|
+
assert_equal(['P', 'P'], $test_method.prototype)
|
130
136
|
end
|
131
137
|
|
132
138
|
def test_return_type
|
133
139
|
assert_respond_to($test_method, :return_type)
|
134
140
|
assert_equal('L', $test_method.return_type)
|
135
141
|
end
|
142
|
+
|
143
|
+
def test_effective_function_name
|
144
|
+
assert_respond_to($test_method, :effective_function_name)
|
145
|
+
assert_equal('GetCurrentDirectoryA', $test_method.effective_function_name)
|
146
|
+
assert_equal('strstr', $strstr.effective_function_name)
|
147
|
+
assert_equal('waveOutGetNumDevs', $wave.effective_function_name)
|
148
|
+
assert_equal('ReadDirectoryChangesW', $read.effective_function_name)
|
149
|
+
end
|
136
150
|
|
137
151
|
def teardown
|
138
152
|
@buf = nil
|
data/windows-api.gemspec
CHANGED
@@ -2,7 +2,7 @@ require "rubygems"
|
|
2
2
|
|
3
3
|
spec = Gem::Specification.new do |gem|
|
4
4
|
gem.name = "windows-api"
|
5
|
-
gem.version = "0.2.
|
5
|
+
gem.version = "0.2.4"
|
6
6
|
gem.author = "Daniel J. Berger"
|
7
7
|
gem.email = "djberg96@gmail.com"
|
8
8
|
gem.homepage = "http://www.rubyforge.org/projects/win32utils"
|
@@ -10,7 +10,7 @@ spec = Gem::Specification.new do |gem|
|
|
10
10
|
gem.platform = Gem::Platform::RUBY
|
11
11
|
gem.summary = "An easier way to create methods using Win32API"
|
12
12
|
gem.description = "An easier way to create methods using Win32API"
|
13
|
-
gem.test_file = "test/
|
13
|
+
gem.test_file = "test/test_windows_api.rb"
|
14
14
|
gem.has_rdoc = true
|
15
15
|
gem.files = Dir["lib/windows/*.rb"] + Dir["test/*"] + Dir["[A-Z]*"]
|
16
16
|
gem.files.reject! { |fn| fn.include? "CVS" }
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
|
3
|
+
spec = Gem::Specification.new do |gem|
|
4
|
+
gem.name = "windows-api"
|
5
|
+
gem.version = "0.2.4"
|
6
|
+
gem.author = "Daniel J. Berger"
|
7
|
+
gem.email = "djberg96@gmail.com"
|
8
|
+
gem.homepage = "http://www.rubyforge.org/projects/win32utils"
|
9
|
+
gem.rubyforge_project = "win32utils"
|
10
|
+
gem.platform = Gem::Platform::RUBY
|
11
|
+
gem.summary = "An easier way to create methods using Win32API"
|
12
|
+
gem.description = "An easier way to create methods using Win32API"
|
13
|
+
gem.test_file = "test/tc_windows_api.rb"
|
14
|
+
gem.has_rdoc = true
|
15
|
+
gem.files = Dir["lib/windows/*.rb"] + Dir["test/*"] + Dir["[A-Z]*"]
|
16
|
+
gem.files.reject! { |fn| fn.include? "CVS" }
|
17
|
+
gem.require_path = "lib"
|
18
|
+
gem.extra_rdoc_files = ["README", "CHANGES", "MANIFEST"]
|
19
|
+
gem.add_dependency("win32-api", ">= 1.0.5")
|
20
|
+
end
|
21
|
+
|
22
|
+
if $0 == __FILE__
|
23
|
+
Gem.manage_gems
|
24
|
+
Gem::Builder.new(spec).build
|
25
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: windows-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel J. Berger
|
@@ -9,11 +9,12 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-07-19 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: win32-api
|
17
|
+
type: :runtime
|
17
18
|
version_requirement:
|
18
19
|
version_requirements: !ruby/object:Gem::Requirement
|
19
20
|
requirements:
|
@@ -34,7 +35,7 @@ extra_rdoc_files:
|
|
34
35
|
files:
|
35
36
|
- lib/windows/api.rb
|
36
37
|
- test/CVS
|
37
|
-
- test/
|
38
|
+
- test/test_windows_api.rb
|
38
39
|
- CHANGES
|
39
40
|
- CVS
|
40
41
|
- lib
|
@@ -43,6 +44,7 @@ files:
|
|
43
44
|
- README
|
44
45
|
- test
|
45
46
|
- windows-api.gemspec
|
47
|
+
- windows-api.gemspec~
|
46
48
|
has_rdoc: true
|
47
49
|
homepage: http://www.rubyforge.org/projects/win32utils
|
48
50
|
post_install_message:
|
@@ -65,9 +67,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
65
67
|
requirements: []
|
66
68
|
|
67
69
|
rubyforge_project: win32utils
|
68
|
-
rubygems_version: 1.
|
70
|
+
rubygems_version: 1.2.0
|
69
71
|
signing_key:
|
70
72
|
specification_version: 2
|
71
73
|
summary: An easier way to create methods using Win32API
|
72
74
|
test_files:
|
73
|
-
- test/
|
75
|
+
- test/test_windows_api.rb
|