class Packer::DataObject
Attributes
data[RW]
key_dependencies[RW]
required[RW]
Public Class Methods
new()
click to toggle source
# File lib/packer/dataobject.rb, line 8 def initialize self.data = {} self.required = [] self.key_dependencies = {} end
Public Instance Methods
__add_array_of_array_of_strings(key, values, exclusives = [])
click to toggle source
# File lib/packer/dataobject.rb, line 82 def __add_array_of_array_of_strings(key, values, exclusives = []) self.__exclusive_key_error(key, exclusives) raise TypeError.new() unless Array.try_convert(values) self.data[key.to_s] = [] values.each do |v| raise TypeError.new() unless Array.try_convert(v) self.data[key.to_s].push(v.to_ary.map(&:to_s)) end end
__add_array_of_hashes(key, values, exclusives = [])
click to toggle source
# File lib/packer/dataobject.rb, line 94 def __add_array_of_hashes(key, values, exclusives = []) self.__exclusive_key_error(key, exclusives) raise TypeError.new() unless Array.try_convert(values) self.data[key.to_s] = [] values.each do |v| raise TypeError.new() unless v.is_a?(Hash) self.data[key.to_s].push({}) v.keys.each do |k| self.data[key.to_s][-1][k] = v[k].to_s end end end
__add_array_of_ints(key, values, exclusives = [])
click to toggle source
# File lib/packer/dataobject.rb, line 109 def __add_array_of_ints(key, values, exclusives = []) self.__exclusive_key_error(key, exclusives) raise TypeError.new() unless Array.try_convert(values) self.data[key.to_s] = values.to_ary.map(&:to_i) end
__add_array_of_strings(key, values, exclusives = [])
click to toggle source
# File lib/packer/dataobject.rb, line 75 def __add_array_of_strings(key, values, exclusives = []) self.__exclusive_key_error(key, exclusives) raise TypeError.new() unless Array.try_convert(values) self.data[key.to_s] = values.to_ary.map(&:to_s) end
__add_boolean(key, bool, exclusives = [])
click to toggle source
# File lib/packer/dataobject.rb, line 127 def __add_boolean(key, bool, exclusives = []) self.__exclusive_key_error(key, exclusives) self.data[key.to_s] = bool ? true : false end
__add_hash(key, data, exclusives = [])
click to toggle source
# File lib/packer/dataobject.rb, line 132 def __add_hash(key, data, exclusives = []) self.__exclusive_key_error(key, exclusives) raise TypeError.new() unless data.is_a?(Hash) self.data[key.to_s] = {} data.keys.each do |k| self.data[key.to_s][k] = data[k].to_s end end
__add_integer(key, data, exclusives = [])
click to toggle source
# File lib/packer/dataobject.rb, line 121 def __add_integer(key, data, exclusives = []) self.__exclusive_key_error(key, exclusives) self.data[key.to_s] = data.to_i end
__add_json(key, data, exclusives = [])
click to toggle source
# File lib/packer/dataobject.rb, line 143 def __add_json(key, data, exclusives = []) self.__exclusive_key_error(key, exclusives) raise TypeError.new() unless data.is_a?(Hash) self.data[key.to_s] = {} data.keys.each do |k| self.data[key.to_s][k] = data[k] end end
__add_string(key, data, exclusives = [])
click to toggle source
# File lib/packer/dataobject.rb, line 116 def __add_string(key, data, exclusives = []) self.__exclusive_key_error(key, exclusives) self.data[key.to_s] = data.to_s end
__exclusive_key_error(key, exclusives)
click to toggle source
# File lib/packer/dataobject.rb, line 66 def __exclusive_key_error(key, exclusives) exclusives.each do |e| if self.data.key? e raise ExclusiveKeyError.new("Only one of #{exclusives} can be used at a time") end end true end
add_key_dependencies(key_deps)
click to toggle source
# File lib/packer/dataobject.rb, line 55 def add_key_dependencies(key_deps) self.key_dependencies.merge!(key_deps) end
add_required(*keys)
click to toggle source
# File lib/packer/dataobject.rb, line 49 def add_required(*keys) keys.each do |k| self.required.push(k) end end
deep_copy()
click to toggle source
# File lib/packer/dataobject.rb, line 59 def deep_copy Marshal.load(Marshal.dump(self.data)) end
validate()
click to toggle source
# File lib/packer/dataobject.rb, line 17 def validate validate_required validate_key_dependencies # TODO(ianc) Also validate the data with the packer command? true end
validate_key_dependencies()
click to toggle source
# File lib/packer/dataobject.rb, line 40 def validate_key_dependencies self.data.keys.each do |data_key| next unless self.key_dependencies.key? data_key unless (self.key_dependencies[data_key] - self.data.keys).empty? raise DataValidationError.new("Key #{data_key} requires that keys be defined: #{self.key_dependencies[data_key]}") end end end
validate_required()
click to toggle source
# File lib/packer/dataobject.rb, line 25 def validate_required self.required.each do |r| if (r.is_a? Array) && !r.empty? if (r.length - (r - self.data.keys).length).zero? raise DataValidationError.new("Missing one required setting from the set #{r}") end if r.length - (r - self.data.keys).length > 1 raise DataValidationError.new("Found more than one exclusive setting in data from set #{r}") end elsif ! self.data.key? r raise DataValidationError.new("Missing required setting #{r}") end end end