com 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/com.rb CHANGED
@@ -6,14 +6,6 @@ WIN32OLE.codepage = WIN32OLE::CP_UTF8
6
6
  # COM is an object-oriented wrapper around WIN32OLE. COM makes it easy to add
7
7
  # behavior to WIN32OLE objects, making them easier to work with from Ruby.
8
8
  module COM
9
- autoload :Error, 'com/error'
10
- autoload :Events, 'com/events'
11
- autoload :Instantiable, 'com/instantiable'
12
- autoload :Object, 'com/object'
13
- autoload :PatternError, 'com/patternerror'
14
- autoload :Version, 'com/version'
15
- autoload :Wrapper, 'com/wrapper'
16
-
17
9
  class << self
18
10
  # Gets the iconv character set equivalent of the current COM code page.
19
11
  #
@@ -59,15 +51,24 @@ module COM
59
51
  end
60
52
  end
61
53
 
62
- private
63
-
64
54
  # @private
65
55
  COMCodePageToIconvCharset = {
66
56
  WIN32OLE::CP_UTF8 => 'UTF-8'
67
57
  }.freeze
68
- end
69
58
 
70
- require 'com/methodinvocationerror'
71
- require 'com/pathname'
72
- require 'com/standarderror'
73
- require 'com/win32ole'
59
+ %w'com/error.rb
60
+ com/object.rb
61
+ com/patternerror.rb
62
+
63
+ com/events.rb
64
+ com/instantiable.rb
65
+ com/methodinvocationerror.rb
66
+ com/pathname.rb
67
+ com/standarderror.rb
68
+ com/win32ole.rb
69
+ com/wrapper.rb'.each do |file|
70
+ load File.expand_path('../%s' % file, __FILE__)
71
+ end
72
+
73
+ autoload :Version, 'com/version.rb'
74
+ end
@@ -64,6 +64,13 @@ class COM::Instantiable < COM::Object
64
64
  @constants
65
65
  end
66
66
 
67
+ # Typelib to use for loading constants, if it can’t be determined
68
+ # automatically.
69
+ def typelib(typelib = nil)
70
+ @typelib = typelib if typelib
71
+ @typelib ||= nil
72
+ end
73
+
67
74
  # Loads constants associated with COM object _com_. This is an internal
68
75
  # method that shouldn’t be called outside of this class.
69
76
  #
@@ -72,7 +79,7 @@ class COM::Instantiable < COM::Object
72
79
  def load_constants(com)
73
80
  return if constants_loaded?
74
81
  modul = nesting[-2]
75
- com.load_constants modul
82
+ com.load_constants modul, typelib
76
83
  @constants_loaded = true
77
84
  end
78
85
 
@@ -9,7 +9,7 @@ class COM::MethodInvocationError < COM::Error
9
9
  \s+in\s+([^\n]+)\n
10
10
  \s*([^\n]+)\n
11
11
  \s*HRESULT\serror\scode:0x([0-9a-fA-F]+)[^\n]*\n
12
- \s*(.+)$}xu
12
+ \s*(.+)$}x
13
13
 
14
14
  class << self
15
15
  # This is an internal method used by COM::Error.
@@ -11,7 +11,7 @@ module COM::StandardError
11
11
  Class.new(COM::Error) do
12
12
  extend COM::PatternError
13
13
 
14
- pattern %r{^\s*(.*)\n\s*HRESULT\serror\scode:(0x(?i:#{code.to_s(16)}))}xu
14
+ pattern %r{^\s*(.*)\n\s*HRESULT\serror\scode:(0x(?i:#{code.to_s(16)}))}x
15
15
 
16
16
  (class << self; self; end).class_eval do
17
17
  define_method :replace do |error|
@@ -44,7 +44,7 @@ module COM::HResultError
44
44
  COM.const_set error, Class.new(COM::Error){
45
45
  extend COM::PatternError
46
46
 
47
- pattern %r{^\s*(.*)\n\s*HRESULT\serror\scode:(0x(?i:#{code.to_s(16)}))}xu
47
+ pattern %r{^\s*(.*)\n\s*HRESULT\serror\scode:(0x(?i:#{code.to_s(16)}))}x
48
48
 
49
49
  (class << self; self; end).class_eval do
50
50
  define_method :replace do |e|
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  module COM
4
- Version = '0.3.1'
4
+ Version = '0.4.0'
5
5
  end
@@ -42,13 +42,18 @@ class COM::Wrapper
42
42
  raise COM::Wrapper.raise_in('%s=' % property, e)
43
43
  end
44
44
 
45
- def load_constants(into)
45
+ def load_constants(into, typelib = nil)
46
46
  saved_verbose, $VERBOSE = $VERBOSE, nil
47
47
  begin
48
48
  begin
49
49
  WIN32OLE.const_load @ole, into
50
50
  rescue RuntimeError
51
- WIN32OLE_TYPE.enums(program_id).each do |enum|
51
+ begin
52
+ @ole.ole_typelib
53
+ rescue RuntimeError
54
+ raise unless typelib
55
+ WIN32OLE_TYPELIB.new(typelib)
56
+ end.ole_types.select{ |e| e.visible? and e.ole_type == 'Enum' }.each do |enum|
52
57
  enum.constants.each do |constant|
53
58
  into.const_set constant.const_name, constant.value
54
59
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: com
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-17 00:00:00.000000000 Z
12
+ date: 2012-06-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: lookout
16
- requirement: &2865252 !ruby/object:Gem::Requirement
16
+ requirement: &15646116 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '2.0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2865252
24
+ version_requirements: *15646116
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: yard
27
- requirement: &2864676 !ruby/object:Gem::Requirement
27
+ requirement: &15645576 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: 0.6.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2864676
35
+ version_requirements: *15645576
36
36
  description: ! "# COM #\n\nCOM is an object-oriented wrapper around WIN32OLE. COM
37
37
  makes it easy to add\nbehavior to WIN32OLE objects, making them easier to work with
38
38
  from Ruby.\n\n\n## Usage ##\n\nUsing COM is rather straightforward. There’s basically