class LicenseAcceptance::ProductReader
def read
def read logger.debug("Reading products and relationships...") location = get_location self.products = {} self.relationships = {} toml = Tomlrb.load_file(location, symbolize_keys: false) raise InvalidProductInfo.new(location) if toml.empty? || toml["products"].nil? || toml["relationships"].nil? for product in toml["products"] products[product["id"]] = Product.new( product["id"], product["pretty_name"], product["filename"], product["mixlib_name"], product["license_required_version"] ) end for parent_id, children in toml["relationships"] parent = products[parent_id] raise UnknownParent.new(parent_id) if parent.nil? # Its fine to not have a relationship entry, but not fine to have # a relationship where the children are nil or empty. if children.nil? || children.empty? || !children.is_a?(Array) raise NoChildRelationships.new(parent) end children.map! do |child_id| child = products[child_id] raise UnknownChild.new(child_id) if child.nil? child end relationships[parent] = children end logger.debug("Successfully read products and relationships") end