def from_descriptor(spec_hash={})
self.name = spec_hash["Name"]
self.version = spec_hash["Version"] || "0.0"
self.architecture = spec_hash["Architecture"] || "noarch"
self.display_name = spec_hash["Display-Name"] || "#{self.name}-#{self.version}-#{self.architecture}"
self.license = spec_hash["License"] || "unknown"
self.license_url = spec_hash["License-Url"] || ""
self.vendor = spec_hash["Vendor"] || "unknown"
self.description = spec_hash["Description"] || ""
self.provides_feature = spec_hash["Provides"] || []
self.requires_feature = spec_hash["Requires"] || []
self.conflicts_feature = spec_hash["Conflicts"] || []
self.requires = spec_hash["Native-Requires"] || []
self.categories = spec_hash["Categories"] || ["cartridge"]
self.website = spec_hash["Website"] || ""
self.suggests_feature = spec_hash["Suggests"] || []
self.help_topics = spec_hash["Help-Topics"] || {}
self.cart_data_def = spec_hash["Cart-Data"] || {}
self.provides_feature = [self.provides_feature] if self.provides_feature.class == String
self.requires_feature = [self.requires_feature] if self.requires_feature.class == String
self.conflicts_feature = [self.conflicts_feature] if self.conflicts_feature.class == String
self.requires = [self.requires] if self.requires.class == String
if spec_hash.has_key?("Profiles")
spec_hash["Profiles"].each do |pname, p|
profile = Profile.new.from_descriptor(p)
profile.name = pname
add_profile(profile)
end
else
["Name", "Version", "Architecture", "DisplayName", "License",
"Provides", "Requires", "Conflicts", "Native-Requires"].each do |k|
spec_hash.delete(k)
end
p = Profile.new.from_descriptor(spec_hash)
p.name = "default"
p.generated = true
add_profile(p)
end
self.default_profile = spec_hash["Default-Profile"] || self.profiles.first.name
self
end