virtualbox 0.5.2 → 0.5.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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.2
1
+ 0.5.3
data/lib/virtualbox.rb CHANGED
@@ -4,6 +4,7 @@ $:.unshift(File.expand_path(File.dirname(__FILE__)))
4
4
  require 'nokogiri'
5
5
 
6
6
  # Internal Dependencies
7
+ require 'virtualbox/ext/platform'
7
8
  require 'virtualbox/exceptions'
8
9
  require 'virtualbox/command'
9
10
  require 'virtualbox/abstract_model'
@@ -93,6 +93,13 @@ module VirtualBox
93
93
  # the ruby mailing list. I'm not sure how well it works but so far
94
94
  # it hasn't failed!
95
95
  def shell_escape(str)
96
+ if Platform.windows?
97
+ # Special case for windows. This is probably not 100% bullet proof
98
+ # but it gets the job done until we find trouble
99
+ str = "\"#{str}\"" if str =~ /\s/
100
+ return str
101
+ end
102
+
96
103
  str.to_s.gsub(/(?=[^a-zA-Z0-9_.\/\-\x7F-\xFF\n])/n, '\\').
97
104
  gsub(/\n/, "'\n'").
98
105
  sub(/^$/, "''")
@@ -0,0 +1,21 @@
1
+ module VirtualBox
2
+ class Platform
3
+ class <<self
4
+ def mac?
5
+ platform.include?("darwin")
6
+ end
7
+
8
+ def windows?
9
+ platform.include?("mswin") || platform.include?("mingw")
10
+ end
11
+
12
+ def linux?
13
+ platform.include?("linux")
14
+ end
15
+
16
+ def platform
17
+ RUBY_PLATFORM.downcase
18
+ end
19
+ end
20
+ end
21
+ end
@@ -54,15 +54,7 @@ module VirtualBox
54
54
  # The path to the global VirtualBox XML configuration file. This is
55
55
  # entirely system dependent and can be set with {vboxconfig=}. The default
56
56
  # is guessed based on the platform.
57
- #
58
- # TODO: Windows
59
- @@vboxconfig = if RUBY_PLATFORM.downcase.include?("darwin")
60
- "~/Library/VirtualBox/VirtualBox.xml"
61
- elsif RUBY_PLATFORM.downcase.include?("linux")
62
- "~/.VirtualBox/VirtualBox.xml"
63
- else
64
- "Unknown"
65
- end
57
+ @@vboxconfig = nil
66
58
 
67
59
  relationship :vms, VM, :lazy => true
68
60
  relationship :media, Media
@@ -96,21 +88,36 @@ module VirtualBox
96
88
  @@vboxconfig = value
97
89
  end
98
90
 
91
+ # Returns the path to the virtual box configuration file. If the path
92
+ # has not yet been set, it attempts to infer it based on the
93
+ # platform ruby is running on.
94
+ def vboxconfig
95
+ return @@vboxconfig unless @@vboxconfig.nil?
96
+
97
+ if Platform.mac?
98
+ "~/Library/VirtualBox/VirtualBox.xml"
99
+ elsif Platform.linux? || Platform.windows?
100
+ "~/.VirtualBox/VirtualBox.xml"
101
+ else
102
+ "Unknown"
103
+ end
104
+ end
105
+
99
106
  # Returns the XML document of the configuration. This will raise an
100
107
  # {Exceptions::ConfigurationException} if the vboxconfig file doesn't
101
108
  # exist.
102
109
  #
103
110
  # @return [Nokogiri::XML::Document]
104
111
  def config
105
- raise Exceptions::ConfigurationException.new("The path to the global VirtualBox config must be set. See Global.vboxconfig=") unless File.exist?(File.expand_path(@@vboxconfig))
106
- Command.parse_xml(File.expand_path(@@vboxconfig))
112
+ raise Exceptions::ConfigurationException.new("The path to the global VirtualBox config must be set. See Global.vboxconfig=") unless File.exist?(File.expand_path(vboxconfig))
113
+ Command.parse_xml(File.expand_path(vboxconfig))
107
114
  end
108
115
 
109
116
  # Expands path relative to the configuration file.
110
117
  #
111
118
  # @return [String]
112
119
  def expand_path(path)
113
- File.expand_path(path, File.dirname(@@vboxconfig))
120
+ File.expand_path(path, File.dirname(vboxconfig))
114
121
  end
115
122
  end
116
123
 
@@ -54,6 +54,30 @@ class CommandTest < Test::Unit::TestCase
54
54
  assert_equal "400", VirtualBox::Command.shell_escape(400)
55
55
  end
56
56
  end
57
+
58
+ context "unix" do
59
+ setup do
60
+ VirtualBox::Platform.stubs(:windows?).returns(false)
61
+ end
62
+
63
+ should "convert properly" do
64
+ assert_equal "foo\\ bar", VirtualBox::Command.shell_escape("foo bar")
65
+ end
66
+ end
67
+
68
+ context "windows" do
69
+ setup do
70
+ VirtualBox::Platform.stubs(:windows?).returns(true)
71
+ end
72
+
73
+ should "wrap strings with spaces in quotes" do
74
+ assert_equal '"foo bar"', VirtualBox::Command.shell_escape("foo bar")
75
+ end
76
+
77
+ should "just return the string if it has no spaces" do
78
+ assert_equal "foo:bar", VirtualBox::Command.shell_escape('foo:bar')
79
+ end
80
+ end
57
81
  end
58
82
 
59
83
  context "executing commands" do
@@ -0,0 +1,42 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
2
+ require 'virtualbox/ext/platform'
3
+
4
+ class PlatformTest < Test::Unit::TestCase
5
+ context "mac" do
6
+ should "return true if it contains darwin" do
7
+ success = ["i386-darwin", "i686-darwin10", "imadarwin"]
8
+ success.each do |item|
9
+ VirtualBox::Platform.stubs(:platform).returns(item)
10
+ assert VirtualBox::Platform.mac?
11
+ end
12
+ end
13
+ end
14
+
15
+ context "windows" do
16
+ should "return true if it contains mswin" do
17
+ success = ["i386-mswin32", "i686-mswin64", "imswin"]
18
+ success.each do |item|
19
+ VirtualBox::Platform.stubs(:platform).returns(item)
20
+ assert VirtualBox::Platform.windows?
21
+ end
22
+ end
23
+
24
+ should "return true if it contains mingw" do
25
+ success = ["i386-mingw32", "i686-mingw64", "mingw"]
26
+ success.each do |item|
27
+ VirtualBox::Platform.stubs(:platform).returns(item)
28
+ assert VirtualBox::Platform.windows?
29
+ end
30
+ end
31
+ end
32
+
33
+ context "linux" do
34
+ should "return true if it contains linux" do
35
+ success = ["i386-linux", "i686-linux241", "linux"]
36
+ success.each do |item|
37
+ VirtualBox::Platform.stubs(:platform).returns(item)
38
+ assert VirtualBox::Platform.linux?
39
+ end
40
+ end
41
+ end
42
+ end
@@ -1,6 +1,46 @@
1
1
  require File.join(File.dirname(__FILE__), '..', 'test_helper')
2
2
 
3
3
  class GlobalTest < Test::Unit::TestCase
4
+ context "the virtualbox config file path" do
5
+ setup do
6
+ VirtualBox::Global.vboxconfig = nil
7
+ end
8
+
9
+ teardown do
10
+ VirtualBox::Global.vboxconfig = "foo"
11
+ end
12
+
13
+ should "return the path if its set" do
14
+ VirtualBox::Global.vboxconfig = "foo"
15
+ assert_equal "foo", VirtualBox::Global.vboxconfig
16
+ end
17
+
18
+ should "return Mac-path if on mac" do
19
+ VirtualBox::Platform.stubs(:mac?).returns(true)
20
+ assert_equal "~/Library/VirtualBox/VirtualBox.xml", VirtualBox::Global.vboxconfig
21
+ end
22
+
23
+ should "return Windows-path if on windows" do
24
+ VirtualBox::Platform.stubs(:mac?).returns(false)
25
+ VirtualBox::Platform.stubs(:windows?).returns(true)
26
+ assert_equal "~/.VirtualBox/VirtualBox.xml", VirtualBox::Global.vboxconfig
27
+ end
28
+
29
+ should "return Linux-path if on linux" do
30
+ VirtualBox::Platform.stubs(:mac?).returns(false)
31
+ VirtualBox::Platform.stubs(:windows?).returns(false)
32
+ VirtualBox::Platform.stubs(:linux?).returns(true)
33
+ assert_equal "~/.VirtualBox/VirtualBox.xml", VirtualBox::Global.vboxconfig
34
+ end
35
+
36
+ should "return 'unknown' otherwise" do
37
+ VirtualBox::Platform.stubs(:mac?).returns(false)
38
+ VirtualBox::Platform.stubs(:windows?).returns(false)
39
+ VirtualBox::Platform.stubs(:linux?).returns(false)
40
+ assert_equal "Unknown", VirtualBox::Global.vboxconfig
41
+ end
42
+ end
43
+
4
44
  context "getting the global config" do
5
45
  should "only get it once, then cache" do
6
46
  VirtualBox::Global.expects(:config).returns(mock_xml_doc).once
@@ -26,6 +66,7 @@ class GlobalTest < Test::Unit::TestCase
26
66
 
27
67
  context "parsing configuration XML" do
28
68
  setup do
69
+ VirtualBox::Command.stubs(:vboxconfig).returns("foo")
29
70
  File.stubs(:exist?).returns(true)
30
71
  VirtualBox::Command.stubs(:parse_xml)
31
72
  end
@@ -63,7 +104,7 @@ class GlobalTest < Test::Unit::TestCase
63
104
 
64
105
  context "expanding path" do
65
106
  setup do
66
- VirtualBox::Global.vboxconfig = "/foo/bar/baz.rb"
107
+ VirtualBox::Global.stubs(:vboxconfig).returns("/foo/bar/baz.rb")
67
108
  end
68
109
 
69
110
  should "expand the path properly" do
data/virtualbox.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{virtualbox}
8
- s.version = "0.5.2"
8
+ s.version = "0.5.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Mitchell Hashimoto"]
12
- s.date = %q{2010-03-09}
12
+ s.date = %q{2010-03-16}
13
13
  s.description = %q{Create and modify virtual machines in VirtualBox using pure ruby.}
14
14
  s.email = %q{mitchell.hashimoto@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -37,6 +37,7 @@ Gem::Specification.new do |s|
37
37
  "lib/virtualbox/command.rb",
38
38
  "lib/virtualbox/dvd.rb",
39
39
  "lib/virtualbox/exceptions.rb",
40
+ "lib/virtualbox/ext/platform.rb",
40
41
  "lib/virtualbox/ext/subclass_listing.rb",
41
42
  "lib/virtualbox/extra_data.rb",
42
43
  "lib/virtualbox/forwarded_port.rb",
@@ -60,6 +61,7 @@ Gem::Specification.new do |s|
60
61
  "test/virtualbox/attached_device_test.rb",
61
62
  "test/virtualbox/command_test.rb",
62
63
  "test/virtualbox/dvd_test.rb",
64
+ "test/virtualbox/ext/platform_test.rb",
63
65
  "test/virtualbox/ext/subclass_listing_test.rb",
64
66
  "test/virtualbox/extra_data_test.rb",
65
67
  "test/virtualbox/forwarded_port_test.rb",
@@ -91,6 +93,7 @@ Gem::Specification.new do |s|
91
93
  "test/virtualbox/attached_device_test.rb",
92
94
  "test/virtualbox/command_test.rb",
93
95
  "test/virtualbox/dvd_test.rb",
96
+ "test/virtualbox/ext/platform_test.rb",
94
97
  "test/virtualbox/ext/subclass_listing_test.rb",
95
98
  "test/virtualbox/extra_data_test.rb",
96
99
  "test/virtualbox/forwarded_port_test.rb",
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 5
8
- - 2
9
- version: 0.5.2
8
+ - 3
9
+ version: 0.5.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Mitchell Hashimoto
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-09 00:00:00 -08:00
17
+ date: 2010-03-16 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -61,6 +61,7 @@ files:
61
61
  - lib/virtualbox/command.rb
62
62
  - lib/virtualbox/dvd.rb
63
63
  - lib/virtualbox/exceptions.rb
64
+ - lib/virtualbox/ext/platform.rb
64
65
  - lib/virtualbox/ext/subclass_listing.rb
65
66
  - lib/virtualbox/extra_data.rb
66
67
  - lib/virtualbox/forwarded_port.rb
@@ -84,6 +85,7 @@ files:
84
85
  - test/virtualbox/attached_device_test.rb
85
86
  - test/virtualbox/command_test.rb
86
87
  - test/virtualbox/dvd_test.rb
88
+ - test/virtualbox/ext/platform_test.rb
87
89
  - test/virtualbox/ext/subclass_listing_test.rb
88
90
  - test/virtualbox/extra_data_test.rb
89
91
  - test/virtualbox/forwarded_port_test.rb
@@ -139,6 +141,7 @@ test_files:
139
141
  - test/virtualbox/attached_device_test.rb
140
142
  - test/virtualbox/command_test.rb
141
143
  - test/virtualbox/dvd_test.rb
144
+ - test/virtualbox/ext/platform_test.rb
142
145
  - test/virtualbox/ext/subclass_listing_test.rb
143
146
  - test/virtualbox/extra_data_test.rb
144
147
  - test/virtualbox/forwarded_port_test.rb