virtualbox 0.8.6 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (281) hide show
  1. data/Rakefile +11 -5
  2. data/TODO.md +7 -0
  3. data/lib/virtualbox.rb +34 -8
  4. data/lib/virtualbox/abstract_model.rb +7 -8
  5. data/lib/virtualbox/abstract_model/attributable.rb +16 -2
  6. data/lib/virtualbox/abstract_model/interface_attributes.rb +10 -1
  7. data/lib/virtualbox/abstract_model/relatable.rb +11 -0
  8. data/lib/virtualbox/appliance.rb +1 -1
  9. data/lib/virtualbox/com.rb +13 -12
  10. data/lib/virtualbox/com/abstract_enum.rb +21 -5
  11. data/lib/virtualbox/com/abstract_interface.rb +11 -0
  12. data/lib/virtualbox/com/base_interface.rb +1 -32
  13. data/lib/virtualbox/com/{ffi/vboxxpcomc.rb → ffi.rb} +7 -0
  14. data/lib/virtualbox/com/ffi/interface.rb +10 -27
  15. data/lib/virtualbox/com/ffi/util.rb +32 -2
  16. data/lib/virtualbox/com/ffi_interface.rb +8 -2
  17. data/lib/virtualbox/com/implementer.rb +10 -0
  18. data/lib/virtualbox/com/implementer/base.rb +10 -3
  19. data/lib/virtualbox/com/implementer/ffi.rb +40 -13
  20. data/lib/virtualbox/com/implementer/mscom.rb +18 -1
  21. data/lib/virtualbox/com/interface/4.0.x/{access_mode.rb → AccessMode.rb} +1 -1
  22. data/lib/virtualbox/com/interface/4.0.x/{appliance.rb → Appliance.rb} +0 -0
  23. data/lib/virtualbox/com/interface/4.0.x/{audio_adapter.rb → AudioAdapter.rb} +1 -1
  24. data/lib/virtualbox/com/interface/4.0.x/{audio_controller_type.rb → AudioControllerType.rb} +0 -0
  25. data/lib/virtualbox/com/interface/4.0.x/{audio_driver_type.rb → AudioDriverType.rb} +0 -0
  26. data/lib/virtualbox/com/interface/4.0.x/{auth_type.rb → AuthType.rb} +0 -0
  27. data/lib/virtualbox/com/interface/4.0.x/{bios_boot_menu_mode.rb → BIOSBootMenuMode.rb} +0 -0
  28. data/lib/virtualbox/com/interface/4.0.x/{bios_settings.rb → BIOSSettings.rb} +1 -1
  29. data/lib/virtualbox/com/interface/4.0.x/{bandwidth_control.rb → BandwidthControl.rb} +0 -0
  30. data/lib/virtualbox/com/interface/4.0.x/{bandwidth_group.rb → BandwidthGroup.rb} +0 -0
  31. data/lib/virtualbox/com/interface/4.0.x/{bandwidth_group_type.rb → BandwidthGroupType.rb} +0 -0
  32. data/lib/virtualbox/com/interface/4.0.x/{chipset_type.rb → ChipsetType.rb} +0 -0
  33. data/lib/virtualbox/com/interface/4.0.x/{cleanup_mode.rb → CleanupMode.rb} +0 -0
  34. data/lib/virtualbox/com/interface/4.0.x/{clipboard_mode.rb → ClipboardMode.rb} +0 -0
  35. data/lib/virtualbox/com/interface/4.0.x/{console.rb → Console.rb} +0 -0
  36. data/lib/virtualbox/com/interface/4.0.x/{cpu_property_type.rb → CpuPropertyType.rb} +0 -0
  37. data/lib/virtualbox/com/interface/4.0.x/{dhcp_server.rb → DHCPServer.rb} +0 -0
  38. data/lib/virtualbox/com/interface/4.0.x/{data_type.rb → DataType.rb} +0 -0
  39. data/lib/virtualbox/com/interface/4.0.x/{device_type.rb → DeviceType.rb} +0 -0
  40. data/lib/virtualbox/com/interface/4.0.x/{event_source.rb → EventSource.rb} +0 -0
  41. data/lib/virtualbox/com/interface/4.0.x/{fault_tolerance_state.rb → FaultToleranceState.rb} +0 -0
  42. data/lib/virtualbox/com/interface/4.0.x/{firmware_type.rb → FirmwareType.rb} +0 -0
  43. data/lib/virtualbox/com/interface/4.0.x/{guest.rb → Guest.rb} +0 -0
  44. data/lib/virtualbox/com/interface/4.0.x/{guest_os_type.rb → GuestOSType.rb} +0 -0
  45. data/lib/virtualbox/com/interface/4.0.x/{hw_virt_ex_property_type.rb → HWVirtExPropertyType.rb} +0 -0
  46. data/lib/virtualbox/com/interface/4.0.x/{host.rb → Host.rb} +6 -6
  47. data/lib/virtualbox/com/interface/4.0.x/{host_network_interface.rb → HostNetworkInterface.rb} +0 -0
  48. data/lib/virtualbox/com/interface/4.0.x/{host_network_interface_medium_type.rb → HostNetworkInterfaceMediumType.rb} +0 -0
  49. data/lib/virtualbox/com/interface/4.0.x/{host_network_interface_status.rb → HostNetworkInterfaceStatus.rb} +0 -0
  50. data/lib/virtualbox/com/interface/4.0.x/{host_network_interface_type.rb → HostNetworkInterfaceType.rb} +0 -0
  51. data/lib/virtualbox/com/interface/4.0.x/{host_usb_device.rb → HostUSBDevice.rb} +3 -1
  52. data/lib/virtualbox/com/interface/4.0.x/{host_usb_device_filter.rb → HostUSBDeviceFilter.rb} +3 -1
  53. data/lib/virtualbox/com/interface/4.0.x/{keyboard_hid_type.rb → KeyboardHidType.rb} +0 -0
  54. data/lib/virtualbox/com/interface/4.0.x/{lock_type.rb → LockType.rb} +0 -0
  55. data/lib/virtualbox/com/interface/4.0.x/{machine.rb → Machine.rb} +0 -0
  56. data/lib/virtualbox/com/interface/4.0.x/{machine_state.rb → MachineState.rb} +0 -0
  57. data/lib/virtualbox/com/interface/4.0.x/{medium.rb → Medium.rb} +0 -0
  58. data/lib/virtualbox/com/interface/4.0.x/{medium_attachment.rb → MediumAttachment.rb} +0 -0
  59. data/lib/virtualbox/com/interface/4.0.x/{medium_format.rb → MediumFormat.rb} +0 -0
  60. data/lib/virtualbox/com/interface/4.0.x/{medium_state.rb → MediumState.rb} +0 -0
  61. data/lib/virtualbox/com/interface/4.0.x/{medium_type.rb → MediumType.rb} +0 -0
  62. data/lib/virtualbox/com/interface/4.0.x/{medium_variant.rb → MediumVariant.rb} +0 -0
  63. data/lib/virtualbox/com/interface/4.0.x/{nat_alias_mode.rb → NATAliasMode.rb} +0 -0
  64. data/lib/virtualbox/com/interface/4.0.x/{nat_engine.rb → NATEngine.rb} +0 -0
  65. data/lib/virtualbox/com/interface/4.0.x/{nat_protocol.rb → NATProtocol.rb} +0 -0
  66. data/lib/virtualbox/com/interface/4.0.x/{nsiexception.rb → NSIException.rb} +0 -0
  67. data/lib/virtualbox/com/interface/4.0.x/{nsisupports.rb → NSISupports.rb} +3 -0
  68. data/lib/virtualbox/com/interface/4.0.x/{network_adapter.rb → NetworkAdapter.rb} +0 -0
  69. data/lib/virtualbox/com/interface/4.0.x/{network_adapter_type.rb → NetworkAdapterType.rb} +0 -0
  70. data/lib/virtualbox/com/interface/4.0.x/{network_attachment_type.rb → NetworkAttachmentType.rb} +0 -0
  71. data/lib/virtualbox/com/interface/4.0.x/{parallel_port.rb → ParallelPort.rb} +0 -0
  72. data/lib/virtualbox/com/interface/4.0.x/{pci_device_attachment.rb → PciDeviceAttachment.rb} +0 -0
  73. data/lib/virtualbox/com/interface/4.0.x/{pointing_hid_type.rb → PointingHidType.rb} +0 -0
  74. data/lib/virtualbox/com/interface/4.0.x/{port_mode.rb → PortMode.rb} +0 -0
  75. data/lib/virtualbox/com/interface/4.0.x/{progress.rb → Progress.rb} +0 -0
  76. data/lib/virtualbox/com/interface/4.0.x/{serial_port.rb → SerialPort.rb} +0 -0
  77. data/lib/virtualbox/com/interface/4.0.x/{session.rb → Session.rb} +0 -0
  78. data/lib/virtualbox/com/interface/4.0.x/{session_state.rb → SessionState.rb} +0 -0
  79. data/lib/virtualbox/com/interface/4.0.x/{session_type.rb → SessionType.rb} +0 -0
  80. data/lib/virtualbox/com/interface/4.0.x/{shared_folder.rb → SharedFolder.rb} +0 -0
  81. data/lib/virtualbox/com/interface/4.0.x/{snapshot.rb → Snapshot.rb} +0 -0
  82. data/lib/virtualbox/com/interface/4.0.x/{storage_bus.rb → StorageBus.rb} +0 -0
  83. data/lib/virtualbox/com/interface/4.0.x/{storage_controller.rb → StorageController.rb} +0 -0
  84. data/lib/virtualbox/com/interface/4.0.x/{storage_controller_type.rb → StorageControllerType.rb} +0 -0
  85. data/lib/virtualbox/com/interface/4.0.x/{system_properties.rb → SystemProperties.rb} +0 -0
  86. data/lib/virtualbox/com/interface/4.0.x/{usb_controller.rb → USBController.rb} +0 -0
  87. data/lib/virtualbox/com/interface/4.0.x/{usb_device.rb → USBDevice.rb} +0 -0
  88. data/lib/virtualbox/com/interface/4.0.x/{usb_device_filter.rb → USBDeviceFilter.rb} +0 -0
  89. data/lib/virtualbox/com/interface/4.0.x/{usb_device_filter_action.rb → USBDeviceFilterAction.rb} +0 -0
  90. data/lib/virtualbox/com/interface/4.0.x/{usb_device_state.rb → USBDeviceState.rb} +0 -0
  91. data/lib/virtualbox/com/interface/4.0.x/{vrde_server.rb → VRDEServer.rb} +0 -0
  92. data/lib/virtualbox/com/interface/4.0.x/{virtualbox.rb → VirtualBox.rb} +1 -1
  93. data/lib/virtualbox/com/interface/4.0.x/{virtual_box_error_info.rb → VirtualBoxErrorInfo.rb} +3 -1
  94. data/lib/virtualbox/com/interface/4.0.x/{virtual_system_description.rb → VirtualSystemDescription.rb} +0 -0
  95. data/lib/virtualbox/com/interface/4.0.x/{virtual_system_description_type.rb → VirtualSystemDescriptionType.rb} +0 -0
  96. data/lib/virtualbox/com/interface/4.0.x/{virtual_system_description_value_type.rb → VirtualSystemDescriptionValueType.rb} +0 -0
  97. data/lib/virtualbox/com/interface/{3.2.x/access_mode.rb → 4.1.x/AccessMode.rb} +2 -2
  98. data/lib/virtualbox/com/interface/4.1.x/AdditionsFacility.rb +17 -0
  99. data/lib/virtualbox/com/interface/4.1.x/AdditionsFacilityClass.rb +17 -0
  100. data/lib/virtualbox/com/interface/4.1.x/AdditionsFacilityStatus.rb +19 -0
  101. data/lib/virtualbox/com/interface/4.1.x/AdditionsFacilityType.rb +17 -0
  102. data/lib/virtualbox/com/interface/4.1.x/AdditionsRunLevelType.rb +14 -0
  103. data/lib/virtualbox/com/interface/{3.2.x/appliance.rb → 4.1.x/Appliance.rb} +5 -4
  104. data/lib/virtualbox/com/interface/{3.1.x/audio_adapter.rb → 4.1.x/AudioAdapter.rb} +2 -2
  105. data/lib/virtualbox/com/interface/{3.1.x/audio_controller_type.rb → 4.1.x/AudioControllerType.rb} +2 -2
  106. data/lib/virtualbox/com/interface/{3.2.x/audio_driver_type.rb → 4.1.x/AudioDriverType.rb} +2 -2
  107. data/lib/virtualbox/com/interface/{3.1.x/vrdp_auth_type.rb → 4.1.x/AuthType.rb} +3 -3
  108. data/lib/virtualbox/com/interface/{3.1.x/bios_boot_menu_mode.rb → 4.1.x/BIOSBootMenuMode.rb} +2 -2
  109. data/lib/virtualbox/com/interface/{3.2.x/bios_settings.rb → 4.1.x/BIOSSettings.rb} +2 -2
  110. data/lib/virtualbox/com/interface/4.1.x/BandwidthControl.rb +18 -0
  111. data/lib/virtualbox/com/interface/4.1.x/BandwidthGroup.rb +16 -0
  112. data/lib/virtualbox/com/interface/4.1.x/BandwidthGroupType.rb +11 -0
  113. data/lib/virtualbox/com/interface/4.1.x/ChipsetType.rb +11 -0
  114. data/lib/virtualbox/com/interface/4.1.x/CleanupMode.rb +12 -0
  115. data/lib/virtualbox/com/interface/{3.2.x/clipboard_mode.rb → 4.1.x/ClipboardMode.rb} +2 -2
  116. data/lib/virtualbox/com/interface/4.1.x/CloneMode.rb +13 -0
  117. data/lib/virtualbox/com/interface/4.1.x/CloneOptions.rb +14 -0
  118. data/lib/virtualbox/com/interface/{3.1.x/console.rb → 4.1.x/Console.rb} +10 -7
  119. data/lib/virtualbox/com/interface/{3.2.x/cpu_property_type.rb → 4.1.x/CpuPropertyType.rb} +2 -2
  120. data/lib/virtualbox/com/interface/{3.1.x/dhcp_server.rb → 4.1.x/DHCPServer.rb} +2 -2
  121. data/lib/virtualbox/com/interface/4.1.x/DataType.rb +11 -0
  122. data/lib/virtualbox/com/interface/{3.1.x/device_type.rb → 4.1.x/DeviceType.rb} +2 -2
  123. data/lib/virtualbox/com/interface/4.1.x/DirectoryCreateFlag.rb +12 -0
  124. data/lib/virtualbox/com/interface/4.1.x/DirectoryOpenFlag.rb +11 -0
  125. data/lib/virtualbox/com/interface/{3.2.x/guest.rb → 4.1.x/EventSource.rb} +4 -4
  126. data/lib/virtualbox/com/interface/4.1.x/ExecuteProcessFlag.rb +15 -0
  127. data/lib/virtualbox/com/interface/4.1.x/ExecuteProcessStatus.rb +19 -0
  128. data/lib/virtualbox/com/interface/4.1.x/FaultToleranceState.rb +11 -0
  129. data/lib/virtualbox/com/interface/{3.1.x/firmware_type.rb → 4.1.x/FirmwareType.rb} +2 -2
  130. data/lib/virtualbox/com/interface/4.1.x/Guest.rb +36 -0
  131. data/lib/virtualbox/com/interface/4.1.x/GuestDirEntry.rb +15 -0
  132. data/lib/virtualbox/com/interface/4.1.x/GuestDirEntryType.rb +14 -0
  133. data/lib/virtualbox/com/interface/{3.2.x/guest_os_type.rb → 4.1.x/GuestOSType.rb} +2 -2
  134. data/lib/virtualbox/com/interface/{3.1.x/hw_virt_ex_property_type.rb → 4.1.x/HWVirtExPropertyType.rb} +4 -3
  135. data/lib/virtualbox/com/interface/{3.1.x/host.rb → 4.1.x/Host.rb} +8 -6
  136. data/lib/virtualbox/com/interface/{3.1.x/host_network_interface.rb → 4.1.x/HostNetworkInterface.rb} +2 -2
  137. data/lib/virtualbox/com/interface/{3.1.x/host_network_interface_medium_type.rb → 4.1.x/HostNetworkInterfaceMediumType.rb} +2 -2
  138. data/lib/virtualbox/com/interface/{3.2.x/host_network_interface_status.rb → 4.1.x/HostNetworkInterfaceStatus.rb} +2 -2
  139. data/lib/virtualbox/com/interface/{3.1.x/host_network_interface_type.rb → 4.1.x/HostNetworkInterfaceType.rb} +2 -2
  140. data/lib/virtualbox/com/interface/{3.1.x/host_usb_device.rb → 4.1.x/HostUSBDevice.rb} +4 -2
  141. data/lib/virtualbox/com/interface/{3.2.x/host_usb_device_filter.rb → 4.1.x/HostUSBDeviceFilter.rb} +4 -2
  142. data/lib/virtualbox/com/interface/4.1.x/ImportOptions.rb +12 -0
  143. data/lib/virtualbox/com/interface/{3.2.x/keyboard_hid_type.rb → 4.1.x/KeyboardHidType.rb} +2 -2
  144. data/lib/virtualbox/com/interface/4.1.x/LockType.rb +11 -0
  145. data/lib/virtualbox/com/interface/{3.2.x/machine.rb → 4.1.x/Machine.rb} +34 -15
  146. data/lib/virtualbox/com/interface/{3.1.x/machine_state.rb → 4.1.x/MachineState.rb} +1 -1
  147. data/lib/virtualbox/com/interface/{3.2.x/medium.rb → 4.1.x/Medium.rb} +5 -2
  148. data/lib/virtualbox/com/interface/{3.1.x/medium_attachment.rb → 4.1.x/MediumAttachment.rb} +6 -2
  149. data/lib/virtualbox/com/interface/{3.1.x/medium_format.rb → 4.1.x/MediumFormat.rb} +2 -2
  150. data/lib/virtualbox/com/interface/{3.1.x/medium_state.rb → 4.1.x/MediumState.rb} +2 -2
  151. data/lib/virtualbox/com/interface/{3.2.x/medium_type.rb → 4.1.x/MediumType.rb} +2 -2
  152. data/lib/virtualbox/com/interface/{3.1.x/medium_variant.rb → 4.1.x/MediumVariant.rb} +2 -2
  153. data/lib/virtualbox/com/interface/{3.2.x/nat_alias_mode.rb → 4.1.x/NATAliasMode.rb} +2 -2
  154. data/lib/virtualbox/com/interface/{3.2.x/nat_engine.rb → 4.1.x/NATEngine.rb} +2 -2
  155. data/lib/virtualbox/com/interface/{3.2.x/nat_protocol.rb → 4.1.x/NATProtocol.rb} +2 -2
  156. data/lib/virtualbox/com/interface/{3.1.x/nsiexception.rb → 4.1.x/NSIException.rb} +2 -2
  157. data/lib/virtualbox/com/interface/{3.1.x/nsisupports.rb → 4.1.x/NSISupports.rb} +4 -1
  158. data/lib/virtualbox/com/interface/{3.2.x/network_adapter.rb → 4.1.x/NetworkAdapter.rb} +11 -11
  159. data/lib/virtualbox/com/interface/4.1.x/NetworkAdapterPromiscModePolicy.rb +13 -0
  160. data/lib/virtualbox/com/interface/{3.1.x/network_adapter_type.rb → 4.1.x/NetworkAdapterType.rb} +2 -2
  161. data/lib/virtualbox/com/interface/{3.1.x/network_attachment_type.rb → 4.1.x/NetworkAttachmentType.rb} +3 -3
  162. data/lib/virtualbox/com/interface/{3.2.x/parallel_port.rb → 4.1.x/ParallelPort.rb} +2 -2
  163. data/lib/virtualbox/com/interface/4.1.x/PciDeviceAttachment.rb +16 -0
  164. data/lib/virtualbox/com/interface/{3.2.x/pointing_hid_type.rb → 4.1.x/PointingHidType.rb} +2 -2
  165. data/lib/virtualbox/com/interface/{3.1.x/port_mode.rb → 4.1.x/PortMode.rb} +1 -1
  166. data/lib/virtualbox/com/interface/4.1.x/ProcessOutputFlag.rb +12 -0
  167. data/lib/virtualbox/com/interface/{3.2.x/progress.rb → 4.1.x/Progress.rb} +3 -1
  168. data/lib/virtualbox/com/interface/{3.1.x/serial_port.rb → 4.1.x/SerialPort.rb} +2 -2
  169. data/lib/virtualbox/com/interface/{3.2.x/session.rb → 4.1.x/Session.rb} +2 -2
  170. data/lib/virtualbox/com/interface/{3.1.x/session_state.rb → 4.1.x/SessionState.rb} +2 -2
  171. data/lib/virtualbox/com/interface/{3.1.x/session_type.rb → 4.1.x/SessionType.rb} +3 -3
  172. data/lib/virtualbox/com/interface/4.1.x/SettingsVersion.rb +25 -0
  173. data/lib/virtualbox/com/interface/{3.1.x/shared_folder.rb → 4.1.x/SharedFolder.rb} +2 -2
  174. data/lib/virtualbox/com/interface/{3.1.x/snapshot.rb → 4.1.x/Snapshot.rb} +3 -2
  175. data/lib/virtualbox/com/interface/{3.2.x/storage_bus.rb → 4.1.x/StorageBus.rb} +2 -2
  176. data/lib/virtualbox/com/interface/{3.2.x/storage_controller.rb → 4.1.x/StorageController.rb} +3 -2
  177. data/lib/virtualbox/com/interface/{3.2.x/storage_controller_type.rb → 4.1.x/StorageControllerType.rb} +2 -2
  178. data/lib/virtualbox/com/interface/4.1.x/StorageDeviceChangedEvent.rb +14 -0
  179. data/lib/virtualbox/com/interface/{3.2.x/system_properties.rb → 4.1.x/SystemProperties.rb} +8 -6
  180. data/lib/virtualbox/com/interface/{3.2.x/usb_controller.rb → 4.1.x/USBController.rb} +2 -2
  181. data/lib/virtualbox/com/interface/{3.1.x/usb_device.rb → 4.1.x/USBDevice.rb} +2 -2
  182. data/lib/virtualbox/com/interface/{3.1.x/usb_device_filter.rb → 4.1.x/USBDeviceFilter.rb} +2 -2
  183. data/lib/virtualbox/com/interface/{3.2.x/usb_device_filter_action.rb → 4.1.x/USBDeviceFilterAction.rb} +2 -2
  184. data/lib/virtualbox/com/interface/{3.2.x/usb_device_state.rb → 4.1.x/USBDeviceState.rb} +2 -2
  185. data/lib/virtualbox/com/interface/4.1.x/VRDEServer.rb +23 -0
  186. data/lib/virtualbox/com/interface/{3.2.x/virtualbox.rb → 4.1.x/VirtualBox.rb} +13 -27
  187. data/lib/virtualbox/com/interface/{3.2.x/virtual_box_error_info.rb → 4.1.x/VirtualBoxErrorInfo.rb} +4 -2
  188. data/lib/virtualbox/com/interface/{3.2.x/virtual_system_description.rb → 4.1.x/VirtualSystemDescription.rb} +2 -2
  189. data/lib/virtualbox/com/interface/4.1.x/VirtualSystemDescriptionType.rb +34 -0
  190. data/lib/virtualbox/com/interface/{3.2.x/virtual_system_description_value_type.rb → 4.1.x/VirtualSystemDescriptionValueType.rb} +1 -1
  191. data/lib/virtualbox/com/util.rb +30 -8
  192. data/lib/virtualbox/exceptions.rb +14 -13
  193. data/lib/virtualbox/extra_data.rb +2 -0
  194. data/lib/virtualbox/hard_drive.rb +1 -1
  195. data/lib/virtualbox/host_network_interface.rb +1 -1
  196. data/lib/virtualbox/lib.rb +2 -0
  197. data/lib/virtualbox/medium.rb +2 -0
  198. data/lib/virtualbox/network_adapter.rb +6 -22
  199. data/lib/virtualbox/proxies.rb +6 -0
  200. data/lib/virtualbox/system_properties.rb +0 -1
  201. data/lib/virtualbox/version.rb +28 -30
  202. data/lib/virtualbox/vm.rb +75 -55
  203. data/test/test_helper.rb +2 -5
  204. data/test/virtualbox/abstract_model/attributable_test.rb +22 -0
  205. data/test/virtualbox/abstract_model/relatable_test.rb +21 -0
  206. data/test/virtualbox/abstract_model_test.rb +1 -8
  207. data/test/virtualbox/com/abstract_enum_test.rb +1 -1
  208. data/test/virtualbox/com/ffi/interface_test.rb +9 -6
  209. data/test/virtualbox/com/ffi/util_test.rb +0 -11
  210. data/test/virtualbox/com/implementer/ffi_test.rb +7 -21
  211. data/test/virtualbox/com/util_test.rb +0 -10
  212. data/test/virtualbox/host_network_interface_test.rb +1 -1
  213. data/test/virtualbox/network_adapter_test.rb +6 -32
  214. data/test/virtualbox/version_test.rb +1 -5
  215. data/test/virtualbox/vm_test.rb +11 -17
  216. data/virtualbox.gemspec +4 -2
  217. metadata +224 -250
  218. data/lib/virtualbox/com/ffi/interfaces.rb +0 -64
  219. data/lib/virtualbox/com/interface/3.1.x/access_mode.rb +0 -11
  220. data/lib/virtualbox/com/interface/3.1.x/appliance.rb +0 -22
  221. data/lib/virtualbox/com/interface/3.1.x/audio_driver_type.rb +0 -11
  222. data/lib/virtualbox/com/interface/3.1.x/bios_settings.rb +0 -21
  223. data/lib/virtualbox/com/interface/3.1.x/clipboard_mode.rb +0 -11
  224. data/lib/virtualbox/com/interface/3.1.x/cpu_property_type.rb +0 -11
  225. data/lib/virtualbox/com/interface/3.1.x/guest_os_type.rb +0 -23
  226. data/lib/virtualbox/com/interface/3.1.x/host_network_interface_status.rb +0 -11
  227. data/lib/virtualbox/com/interface/3.1.x/host_usb_device_filter.rb +0 -13
  228. data/lib/virtualbox/com/interface/3.1.x/machine.rb +0 -105
  229. data/lib/virtualbox/com/interface/3.1.x/medium.rb +0 -50
  230. data/lib/virtualbox/com/interface/3.1.x/medium_type.rb +0 -11
  231. data/lib/virtualbox/com/interface/3.1.x/network_adapter.rb +0 -30
  232. data/lib/virtualbox/com/interface/3.1.x/parallel_port.rb +0 -17
  233. data/lib/virtualbox/com/interface/3.1.x/progress.rb +0 -63
  234. data/lib/virtualbox/com/interface/3.1.x/session.rb +0 -18
  235. data/lib/virtualbox/com/interface/3.1.x/storage_bus.rb +0 -11
  236. data/lib/virtualbox/com/interface/3.1.x/storage_controller.rb +0 -23
  237. data/lib/virtualbox/com/interface/3.1.x/storage_controller_type.rb +0 -11
  238. data/lib/virtualbox/com/interface/3.1.x/system_properties.rb +0 -37
  239. data/lib/virtualbox/com/interface/3.1.x/usb_controller.rb +0 -20
  240. data/lib/virtualbox/com/interface/3.1.x/usb_device_filter_action.rb +0 -11
  241. data/lib/virtualbox/com/interface/3.1.x/usb_device_state.rb +0 -11
  242. data/lib/virtualbox/com/interface/3.1.x/virtual_box_error_info.rb +0 -17
  243. data/lib/virtualbox/com/interface/3.1.x/virtual_system_description.rb +0 -19
  244. data/lib/virtualbox/com/interface/3.1.x/virtual_system_description_type.rb +0 -14
  245. data/lib/virtualbox/com/interface/3.1.x/virtual_system_description_value_type.rb +0 -11
  246. data/lib/virtualbox/com/interface/3.1.x/virtualbox.rb +0 -67
  247. data/lib/virtualbox/com/interface/3.1.x/vrdp_server.rb +0 -19
  248. data/lib/virtualbox/com/interface/3.2.x/audio_adapter.rb +0 -15
  249. data/lib/virtualbox/com/interface/3.2.x/audio_controller_type.rb +0 -11
  250. data/lib/virtualbox/com/interface/3.2.x/bios_boot_menu_mode.rb +0 -11
  251. data/lib/virtualbox/com/interface/3.2.x/console.rb +0 -50
  252. data/lib/virtualbox/com/interface/3.2.x/device_type.rb +0 -11
  253. data/lib/virtualbox/com/interface/3.2.x/dhcp_server.rb +0 -22
  254. data/lib/virtualbox/com/interface/3.2.x/firmware_type.rb +0 -11
  255. data/lib/virtualbox/com/interface/3.2.x/host.rb +0 -43
  256. data/lib/virtualbox/com/interface/3.2.x/host_network_interface.rb +0 -30
  257. data/lib/virtualbox/com/interface/3.2.x/host_network_interface_medium_type.rb +0 -11
  258. data/lib/virtualbox/com/interface/3.2.x/host_network_interface_type.rb +0 -11
  259. data/lib/virtualbox/com/interface/3.2.x/host_usb_device.rb +0 -13
  260. data/lib/virtualbox/com/interface/3.2.x/hw_virt_ex_property_type.rb +0 -11
  261. data/lib/virtualbox/com/interface/3.2.x/machine_state.rb +0 -14
  262. data/lib/virtualbox/com/interface/3.2.x/medium_attachment.rb +0 -18
  263. data/lib/virtualbox/com/interface/3.2.x/medium_format.rb +0 -18
  264. data/lib/virtualbox/com/interface/3.2.x/medium_state.rb +0 -11
  265. data/lib/virtualbox/com/interface/3.2.x/medium_variant.rb +0 -11
  266. data/lib/virtualbox/com/interface/3.2.x/network_adapter_type.rb +0 -11
  267. data/lib/virtualbox/com/interface/3.2.x/network_attachment_type.rb +0 -11
  268. data/lib/virtualbox/com/interface/3.2.x/nsiexception.rb +0 -23
  269. data/lib/virtualbox/com/interface/3.2.x/nsisupports.rb +0 -15
  270. data/lib/virtualbox/com/interface/3.2.x/port_mode.rb +0 -11
  271. data/lib/virtualbox/com/interface/3.2.x/serial_port.rb +0 -19
  272. data/lib/virtualbox/com/interface/3.2.x/session_state.rb +0 -11
  273. data/lib/virtualbox/com/interface/3.2.x/session_type.rb +0 -11
  274. data/lib/virtualbox/com/interface/3.2.x/shared_folder.rb +0 -17
  275. data/lib/virtualbox/com/interface/3.2.x/snapshot.rb +0 -20
  276. data/lib/virtualbox/com/interface/3.2.x/usb_device.rb +0 -24
  277. data/lib/virtualbox/com/interface/3.2.x/usb_device_filter.rb +0 -23
  278. data/lib/virtualbox/com/interface/3.2.x/virtual_system_description_type.rb +0 -14
  279. data/lib/virtualbox/com/interface/3.2.x/vrdp_auth_type.rb +0 -11
  280. data/lib/virtualbox/com/interface/3.2.x/vrdp_server.rb +0 -21
  281. data/lib/virtualbox/ext/glob_loader.rb +0 -35
@@ -12,7 +12,7 @@ module VirtualBox
12
12
  class ReadonlyVMStateException < Exception; end
13
13
  class UnsupportedVersionException < Exception; end
14
14
 
15
- class FFIException < Exception
15
+ class COMException < Exception
16
16
  attr_accessor :data
17
17
 
18
18
  def initialize(data={})
@@ -23,17 +23,18 @@ module VirtualBox
23
23
 
24
24
  # FFI Exceptions, these exceptions are only raised on *nix machines
25
25
  # when some error occurs in the foreign function interface.
26
- class ObjectNotFoundException < FFIException; end
27
- class InvalidVMStateException < FFIException; end
28
- class VMErrorException < FFIException; end
29
- class FileErrorException < FFIException; end
30
- class SubsystemException < FFIException; end
31
- class PDMException < FFIException; end
32
- class InvalidObjectStateException < FFIException; end
33
- class HostErrorException < FFIException; end
34
- class NotSupportedException < FFIException; end
35
- class XMLErrorException < FFIException; end
36
- class InvalidSessionStateException < FFIException; end
37
- class ObjectInUseException < FFIException; end
26
+ class ObjectNotFoundException < COMException; end
27
+ class InvalidVMStateException < COMException; end
28
+ class VMErrorException < COMException; end
29
+ class FileErrorException < COMException; end
30
+ class SubsystemException < COMException; end
31
+ class PDMException < COMException; end
32
+ class InvalidObjectStateException < COMException; end
33
+ class HostErrorException < COMException; end
34
+ class NotSupportedException < COMException; end
35
+ class XMLErrorException < COMException; end
36
+ class InvalidSessionStateException < COMException; end
37
+ class ObjectInUseException < COMException; end
38
+ class InvalidArgException < COMException; end
38
39
  end
39
40
  end
@@ -1,3 +1,5 @@
1
+ require 'virtualbox/abstract_model/dirty'
2
+
1
3
  module VirtualBox
2
4
  # Represents "extra data" which can be set on a specific
3
5
  # virtual machine or on VirtualBox as a whole. Extra data is persistent
@@ -132,7 +132,7 @@ module VirtualBox
132
132
 
133
133
  validates_presence_of :location
134
134
 
135
- max_vdi_size = Global.global.system_properties.max_vdi_size
135
+ max_vdi_size = Global.global.system_properties.info_vdi_size
136
136
  validates_inclusion_of :logical_size, :in => (0..max_vdi_size), :message => "must be between 0 and #{max_vdi_size}."
137
137
  end
138
138
 
@@ -91,7 +91,7 @@ module VirtualBox
91
91
  def attached_vms
92
92
  parent.parent.vms.find_all do |vm|
93
93
  result = vm.network_adapters.find do |adapter|
94
- adapter.enabled? && adapter.host_interface == name
94
+ adapter.enabled? && adapter.host_only_interface == name
95
95
  end
96
96
 
97
97
  !result.nil?
@@ -1,3 +1,5 @@
1
+ require 'virtualbox/ext/platform'
2
+
1
3
  module VirtualBox
2
4
  # Used by the rest of the VirtualBox library to interface with
3
5
  # the VirtualBox XPCOM library (VBoxXPCOMC). Most users will never need
@@ -1,3 +1,5 @@
1
+ require 'virtualbox/ext/subclass_listing'
2
+
1
3
  module VirtualBox
2
4
  # Represents a medium object part of VirtualBox. A medium is a
3
5
  # hard drive, DVD, floppy disk, etc. Each of these share common
@@ -44,7 +44,7 @@ module VirtualBox
44
44
  # attribute :cable_connected, :boolean => true
45
45
  # attribute :nat_network
46
46
  # attribute :internal_network
47
- # attribute :host_interface
47
+ # attribute :host_only_interface
48
48
  # attribute :interface, :readonly => true, :property => false
49
49
  #
50
50
  class NetworkAdapter < AbstractModel
@@ -57,7 +57,7 @@ module VirtualBox
57
57
  attribute :cable_connected, :boolean => true
58
58
  attribute :nat_network
59
59
  attribute :internal_network
60
- attribute :host_interface
60
+ attribute :host_only_interface
61
61
  attribute :interface, :readonly => true, :property => false
62
62
  relationship :nat_driver, :NATEngine, :lazy => true
63
63
 
@@ -70,8 +70,9 @@ module VirtualBox
70
70
  def populate_relationship(caller, imachine)
71
71
  relation = Proxies::Collection.new(caller)
72
72
 
73
- # Get the count of network adapters
74
- count = imachine.parent.system_properties.network_adapter_count
73
+ # Get the count of network adapters for a chipset of the type
74
+ # that is our machine.
75
+ count = imachine.parent.system_properties.get_max_network_adapters(imachine.chipset_type)
75
76
 
76
77
  count.times do |i|
77
78
  relation << new(caller, imachine.get_network_adapter(i))
@@ -125,35 +126,18 @@ module VirtualBox
125
126
  # exists.
126
127
  def host_interface_object
127
128
  VirtualBox::Global.global.host.network_interfaces.find do |ni|
128
- ni.name == host_interface
129
+ ni.name == host_only_interface
129
130
  end
130
131
  end
131
132
 
132
133
  # Save a network adapter.
133
134
  def save
134
135
  modify_adapter do |adapter|
135
- save_attachment_type(adapter)
136
136
  save_changed_interface_attributes(adapter)
137
137
  save_relationships
138
138
  end
139
139
  end
140
140
 
141
- # Saves the attachment type. This should never be called directly. Instead,
142
- # {save} should be called, which will call this method if appropriate.
143
- def save_attachment_type(adapter)
144
- return unless attachment_type_changed?
145
-
146
- mapping = {
147
- :nat => :attach_to_nat,
148
- :bridged => :attach_to_bridged_interface,
149
- :internal => :attach_to_internal_network,
150
- :host_only => :attach_to_host_only_interface
151
- }
152
-
153
- adapter.send(mapping[attachment_type])
154
- clear_dirty!(:attachment_type)
155
- end
156
-
157
141
  # Opens a session, yields the adapter and then saves the machine at
158
142
  # the end
159
143
  def modify_adapter
@@ -0,0 +1,6 @@
1
+ module VirtualBox
2
+ module Proxies
3
+ autoload :Collection, 'virtualbox/proxies/collection'
4
+ end
5
+ end
6
+
@@ -13,7 +13,6 @@ module VirtualBox
13
13
  attribute :min_guest_cpu_count, :readonly => true
14
14
  attribute :max_guest_cpu_count, :readonly => true
15
15
  attribute :info_vd_size, :readonly => true
16
- attribute :network_adapter_count, :readonly => true
17
16
  attribute :serial_port_count, :readonly => true
18
17
  attribute :parallel_port_count, :readonly => true
19
18
  attribute :max_boot_position, :readonly => true
@@ -1,36 +1,34 @@
1
1
  module VirtualBox
2
- VERSION = "0.8.6"
2
+ VERSION = "0.9.0"
3
3
 
4
- module Version
5
- # Returns a boolean denoting whether the current VirtualBox
6
- # version is supported or not. This will return `false` if the
7
- # version is invalid, the version is not detected, etc. That means
8
- # that even if VirtualBox is not installed, this will simply
9
- # return `false`.
10
- #
11
- # @return [Boolean]
12
- def supported?
13
- !version.nil?
14
- end
4
+ # Returns a boolean denoting whether the current VirtualBox
5
+ # version is supported or not. This will return `false` if the
6
+ # version is invalid, the version is not detected, etc. That means
7
+ # that even if VirtualBox is not installed, this will simply
8
+ # return `false`.
9
+ #
10
+ # @return [Boolean]
11
+ def self.supported?
12
+ !version.nil?
13
+ end
15
14
 
16
- # Returns the version string of the VirtualBox installed, ex. "3.1.6"
17
- # This string is cached since the version typically doesn't change
18
- # during runtime. If you must refresh the version, send the boolean
19
- # `true` as the first parameter.
20
- def version(refresh=false)
21
- @_version = Lib.lib.virtualbox.version if @_version.nil? || refresh
22
- @_version
23
- rescue Exception
24
- nil
25
- end
15
+ # Returns the version string of the VirtualBox installed, ex. "3.1.6"
16
+ # This string is cached since the version typically doesn't change
17
+ # during runtime. If you must refresh the version, send the boolean
18
+ # `true` as the first parameter.
19
+ def self.version(refresh=false)
20
+ @_version = Lib.lib.virtualbox.version if @_version.nil? || refresh
21
+ @_version
22
+ rescue Exception
23
+ nil
24
+ end
26
25
 
27
- # Returns the revision string of the VirtualBox installed, ex. "51742"
28
- # This string is cached since the revision doesn't typically change during
29
- # runtime. If you must refresh the version, send the boolean `true` as the
30
- # first parameter.
31
- def revision(refresh=false)
32
- @_revision = Lib.lib.virtualbox.revision.to_s if @_revision.nil? || refresh
33
- @_revision
34
- end
26
+ # Returns the revision string of the VirtualBox installed, ex. "51742"
27
+ # This string is cached since the revision doesn't typically change during
28
+ # runtime. If you must refresh the version, send the boolean `true` as the
29
+ # first parameter.
30
+ def self.revision(refresh=false)
31
+ @_revision = Lib.lib.virtualbox.revision.to_s if @_revision.nil? || refresh
32
+ @_revision
35
33
  end
36
34
  end
@@ -133,52 +133,57 @@ module VirtualBox
133
133
  # relationship :current_snapshot, :Snapshot
134
134
  #
135
135
  class VM < AbstractModel
136
- attribute :uuid, :readonly => true, :property => :id
137
- attribute :name
138
- attribute :os_type_id
139
- attribute :description
140
- attribute :memory_size
141
- attribute :memory_balloon_size
142
- attribute :vram_size
143
- attribute :cpu_count
144
- attribute :accelerate_3d_enabled, :boolean => true
145
- attribute :accelerate_2d_video_enabled, :boolean => true
146
- attribute :clipboard_mode
147
- attribute :monitor_count
148
- attribute :state, :readonly => true
149
- attribute :accessible, :readonly => true, :boolean => true
150
- attribute :hardware_version
151
- attribute :hardware_uuid
152
- attribute :firmware_type
153
- attribute :snapshot_folder
154
- attribute :settings_file_path, :readonly => true
155
- attribute :last_state_change, :readonly => true
156
- attribute :state_file_path, :readonly => true
157
- attribute :log_folder, :readonly => true
158
- attribute :snapshot_count, :readonly => true
159
- attribute :current_state_modified, :readonly => true
160
- attribute :guest_property_notification_patterns
161
- attribute :teleporter_enabled, :boolean => true
162
- attribute :teleporter_port
163
- attribute :teleporter_address
164
- attribute :teleporter_password
165
- attribute :boot_order,
166
- :property_getter => Proc.new { |instance, *args| instance.get_boot_order(*args) },
167
- :property_setter => Proc.new { |instance, *args| instance.set_boot_order(*args) }
136
+ attribute_scope :lazy => true do
137
+ attribute :uuid, :readonly => true, :property => :id
138
+ attribute :name
139
+ attribute :os_type_id
140
+ attribute :description
141
+ attribute :memory_size
142
+ attribute :memory_balloon_size
143
+ attribute :vram_size
144
+ attribute :cpu_count
145
+ attribute :cpu_hot_plug_enabled, :boolean => true
146
+ attribute :cpu_execution_cap
147
+ attribute :accelerate_3d_enabled, :boolean => true
148
+ attribute :accelerate_2d_video_enabled, :boolean => true
149
+ attribute :clipboard_mode
150
+ attribute :monitor_count
151
+ attribute :state, :readonly => true
152
+ attribute :accessible, :readonly => true, :boolean => true
153
+ attribute :hardware_version
154
+ attribute :hardware_uuid
155
+ attribute :firmware_type
156
+ attribute :snapshot_folder
157
+ attribute :settings_file_path, :readonly => true
158
+ attribute :last_state_change, :readonly => true
159
+ attribute :state_file_path, :readonly => true
160
+ attribute :log_folder, :readonly => true
161
+ attribute :snapshot_count, :readonly => true
162
+ attribute :current_state_modified, :readonly => true
163
+ attribute :guest_property_notification_patterns
164
+ attribute :teleporter_enabled, :boolean => true
165
+ attribute :teleporter_port
166
+ attribute :teleporter_address
167
+ attribute :teleporter_password
168
+ attribute :boot_order,
169
+ :property_getter => Proc.new { |instance, *args| instance.get_boot_order(*args) },
170
+ :property_setter => Proc.new { |instance, *args| instance.set_boot_order(*args) }
171
+ end
172
+
168
173
  attribute :interface, :readonly => true, :property => false
169
- relationship :audio_adapter, :AudioAdapter
170
- relationship :bios, :BIOS
171
- relationship :hw_virt, :HWVirtualization
172
- relationship :cpu, :CPU
173
- relationship :vrde_server, :VRDEServer
174
- relationship :storage_controllers, :StorageController, :dependent => :destroy
175
- relationship :medium_attachments, :MediumAttachment
176
- relationship :shared_folders, :SharedFolder
177
- relationship :extra_data, :ExtraData
178
- relationship :forwarded_ports, :ForwardedPort, :version => "3.1"
179
- relationship :network_adapters, :NetworkAdapter
180
- relationship :usb_controller, :USBController
181
- relationship :current_snapshot, :Snapshot
174
+ relationship :audio_adapter, :AudioAdapter, :lazy => true
175
+ relationship :bios, :BIOS, :lazy => true
176
+ relationship :hw_virt, :HWVirtualization, :lazy => true
177
+ relationship :cpu, :CPU, :lazy => true
178
+ relationship :vrde_server, :VRDEServer, :lazy => true
179
+ relationship :storage_controllers, :StorageController, :dependent => :destroy, :lazy => true
180
+ relationship :medium_attachments, :MediumAttachment, :lazy => true
181
+ relationship :shared_folders, :SharedFolder, :lazy => true
182
+ relationship :extra_data, :ExtraData, :lazy => true
183
+ relationship :forwarded_ports, :ForwardedPort, :version => "3.1", :lazy => true
184
+ relationship :network_adapters, :NetworkAdapter, :lazy => true
185
+ relationship :usb_controller, :USBController, :lazy => true
186
+ relationship :current_snapshot, :Snapshot, :lazy => true
182
187
 
183
188
  class << self
184
189
  # Returns an array of all available VMs.
@@ -193,7 +198,12 @@ module VirtualBox
193
198
  #
194
199
  # @return [VM]
195
200
  def find(name)
196
- all.detect { |o| o.name == name || o.uuid == name }
201
+ new(Lib.lib.virtualbox.find_machine(name))
202
+ rescue Exceptions::ObjectNotFoundException
203
+ nil
204
+ rescue Exceptions::COMException
205
+ # NOTE: This only happens on JRuby/Windows
206
+ nil
197
207
  end
198
208
 
199
209
  # Imports a VM, blocking the entire thread during this time.
@@ -250,12 +260,6 @@ module VirtualBox
250
260
  end
251
261
 
252
262
  def initialize_attributes(machine)
253
- # Load the interface attributes
254
- load_interface_attributes(machine)
255
-
256
- # Setup the relationships
257
- populate_relationships(machine)
258
-
259
263
  # Clear dirtiness, since this should only be called initially and
260
264
  # therefore shouldn't affect dirtiness
261
265
  clear_dirty!
@@ -264,11 +268,26 @@ module VirtualBox
264
268
  existing_record!
265
269
  end
266
270
 
271
+ def load_attribute(key)
272
+ read_interface_attribute(key, interface)
273
+ end
274
+
275
+ def load_relationship(name)
276
+ # Load only the requested relationship
277
+ populate_relationship(name, interface)
278
+ end
279
+
267
280
  # Reload the model so that all the attributes and relationships are
268
281
  # up to date. This method will automatically discard any changes to
269
282
  # the VM and any of its relationships.
270
283
  def reload
284
+ # Reset relationships and attributes
285
+ reset_attributes
286
+ reset_relationships
287
+
288
+ # Initialize again
271
289
  initialize_attributes(interface)
290
+
272
291
  self
273
292
  end
274
293
 
@@ -554,14 +573,15 @@ module VirtualBox
554
573
  # also unregister attached media. If set to `:delete`, it will
555
574
  # not only unregister attached media, but will also physically
556
575
  # remove their respective data.
557
- def destroy(*args)
576
+ def destroy
558
577
  # Do a full cleanup on the machine, then delete all the media attached
559
578
  media = interface.unregister(:full)
560
579
 
561
580
  if !media.empty?
562
- if Platform.windows? && !Platform.jruby?
581
+ if Platform.windows?
563
582
  # The MSCOM interface in CRuby to delete media is broken,
564
- # so we do this ghettoness.
583
+ # so we do this ghettoness. Also, in JRuby, passing an array
584
+ # to objects is broken. So once again, we do this.
565
585
  path = interface.settings_file_path
566
586
 
567
587
  # A simple sanity check to make sure we don't attempt to delete
@@ -11,8 +11,5 @@ require 'virtualbox'
11
11
  class Test::Unit::TestCase
12
12
  end
13
13
 
14
- # Initialize the FFI stuff. This is typically done dynamically when
15
- # FFI is initialized (on non-windows machines). Since the tests test
16
- # the FFI classes, we force initialize a specific version here. It
17
- # doesn't matter what version, since no actual FFI calls are made.
18
- VirtualBox::COM::FFI.setup("3.2.x") unless defined?(VirtualBox::COM::FFI::Version_3_2_X)
14
+ # Set the interface version manually since we don't do detection in tests
15
+ VirtualBox::COM::Util.set_interface_version("4.0.x")
@@ -194,6 +194,28 @@ class AttributableTest < Test::Unit::TestCase
194
194
  end
195
195
  end
196
196
 
197
+ context "resetting attributes" do
198
+ class ResetAttributeModel < AttributeModel
199
+ attribute :normal
200
+ attribute :lazy, :lazy => true
201
+ end
202
+
203
+ setup do
204
+ @model = ResetAttributeModel.new
205
+ @model.populate_attributes({
206
+ :normal => "normal",
207
+ :lazy => "lazy"
208
+ })
209
+ end
210
+
211
+ should "only reset the lazy attributes" do
212
+ assert @model.loaded_attribute?(:lazy)
213
+ @model.reset_attributes
214
+ assert !@model.loaded_attribute?(:lazy)
215
+ assert_equal "normal", @model.normal
216
+ end
217
+ end
218
+
197
219
  context "reading and writing attributes" do
198
220
  class VersionedAttributeModel < AttributeModel
199
221
  attribute :ver, :version => "3.1"
@@ -152,6 +152,27 @@ class RelatableTest < Test::Unit::TestCase
152
152
  end
153
153
  end
154
154
 
155
+ context "resetting relationships" do
156
+ class ResetRelatableModel < EmptyRelatableModel
157
+ relationship :foos, RelatableTest::Relatee
158
+ relationship :bars, RelatableTest::BarRelatee, :lazy => true
159
+ end
160
+
161
+ setup do
162
+ @model = ResetRelatableModel.new
163
+ end
164
+
165
+ should "reset only the lazy relationship" do
166
+ @model.relationship_data[:foos] = "YES"
167
+ @model.relationship_data[:bars] = "YES"
168
+
169
+ assert @model.loaded_relationship?(:bars)
170
+ @model.reset_relationships
171
+ assert !@model.loaded_relationship?(:bars)
172
+ assert_equal "YES", @model.foos
173
+ end
174
+ end
175
+
155
176
  context "lazy relationships" do
156
177
  class LazyRelatableModel < EmptyRelatableModel
157
178
  relationship :foos, RelatableTest::Relatee, :lazy => true