# File lib/stickshift-common/models/cartridge.rb, line 10 def initialize super self.from_descriptor({"Name" => "unknown-cartridge"}) self.profile_name_map = {} end
# File lib/stickshift-common/models/cartridge.rb, line 39 def add_profile(profile) profile_name_map_will_change! profiles_will_change! @profile_name_map = {} if @profile_name_map.nil? if profile.class == Profile @profile_name_map[profile.name] = profile else key = profile["name"] @profile_name_map[key] = Profile.new @profile_name_map[key].attributes=profile end end
# File lib/stickshift-common/models/cartridge.rb, line 16 def all_capabilities caps = self.provides_feature.dup self.profiles.each do |v| caps += v.provides end caps.uniq end
Search for a profile that provides specified capabilities
# File lib/stickshift-common/models/cartridge.rb, line 53 def find_profile(capability) if capability.nil? || self.provides_feature.include?(capability) return @profile_name_map[self.default_profile] end self.profiles.each do |p| return p if p.provides.include? capability end nil end
# File lib/stickshift-common/models/cartridge.rb, line 64 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
# File lib/stickshift-common/models/cartridge.rb, line 147 def get_name_prefix return "/cart-" + self.name end
# File lib/stickshift-common/models/cartridge.rb, line 30 def profiles(name=nil) @profile_name_map = {} if @profile_name_map.nil? if name.nil? @profile_name_map.values else @profile_name_map[name] end end
# File lib/stickshift-common/models/cartridge.rb, line 24 def profiles=(data) data.each do |value| add_profile(value) end end
# File lib/stickshift-common/models/cartridge.rb, line 108 def to_descriptor h = { "Name" => self.name, "Version" => self.version, "Architecture" => self.architecture, "Display-Name" => self.display_name, "Description" => self.description } h["License"] = self.license if self.license h["License-Url"] = self.license_url if self.license_url h["Categories"] = self.categories if self.categories h["Website"] = self.website if self.website h["Help-Topics"] = self.help_topics if self.help_topics h["Cart-Data"] = self.cart_data_def if self.cart_data_def h["Provides"] = self.provides_feature if self.provides_feature && !self.provides_feature.empty? h["Requires"] = self.requires_feature if self.requires_feature && !self.requires_feature.empty? h["Conflicts"] = self.conflicts_feature if self.conflicts_feature && !self.conflicts_feature.empty? h["Suggests"] = self.suggests_feature if self.suggests_feature && !self.suggests_feature.empty? h["Native-Requires"] = self.requires if self.requires && !self.requires.empty? h["Vendor"] = self.vendor if self.vendor h["Default-Profile"] = self.default_profile if self.profile_name_map && !self.profile_name_map[self.default_profile].nil? && !self.profile_name_map[self.default_profile].generated if self.profiles.length == 1 && self.profiles.first.generated profile_h = self.profiles.first.to_descriptor profile_h.delete("Name") h.merge!(profile_h) else h["Profiles"] = {} self.profiles.each do |v| h["Profiles"][v.name] = v.to_descriptor end end h end