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 +1 -1
- data/lib/virtualbox.rb +1 -0
- data/lib/virtualbox/command.rb +7 -0
- data/lib/virtualbox/ext/platform.rb +21 -0
- data/lib/virtualbox/global.rb +19 -12
- data/test/virtualbox/command_test.rb +24 -0
- data/test/virtualbox/ext/platform_test.rb +42 -0
- data/test/virtualbox/global_test.rb +42 -1
- data/virtualbox.gemspec +5 -2
- metadata +6 -3
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0.5. | 
| 1 | 
            +
            0.5.3
         | 
    
        data/lib/virtualbox.rb
    CHANGED
    
    
    
        data/lib/virtualbox/command.rb
    CHANGED
    
    | @@ -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
         | 
    
        data/lib/virtualbox/global.rb
    CHANGED
    
    | @@ -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( | 
| 106 | 
            -
                    Command.parse_xml(File.expand_path( | 
| 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( | 
| 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 | 
| 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. | 
| 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- | 
| 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 | 
            -
              -  | 
| 9 | 
            -
              version: 0.5. | 
| 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- | 
| 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
         |