Class: Vagrant::Plugin::V1::Config
- Inherits:
-
Object
- Object
- Vagrant::Plugin::V1::Config
- Defined in:
- lib/vagrant/plugin/v1/config.rb
Overview
This is the base class for a configuration key defined for V1. Any configuration key plugins for V1 should inherit from this class.
Constant Summary collapse
- UNSET_VALUE =
This constant represents an unset value. This is useful so it is possible to know the difference between a configuration value that was never set, and a value that is nil (explicitly). Best practice is to initialize all variables to this value, then the #merge method below will “just work” in many cases.
Object.new
Instance Method Summary collapse
-
#finalize! ⇒ Object
This is called as a last-minute hook that allows the configuration object to finalize itself before it will be put into use.
-
#instance_variables_hash ⇒ Object
Returns the instance variables as a hash of key-value pairs.
-
#merge(other) ⇒ Object
Merge another configuration object into this one.
-
#set_options(options) ⇒ Object
Allows setting options from a hash.
-
#to_json(*a) ⇒ Object
Converts this configuration object to JSON.
-
#upgrade(new) ⇒ Object
This is called to upgrade this V1 config to V2.
-
#validate(env, errors) ⇒ Object
Called after the configuration is finalized and loaded to validate this object.
Instance Method Details
#finalize! ⇒ Object
This is called as a last-minute hook that allows the configuration object to finalize itself before it will be put into use. This is a useful place to do some defaults in the case the user didn’t configure something or so on.
An example of where this sort of thing is used or has been used: the “vm” configuration key uses this to make sure that at least one sub-VM has been defined: the default VM.
The configuration object is expected to mutate itself.
25 26 27 |
# File 'lib/vagrant/plugin/v1/config.rb', line 25 def finalize! # Default implementation is to do nothing. end |
#instance_variables_hash ⇒ Object
Returns the instance variables as a hash of key-value pairs.
81 82 83 84 85 86 |
# File 'lib/vagrant/plugin/v1/config.rb', line 81 def instance_variables_hash instance_variables.inject({}) do |acc, iv| acc[iv.to_s[1..-1]] = instance_variable_get(iv) acc end end |
#merge(other) ⇒ Object
Merge another configuration object into this one. This assumes that the other object is the same class as this one. This should not mutate this object, but instead should return a new, merged object.
The default implementation will simply iterate over the instance variables and merge them together, with this object overriding any conflicting instance variables of the older object. Instance variables starting with “__” (double underscores) will be ignored. This lets you set some sort of instance-specific state on your configuration keys without them being merged together later.
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/vagrant/plugin/v1/config.rb', line 43 def merge(other) result = self.class.new # Set all of our instance variables on the new class [self, other].each do |obj| obj.instance_variables.each do |key| # Ignore keys that start with a double underscore. This allows # configuration classes to still hold around internal state # that isn't propagated. if !key.to_s.start_with?("@__") result.instance_variable_set(key, obj.instance_variable_get(key)) end end end result end |
#set_options(options) ⇒ Object
Allows setting options from a hash. By default this simply calls the ‘#key=` method on the config class with the value, which is the expected behavior most of the time.
This is expected to mutate itself.
69 70 71 72 73 |
# File 'lib/vagrant/plugin/v1/config.rb', line 69 def () .each do |key, value| send("#{key}=", value) end end |
#to_json(*a) ⇒ Object
Converts this configuration object to JSON.
76 77 78 |
# File 'lib/vagrant/plugin/v1/config.rb', line 76 def to_json(*a) instance_variables_hash.to_json(*a) end |
#upgrade(new) ⇒ Object
This is called to upgrade this V1 config to V2. The parameter given is the full V2 configuration object, so you can do anything to it that you want.
No return value is expected, modifications should be made directly to the new V2 object.
96 97 |
# File 'lib/vagrant/plugin/v1/config.rb', line 96 def upgrade(new) end |
#validate(env, errors) ⇒ Object
Called after the configuration is finalized and loaded to validate this object.
107 108 |
# File 'lib/vagrant/plugin/v1/config.rb', line 107 def validate(env, errors) end |