windows-api 0.2.2 → 0.2.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.
data/CHANGES CHANGED
@@ -1,3 +1,7 @@
1
+ = 0.2.3 - 26-Apr-2008
2
+ * Improved API.auto_constant and API.auto_method handling for functions that
3
+ start with a lower case character or an underscore.
4
+
1
5
  = 0.2.2 - 17-Apr-2008
2
6
  * Added the Windows::MSVCRT_DLL constant so that users can specify MSVCRT_DLL
3
7
  for the DLL name and it will do the right thing, instead of having to worry
data/README CHANGED
@@ -33,6 +33,10 @@
33
33
  module Windows
34
34
  module Foo
35
35
  API.auto_namespace = 'Windows::Foo'
36
+ API.auto_constant = true
37
+ API.auto_method = true
38
+ API.auto_unicode = true
39
+
36
40
  API.new('GetComputerName', 'PP', 'B')
37
41
  end
38
42
  end
@@ -41,7 +45,7 @@
41
45
  module Windows
42
46
  module Foo
43
47
  GetComputerName = Win32API.new('kernel32', 'GetComputerName', 'PP', 'I')
44
- GetComputerNameA = Win32API.new('kernel32', GetComputerNameA', 'PP', 'I')
48
+ GetComputerNameA = Win32API.new('kernel32', 'GetComputerNameA', 'PP', 'I')
45
49
  GetComputerNameW = Win32API.new('kernel32', 'GetComputerNameW', 'PP', 'I')
46
50
 
47
51
  def GetComputerName(p1, p2)
@@ -62,9 +66,8 @@
62
66
  * Automatic constant generation.
63
67
  * Automatic definition of ANSI and Unicode method wrappers, including
64
68
  special handling for boolean methods.
65
- * Most arguments to the constructor are optional, with sensible defaults.
66
- * Four attributes added to API objects - dll_name, function_name, prototype
67
- and return_type.
69
+ * Ability to use more familiar Windows data types, e.g. DWORD.
70
+ * Automatic handling of msvcrt vs msvcrXX via MSVCRT_DLL constant.
68
71
 
69
72
  = More documentation
70
73
  See the RDoc documentation, which should have been automatically generated
data/lib/windows/api.rb CHANGED
@@ -18,7 +18,7 @@ module Windows
18
18
  end
19
19
 
20
20
  class API
21
- VERSION = '0.2.2'
21
+ VERSION = '0.2.3'
22
22
 
23
23
  class Error < RuntimeError; end
24
24
 
@@ -354,9 +354,12 @@ module Windows
354
354
  rescue RuntimeError
355
355
  end
356
356
  end
357
-
357
+
358
+ func_upper = nil
359
+
358
360
  # Automatically define a constant matching the function name if the
359
- # auto_constant option is set.
361
+ # auto_constant option is set. Lower case method names will have a
362
+ # capitalized equivalent created, e.g. Memcpy for memcpy, etc.
360
363
  #
361
364
  if Windows::API.auto_constant && Windows::API.auto_namespace
362
365
  if Windows::API.auto_namespace != 'Windows'
@@ -364,8 +367,18 @@ module Windows
364
367
  else
365
368
  namespace = Windows::API.auto_namespace
366
369
  end
367
-
368
- namespace.const_set(func, @api)
370
+
371
+ # Convert e.g. 'strstr' to 'Strstr' as an equivalent constant
372
+ if ('A'..'Z').include?(func[0].chr)
373
+ namespace.const_set(func, @api)
374
+ else
375
+ func_upper = func.dup
376
+ if func_upper[0].chr == '_'
377
+ func_upper = func_upper[1, func_upper.length]
378
+ end
379
+ func_upper[0, 1] = func_upper[0].chr.capitalize
380
+ namespace.const_set(func_upper, @api)
381
+ end
369
382
 
370
383
  # Automatically define the explicit ANSI and Unicode functions
371
384
  # as constants as well, if appropriate.
@@ -398,18 +411,24 @@ module Windows
398
411
  end
399
412
  end
400
413
 
414
+ # Use the upper case function equivalent if defined
415
+ call_func = func_upper || func
416
+
417
+ # Remove leading underscores from msvcrt functions
418
+ func = func[1, func.length] if func[0].chr == '_'
419
+
401
420
  if @boolean
402
421
  string = <<-EOC
403
422
  module #{Windows::API.auto_namespace}
404
423
  def #{func}(#{proto})
405
- #{func}.call(#{proto}) != 0
424
+ #{call_func}.call(#{proto}) != 0
406
425
  end
407
426
  EOC
408
427
 
409
428
  if api_a
410
429
  string << %Q{
411
430
  def #{func}A(#{proto})
412
- #{func}A.call(#{proto}) != 0
431
+ #{call_func}A.call(#{proto}) != 0
413
432
  end
414
433
  }
415
434
  end
@@ -417,7 +436,7 @@ module Windows
417
436
  if api_w
418
437
  string << %Q{
419
438
  def #{func}W(#{proto})
420
- #{func}W.call(#{proto}) != 0
439
+ #{call_func}W.call(#{proto}) != 0
421
440
  end
422
441
  }
423
442
  end
@@ -425,16 +444,16 @@ module Windows
425
444
  string << 'end'
426
445
  else
427
446
  string = <<-EOC
428
- module #{Windows::API.auto_namespace}
447
+ module #{Windows::API.auto_namespace}
429
448
  def #{func}(#{proto})
430
- #{func}.call(#{proto})
449
+ #{call_func}.call(#{proto})
431
450
  end
432
451
  EOC
433
-
452
+
434
453
  if api_a
435
454
  string << %Q{
436
455
  def #{func}A(#{proto})
437
- #{func}A.call(#{proto})
456
+ #{call_func}A.call(#{proto})
438
457
  end
439
458
  }
440
459
  end
@@ -442,7 +461,7 @@ module Windows
442
461
  if api_w
443
462
  string << %Q{
444
463
  def #{func}W(#{proto})
445
- #{func}W.call(#{proto})
464
+ #{call_func}W.call(#{proto})
446
465
  end
447
466
  }
448
467
  end
@@ -31,19 +31,31 @@ module Windows
31
31
  API.auto_method = true
32
32
  $bar_method = API.new('GetUserName', 'PP', 'I', 'advapi32')
33
33
  end
34
+
35
+ module Baz
36
+ API.auto_namespace = 'Windows::Baz'
37
+ API.auto_constant = true
38
+ API.auto_method = true
39
+ API.auto_unicode = false
40
+
41
+ API.new('strstr', 'PP', 'P', 'msvcrt')
42
+ API.new('_umask', 'I', 'I', 'msvcrt')
43
+ API.new('waveOutGetNumDevs', 'V', 'I', 'winmm')
44
+ end
34
45
  end
35
46
 
36
47
  class TC_Windows_API < Test::Unit::TestCase
37
48
  include Windows::Test
38
49
  include Windows::Foo
39
50
  include Windows::Bar
51
+ include Windows::Baz
40
52
 
41
53
  def setup
42
54
  @buf = 0.chr * 256
43
55
  end
44
56
 
45
57
  def test_version
46
- assert_equal('0.2.2', API::VERSION)
58
+ assert_equal('0.2.3', API::VERSION)
47
59
  end
48
60
 
49
61
  def test_full_data_types
@@ -53,7 +65,21 @@ class TC_Windows_API < Test::Unit::TestCase
53
65
  end
54
66
 
55
67
  def test_msvcrt_constant
56
- assert_equal(true, ['msvcrt', 'msvcr80'].include?(Windows::MSVCRT))
68
+ assert_equal(true, ['msvcrt', 'msvcr80'].include?(Windows::MSVCRT_DLL))
69
+ end
70
+
71
+ # Validate that functions like 'strstr' get an uppercase constant like 'Strstr'
72
+ def test_lower_case_to_capitalized_constant
73
+ assert_not_nil(Windows::Baz::Strstr)
74
+ assert_not_nil(Windows::Baz::Umask)
75
+ assert_not_nil(Windows::Baz::WaveOutGetNumDevs)
76
+ end
77
+
78
+ def test_lower_case_auto_methods
79
+ assert_respond_to(self, :strstr)
80
+ assert_respond_to(self, :umask)
81
+ assert_respond_to(self, :waveOutGetNumDevs)
82
+ assert_equal('llo', strstr('hello', 'l'))
57
83
  end
58
84
 
59
85
  def test_auto_unicode
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.2"
5
+ gem.version = "0.2.3"
6
6
  gem.author = "Daniel J. Berger"
7
7
  gem.email = "djberg96@gmail.com"
8
8
  gem.homepage = "http://www.rubyforge.org/projects/win32utils"
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.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel J. Berger
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-04-17 00:00:00 -06:00
12
+ date: 2008-04-26 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency