virtualbox-com 0.9.9 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/LICENSE +339 -19
  2. data/examples/simple.rb +2 -0
  3. data/ext/virtualbox-com/4.1/extconf.rb +4 -0
  4. data/ext/virtualbox-com/4.1/generated.inc +17345 -0
  5. data/ext/virtualbox-com/4.1/vbox.c +858 -0
  6. data/ext/virtualbox-com/4.2/extconf.rb +4 -0
  7. data/ext/virtualbox-com/4.2/generated.inc +19751 -0
  8. data/ext/virtualbox-com/4.2/vbox.c +858 -0
  9. data/ext/virtualbox-com/helpers.h +62 -0
  10. data/ext/virtualbox-com/loader/extconf.rb +3 -0
  11. data/ext/virtualbox-com/loader/vbox-loader.c +187 -0
  12. data/ext/virtualbox-com/types.h +34 -0
  13. data/ext/virtualbox-com/vbox.c +858 -0
  14. data/lib/virtualbox/com.rb +4 -26
  15. data/lib/virtualbox/com/{abstract_enum.rb → abstracts.rb} +22 -18
  16. data/lib/virtualbox/com/exceptions.rb +29 -3
  17. data/lib/virtualbox/com/model/4.1-generated.rb +2141 -0
  18. data/lib/virtualbox/com/model/4.2-generated.rb +141 -432
  19. data/lib/virtualbox/com/model/4.2.rb +4 -4
  20. data/lib/virtualbox/com/util.rb +2 -1
  21. data/lib/virtualbox/com/version.rb +1 -1
  22. data/lib/virtualbox/com/xpcomc-ffi.rb +5 -19
  23. data/lib/virtualbox/com/xpcomc-ffi/abstracts.rb +103 -0
  24. data/lib/virtualbox/com/{iid.rb → xpcomc-ffi/iid.rb} +18 -0
  25. data/lib/virtualbox/com/xpcomc-ffi/lib.rb +6 -0
  26. data/lib/virtualbox/com/xpcomc-ffi/model-types.rb +1 -0
  27. data/lib/virtualbox/com/xpcomc-native.rb +8 -0
  28. data/scripts/abstracts.rb +84 -0
  29. data/scripts/sig.rb +201 -0
  30. data/scripts/spec.rb +56 -0
  31. data/scripts/to_c.rb +157 -0
  32. data/scripts/xidl-conv.rb +110 -50
  33. data/virtualbox-com.gemspec +18 -11
  34. metadata +49 -47
  35. data/.gitignore +0 -9
  36. data/README.md +0 -89
  37. data/Rakefile +0 -8
  38. data/lib/virtualbox/com/abstract_interface.rb +0 -144
  39. data/lib/virtualbox/com/abstract_model.rb +0 -14
metadata CHANGED
@@ -1,33 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: virtualbox-com
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.9
4
+ version: 0.10.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Stephane D'Alu
9
- - Mitchell Hashimoto
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-06-14 00:00:00.000000000 Z
12
+ date: 2013-07-12 00:00:00.000000000 Z
14
13
  dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: ffi
17
- requirement: !ruby/object:Gem::Requirement
18
- none: false
19
- requirements:
20
- - - '>='
21
- - !ruby/object:Gem::Version
22
- version: '0'
23
- type: :runtime
24
- prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
- requirements:
28
- - - '>='
29
- - !ruby/object:Gem::Version
30
- version: '0'
31
14
  - !ruby/object:Gem::Dependency
32
15
  name: rake
33
16
  requirement: !ruby/object:Gem::Requirement
@@ -60,43 +43,59 @@ dependencies:
60
43
  - - '>='
61
44
  - !ruby/object:Gem::Version
62
45
  version: '0'
63
- description: Low level VirtualBox interraction using pure ruby
46
+ description: Low level VirtualBox binding using native code
64
47
  email:
65
48
  - stephane.dalu@gmail.com
66
- - mitchell.hashimoto@gmail.com
67
49
  executables: []
68
- extensions: []
50
+ extensions:
51
+ - ext/virtualbox-com/loader/extconf.rb
52
+ - ext/virtualbox-com/4.2/extconf.rb
53
+ - ext/virtualbox-com/4.1/extconf.rb
69
54
  extra_rdoc_files: []
70
55
  files:
71
- - .gitignore
72
- - Gemfile
73
56
  - LICENSE
74
- - README.md
75
- - Rakefile
57
+ - Gemfile
58
+ - virtualbox-com.gemspec
59
+ - scripts/spec.rb
60
+ - scripts/sig.rb
61
+ - scripts/xidl-conv.rb
62
+ - scripts/to_c.rb
63
+ - scripts/abstracts.rb
76
64
  - examples/simple.rb
65
+ - ext/virtualbox-com/4.1/vbox.c
66
+ - ext/virtualbox-com/loader/vbox-loader.c
67
+ - ext/virtualbox-com/vbox.c
68
+ - ext/virtualbox-com/4.2/vbox.c
69
+ - ext/virtualbox-com/types.h
70
+ - ext/virtualbox-com/helpers.h
71
+ - ext/virtualbox-com/4.1/extconf.rb
72
+ - ext/virtualbox-com/loader/extconf.rb
73
+ - ext/virtualbox-com/4.2/extconf.rb
74
+ - ext/virtualbox-com/4.1/generated.inc
75
+ - ext/virtualbox-com/4.2/generated.inc
77
76
  - lib/virtualbox-com.rb
78
77
  - lib/virtualbox/com.rb
79
- - lib/virtualbox/com/abstract_enum.rb
80
- - lib/virtualbox/com/abstract_interface.rb
81
- - lib/virtualbox/com/abstract_model.rb
82
- - lib/virtualbox/com/exceptions.rb
83
- - lib/virtualbox/com/iid.rb
84
- - lib/virtualbox/com/model/4.2-generated.rb
85
- - lib/virtualbox/com/model/4.2.rb
86
- - lib/virtualbox/com/util.rb
78
+ - lib/virtualbox/com/abstracts.rb
87
79
  - lib/virtualbox/com/version.rb
88
- - lib/virtualbox/com/xpcomc-ffi.rb
89
- - lib/virtualbox/com/xpcomc-ffi/binding.rb
90
- - lib/virtualbox/com/xpcomc-ffi/implementer.rb
80
+ - lib/virtualbox/com/util.rb
81
+ - lib/virtualbox/com/xpcomc-ffi/iid.rb
91
82
  - lib/virtualbox/com/xpcomc-ffi/lib.rb
92
- - lib/virtualbox/com/xpcomc-ffi/model-types.rb
93
- - lib/virtualbox/com/xpcomc-ffi/sig.rb
94
- - lib/virtualbox/com/xpcomc-ffi/spec.rb
95
83
  - lib/virtualbox/com/xpcomc-ffi/xpcomc-vbox.rb
96
- - scripts/xidl-conv.rb
97
- - virtualbox-com.gemspec
84
+ - lib/virtualbox/com/xpcomc-ffi/spec.rb
85
+ - lib/virtualbox/com/xpcomc-ffi/abstracts.rb
86
+ - lib/virtualbox/com/xpcomc-ffi/sig.rb
87
+ - lib/virtualbox/com/xpcomc-ffi/model-types.rb
88
+ - lib/virtualbox/com/xpcomc-ffi/binding.rb
89
+ - lib/virtualbox/com/xpcomc-ffi/implementer.rb
90
+ - lib/virtualbox/com/exceptions.rb
91
+ - lib/virtualbox/com/model/4.2.rb
92
+ - lib/virtualbox/com/model/4.1-generated.rb
93
+ - lib/virtualbox/com/model/4.2-generated.rb
94
+ - lib/virtualbox/com/xpcomc-native.rb
95
+ - lib/virtualbox/com/xpcomc-ffi.rb
98
96
  homepage: http://github.com/sdalu/virtualbox-com
99
- licenses: []
97
+ licenses:
98
+ - GPL-2
100
99
  post_install_message:
101
100
  rdoc_options: []
102
101
  require_paths:
@@ -109,17 +108,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
109
108
  version: '0'
110
109
  segments:
111
110
  - 0
112
- hash: -4510576013779738694
111
+ hash: -3820670781565777041
113
112
  required_rubygems_version: !ruby/object:Gem::Requirement
114
113
  none: false
115
114
  requirements:
116
115
  - - '>='
117
116
  - !ruby/object:Gem::Version
118
- version: 1.3.6
117
+ version: '0'
118
+ segments:
119
+ - 0
120
+ hash: -3820670781565777041
119
121
  requirements: []
120
- rubyforge_project: virtualbox-com
122
+ rubyforge_project:
121
123
  rubygems_version: 1.8.25
122
124
  signing_key:
123
125
  specification_version: 3
124
- summary: Low level VirtualBox interraction using pure ruby
126
+ summary: Low level VirtualBox binding
125
127
  test_files: []
data/.gitignore DELETED
@@ -1,9 +0,0 @@
1
- doc/*
2
- .yardoc/*
3
- pkg/*
4
- test/coverage/*
5
- .bundle/*
6
- vendor/*
7
- Gemfile.lock
8
- test.rb
9
- *.rbc
data/README.md DELETED
@@ -1,89 +0,0 @@
1
- # VirtualBox-Com Ruby Gem
2
-
3
- The `virtualbox-COM` ruby gem is a library which focus on the
4
- direct mapping of the VirtualBox API and allows anyone to control
5
- VirtualBox from ruby code! Create, destroy, start, stop, suspend, and
6
- resume virtual machines. Also list virtual machines, list hard
7
- drives, network devices, etc.
8
-
9
- This is a simplified version (focusing on the VirtualBox API) of the
10
- unmaintained [virtualbox](https://github.com/mitchellh/virtualbox) gem
11
- by [Mitchell Hashimoto](https://github.com/mitchellh) from which
12
- part of this code belongs.
13
-
14
- If you need a high level API take a look at
15
- [ruby-virtualbox](https://github.com/sdalu/ruby-virtualbox) which
16
- rely on this gem but provide a more rubyish interface.
17
-
18
-
19
- ## Installation and Requirements
20
-
21
- First you need to install [VirtualBox](http://www.virtualbox.org/)
22
- which is available for Windows, Linux, and OS X. After installation,
23
- install the gem:
24
-
25
- sudo gem install virtualbox-com
26
-
27
- The gem uses the native COM interface which VirtualBox provides to
28
- communicate with it. The gem uses Ruby-FFI to talk to the VirtualBox
29
- dynamic library, and all the mapping as been generated from
30
- the `VirtualBox.xidl`.
31
-
32
- No configuration should be necessary to use this gem, but if
33
- the dynamic library is not found, you can set the environment
34
- variable `VBOX_APP_HOME` to the full library path.
35
-
36
-
37
- ## API Documentation
38
-
39
- You can refer to the [VirtualBox SDK](https://www.virtualbox.org/sdkref/annotated.html)
40
- knowning that in this gem
41
- * classes are not prefixed with the `I` (`IMachine` => `Machine`)
42
- * methods have been uncamelized (`canShowConsoleWindow` => `can_show_console_window`)
43
- * when calling a method you only specify the in parameters, all the out (including the default return)
44
- are being returned in an array if there is more than one, directly otherwise
45
-
46
-
47
- ## Basic Usage
48
- require 'virtualbox-com'
49
-
50
- lib = VirtualBox::COM
51
-
52
- lib.virtualbox.machines.each {|vm|
53
- puts "%s: %s" % [ vm.bame, vm.state ]
54
- }
55
-
56
- You can find more examples in the [`examples`](examples) directory
57
-
58
-
59
- ## Reporting Bugs or Feature Requests
60
-
61
- Please use the [issue tracker](https://github.com/sdalu/virtualbox-com/issues).
62
-
63
-
64
- ## TODO
65
-
66
- Improve documentation, re-implement a test-suite
67
-
68
-
69
- ## Contributing
70
-
71
- If you'd like to contribute to VirtualBox, the first step to developing is to
72
- clone this repo, get [bundler](http://github.com/carlhuda/bundler) if you
73
- don't have it already, and do the following:
74
-
75
- bundle install --relock
76
- rake
77
-
78
- This will run the test suite, which should come back all green! Then
79
- you're good to go!
80
-
81
-
82
- ## Special Thanks
83
-
84
- These folks went above and beyond with contributions to the virtualbox gem, and
85
- for that, I have to say "thanks!"
86
-
87
- * [Mitchell Hashimoto](https://github.com/mitchellh),
88
- [Kieran Pilkington](https://github.com/KieranP),
89
- [Aleksey Palazhchenko](https://github.com/AlekSi)
data/Rakefile DELETED
@@ -1,8 +0,0 @@
1
- # -*- ruby -*-
2
- require "rbconfig"
3
- require "rubygems"
4
- require "bundler/setup"
5
-
6
- Bundler::GemHelper.install_tasks
7
-
8
-
@@ -1,144 +0,0 @@
1
- require_relative "abstract_model"
2
-
3
- module VirtualBox
4
- module COM
5
-
6
- #
7
- # # Defining an Interface
8
- #
9
- # Defining an interface is done by subclassing AbstractInterface and
10
- # using the provided class methods to define the COM methods and
11
- # properties. A small example class is shown below:
12
- #
13
- # class Time < AbstractInterface
14
- # function :now, [[:out, :uint]]
15
- # property :hour, :uint
16
- # end
17
- #
18
- # # Accessing an Interface
19
- #
20
- #
21
- # # Assume `time` was retrieved already
22
- # puts time.foo.to_s
23
- # time.hour = 20
24
- # x = time.now
25
- #
26
- # The above example shows how the properties and functions can be used
27
- # with a given interface.
28
- #
29
- class AbstractInterface < AbstractModel
30
- attr_reader :implementer
31
-
32
- class << self
33
-
34
- # Extends the current model with another one.
35
- # Note that redefining functions or properties is not supported.
36
- def extends(model)
37
- Model.get(model).members.each do |spec|
38
- if h.include?(spec.name)
39
- raise "redefining of #{spec.name} is not supported"
40
- end
41
- h[spec.name] = spec
42
- end
43
- rescue ModelNotFoundException
44
- raise "trying to extend an unknown model (#{model})"
45
- end
46
-
47
- # Adds a function to the interface
48
- def function(name, type, args, opts={})
49
- h[name] = Spec::Function.new(name, type, args, opts)
50
- end
51
-
52
- # Adds a property to the interface
53
- def property(name, type, opts={})
54
- h[name] = Spec::Property.new(name, type, opts)
55
- end
56
-
57
- # Perform final setup
58
- def setup
59
- members.each {|spec| name = spec.name
60
- case spec
61
- when Spec::Function
62
- define_method(name) { |*args|
63
- @implementer.call_function(spec, *args)
64
- } unless spec.hide?
65
- when Spec::Property
66
- define_method(name) {
67
- @implementer.read_property(spec)
68
- } unless spec.hide?
69
- define_method(:"#{name}=") { |value|
70
- @implementer.write_property(spec, value)
71
- } unless spec.hide? || spec.readonly?
72
- end
73
- }
74
- end
75
-
76
- # Get a member by name
77
- def member(name)
78
- h[name]
79
- end
80
-
81
- # List of members (Spec::*)
82
- def members
83
- h.values
84
- end
85
-
86
- # List of functions (Spec::Function)
87
- def functions
88
- members.select {|s| s.kind_of?(Spec::Function) }
89
- end
90
-
91
- # List if properties (Spec::Property)
92
- def properties
93
- members.select {|s| s.kind_of?(Spec::Property) }
94
- end
95
-
96
-
97
- private
98
- def h ; @h ||= {} ; end
99
- end
100
-
101
-
102
- # Initializes the interface with the given implementer
103
- def initialize(*args)
104
- @args = args
105
- @implementer = Implementer.new(self, *args)
106
- end
107
-
108
-
109
- # Cast to another model
110
- def cast(name)
111
- @implementer.cast(name, *@args)
112
- end
113
-
114
- # Reads a property with the given name
115
- def read_property(name)
116
- spec = self.class.member(name)
117
- raise "#{name} is not a property" unless spec.kind_of?(Spec::Property)
118
- @implementer.read_property(spec)
119
- end
120
-
121
- # Writes a property with the given name
122
- def write_property(name, value)
123
- spec = self.class.member(name)
124
- raise "#{name} is not a property" unless spec.kind_of?(Spec::Property)
125
- raise "property #{name} is readonly" if spec.readonly?
126
- @implementer.write_property(spec, value)
127
- end
128
-
129
- # Calls a function with the given name
130
- def call_function(name, *args)
131
- spec = self.class.member(name)
132
- raise "#{name} is not a function" unless spec.kind_of?(Spec::Function)
133
- @implementer.call_function(spec, args)
134
- end
135
-
136
-
137
- # Concise inspect
138
- def inspect
139
- "#<#{self.class.name}>"
140
- end
141
- end
142
-
143
- end
144
- end
@@ -1,14 +0,0 @@
1
- module VirtualBox
2
- module COM
3
-
4
- class AbstractModel
5
- def self.iid(str)
6
- const_set(:IID, IID.new(str))
7
- end
8
-
9
- def self.setup(opts={})
10
- end
11
- end
12
-
13
- end
14
- end