Class: VirtualBox::Global
- Inherits:
-
AbstractModel
- Object
- AbstractModel
- VirtualBox::Global
- Defined in:
- lib/virtualbox/global.rb
Overview
Represents the VirtualBox main configuration file (VirtualBox.xml) which VirtualBox uses to keep track of all known virtual machines and images. This “global” configuration has many relationships which allow the user to retrieve a list of all VMs, media, global extra data, etc. Indeed, even methods like VM.all are implemented using this class.
# Getting Global Data
To retrieve the global data, use ‘Global.global`. This value is cached between calls, so subsequent calls will not go through the entire parsing process. To force a reload, set the `reload` parameter to true. Besides setting the parameter explicitly, some actions will implicitly force the global data to reload on the next call, such as saving a VM or destroying an image, for example.
# Retrieve global data for the first time. This will parse all the
# data.
global_object = VirtualBox::Global.global
# Subsequent calls are near-instant:
VirtualBox::Global.global
# Or we can choose to reload the data...
reloaded_object = VirtualBox::Global.global(true)
# Relationships
While a global object doesn’t have attributes, it does have many relationships. The relationships are listed below. If you don’t understand this, read AbstractModel::Relatable.
relationship :vms, VM
relationship :media, Media
relationship :extra_data, ExtraData
relationship :system_properties, :SystemProperties, :lazy => true
Constant Summary collapse
- @@global_data =
nil
Class Method Summary collapse
-
.global(reload = false) ⇒ Global
Retrieves the global data.
-
.reset! ⇒ Object
Resets the global data singleton.
Instance Method Summary collapse
-
#initialize(lib) ⇒ Global
constructor
A new instance of Global.
- #load_relationship(name) ⇒ Object
Methods inherited from AbstractModel
#destroy, #errors, errors_for_relationship, #existing_record!, #inspect, #lazy_attribute?, #lazy_relationship?, #new_record!, #new_record?, #parent_machine, #populate_attributes, #populate_relationship, #populate_relationships, reload!, #reload!, reload?, reloaded!, #save, #save!, #save_attribute, #save_changed_interface_attributes, #save_interface_attribute, #set_relationship, #validate, #write_attribute
Methods included from AbstractModel::Validatable
#__validates_extract_options, #add_error, #clear_errors, #errors, #errors_on, #full_error_messages, #valid?, #validate, #validates_format_of, #validates_inclusion_of, #validates_numericality_of, #validates_presence_of
Methods included from AbstractModel::Relatable
#destroy_relationship, #destroy_relationships, #has_relationship?, included, #lazy_relationship?, #loaded_relationship?, #populate_relationship, #populate_relationships, #read_relationship, #relationship_class, #relationship_data, #save_relationship, #save_relationships, #set_relationship
Methods included from AbstractModel::VersionMatcher
#assert_version_match, #split_version, #version_match?
Methods included from AbstractModel::Dirty
#changed?, #changes, #clear_dirty!, #ignore_dirty, #method_missing, #set_dirty!
Methods included from AbstractModel::InterfaceAttributes
#load_interface_attribute, #load_interface_attributes, #save_interface_attribute, #save_interface_attributes, #spec_to_proc
Methods included from AbstractModel::Attributable
#attributes, #has_attribute?, included, #lazy_attribute?, #loaded_attribute?, #populate_attributes, #read_attribute, #readonly_attribute?, #write_attribute
Methods included from Logger
included, #logger, #logger_output=
Constructor Details
#initialize(lib) ⇒ Global
Returns a new instance of Global.
73 74 75 76 77 78 |
# File 'lib/virtualbox/global.rb', line 73 def initialize(lib) write_attribute(:lib, lib) # Required to load lazy relationships existing_record! end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class VirtualBox::AbstractModel::Dirty
Class Method Details
.global(reload = false) ⇒ Global
Retrieves the global data. The return value of this call is cached, and can be reloaded by setting the ‘reload` parameter to true. Besides explicitly setting the parameter, some actions within the library force global to reload itself on the next call, such as saving a VM, or destroying an image.
59 60 61 62 63 64 65 |
# File 'lib/virtualbox/global.rb', line 59 def global(reload=false) if !@@global_data || reload @@global_data = new(Lib.lib) end @@global_data end |
.reset! ⇒ Object
Resets the global data singleton. This is used for testing purposes.
68 69 70 |
# File 'lib/virtualbox/global.rb', line 68 def reset! @@global_data = nil end |
Instance Method Details
#load_relationship(name) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/virtualbox/global.rb', line 80 def load_relationship(name) # "Lazy loaded" associations table. These associate the relationship # with the data it needs to load. The data is wrapped in lambdas so # that the evaluation doesn't occur unless necessary. relationships = { :vms => lambda { lib.virtualbox.machines }, :media => lambda { lib }, :extra_data => lambda { lib.virtualbox }, :system_properties => lambda { lib.virtualbox.system_properties }, :host => lambda { lib.virtualbox.host }, :dhcp_servers => lambda { lib.virtualbox.dhcp_servers } } populate_relationship(name, relationships[name].call) end |