virtualbox 0.8.6 → 0.9.0

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.
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