Class: OpenShift::Cartridge

Inherits:
UserModel show all
Defined in:
lib/openshift-origin-common/models/cartridge.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from UserModel

#delete, find, find_all, find_by_uuid, #save

Methods inherited from Model

attr_accessor, attr_reader, attr_writer, #attributes, #attributes=, #deleted?, exclude_attributes, excludes_attributes, gen_uuid, include_attributes, includes_attributes, #new_record?, #persisted?, primary_key, require_update_attributes, requires_update_attributes, #reset_state, #to_xml

Constructor Details

#initializeCartridge

Returns a new instance of Cartridge.



10
11
12
13
14
# File 'lib/openshift-origin-common/models/cartridge.rb', line 10

def initialize
  super
  self.from_descriptor({"Name" => "unknown-cartridge"})
  self.profile_name_map = {}
end

Instance Attribute Details

#architectureObject

Returns the value of attribute architecture.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def architecture
  @architecture
end

#cart_data_defObject

Returns the value of attribute cart_data_def.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def cart_data_def
  @cart_data_def
end

#categoriesObject

Returns the value of attribute categories.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def categories
  @categories
end

#conflicts_featureObject

Returns the value of attribute conflicts_feature.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def conflicts_feature
  @conflicts_feature
end

#default_profileObject

Returns the value of attribute default_profile.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def default_profile
  @default_profile
end

#descriptionObject

Returns the value of attribute description.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def description
  @description
end

#display_nameObject

Returns the value of attribute display_name.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def display_name
  @display_name
end

#help_topicsObject

Returns the value of attribute help_topics.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def help_topics
  @help_topics
end

#licenseObject

Returns the value of attribute license.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def license
  @license
end

#license_urlObject

Returns the value of attribute license_url.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def license_url
  @license_url
end

#nameObject

Returns the value of attribute name.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def name
  @name
end

#pathObject

Returns the value of attribute path.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def path
  @path
end

#profile_name_mapObject

Returns the value of attribute profile_name_map.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def profile_name_map
  @profile_name_map
end

#provides_featureObject

Returns the value of attribute provides_feature.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def provides_feature
  @provides_feature
end

#requiresObject

Returns the value of attribute requires.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def requires
  @requires
end

#requires_featureObject

Returns the value of attribute requires_feature.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def requires_feature
  @requires_feature
end

#suggests_featureObject

Returns the value of attribute suggests_feature.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def suggests_feature
  @suggests_feature
end

#vendorObject

Returns the value of attribute vendor.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def vendor
  @vendor
end

#versionObject

Returns the value of attribute version.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def version
  @version
end

#websiteObject

Returns the value of attribute website.



3
4
5
# File 'lib/openshift-origin-common/models/cartridge.rb', line 3

def website
  @website
end

Instance Method Details

#add_profile(profile) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/openshift-origin-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

#all_capabilitiesObject



16
17
18
19
20
21
22
# File 'lib/openshift-origin-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

#find_profile(capability) ⇒ Object

Search for a profile that provides specified capabilities



53
54
55
56
57
58
59
60
61
62
# File 'lib/openshift-origin-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

#from_descriptor(spec_hash = {}) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/openshift-origin-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

#get_name_prefixObject



147
148
149
# File 'lib/openshift-origin-common/models/cartridge.rb', line 147

def get_name_prefix
  return "/cart-" + self.name
end

#profiles(name = nil) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/openshift-origin-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

#profiles=(data) ⇒ Object



24
25
26
27
28
# File 'lib/openshift-origin-common/models/cartridge.rb', line 24

def profiles=(data)
  data.each do |value|
    add_profile(value)
  end
end

#to_descriptorObject



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/openshift-origin-common/models/cartridge.rb', line 108

def to_descriptor
  h = {
    "Name" => self.name,
    "Display-Name" => self.display_name,
  }
  
  h["Architecture"] = self.architecture if self.architecture != "noarch"
  h["Version"] = self.version if self.version != "0.0"
  h["Description"] = self.description if self.description and !self.description.empty?
  h["License"] = self.license if self.license and !self.license.empty? and self.license != "unknown"
  h["License-Url"] = self.license_url if self.license_url and !self.license_url.empty?
  h["Categories"] = self.categories if self.categories and !self.categories.empty?
  h["Website"] = self.website if self.website and !self.website.empty?
  h["Help-Topics"] = self.help_topics if self.help_topics and !self.help_topics.empty?
  h["Cart-Data"] = self.cart_data_def if self.cart_data_def and !self.cart_data_def.empty?

  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 and !self.vendor.empty? and self.vendor != "unknown"
  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