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