Class: Rip::PackageManager
- Inherits:
-
Object
- Object
- Rip::PackageManager
- Defined in:
- lib/rip/package_manager.rb
Instance Attribute Summary collapse
-
#dependencies ⇒ Object
readonly
Returns the value of attribute dependencies.
-
#dependents ⇒ Object
readonly
Returns the value of attribute dependents.
-
#env ⇒ Object
readonly
Returns the value of attribute env.
-
#sources ⇒ Object
readonly
Returns the value of attribute sources.
-
#versions ⇒ Object
readonly
Returns the value of attribute versions.
Instance Method Summary collapse
- #add_files(name, file_list = []) ⇒ Object
- #add_package(package, parent = nil) ⇒ Object
- #dir ⇒ Object
- #files(name) ⇒ Object
-
#initialize(env = nil) ⇒ PackageManager
constructor
A new instance of PackageManager.
- #inspect ⇒ Object
- #installed?(name) ⇒ Boolean
- #load ⇒ Object
- #marshal_payload ⇒ Object
- #marshal_read(data) ⇒ Object
- #package(name) ⇒ Object
- #package_names ⇒ Object
- #package_version(name) ⇒ Object
- #packages ⇒ Object
- #packages_that_depend_on(name) ⇒ Object
- #path ⇒ Object
- #remove_package(package) ⇒ Object
- #save ⇒ Object
- #unzip(data) ⇒ Object
- #zip(data) ⇒ Object
Constructor Details
#initialize(env = nil) ⇒ PackageManager
Returns a new instance of PackageManager.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/rip/package_manager.rb', line 36 def initialize(env = nil) @env = env || Rip::Env.active load # key is the package name, value is the current # installed version @versions ||= {} # key is the package name, value is an array of # libraries it depend on @dependents ||= {} # key is the package name, value is an array of # libraries that depend on it @dependencies ||= {} # key is the package name, value is the source @sources ||= {} # key is the package name, value is the installed # files @files ||= {} end |
Instance Attribute Details
#dependencies ⇒ Object (readonly)
Returns the value of attribute dependencies.
34 35 36 |
# File 'lib/rip/package_manager.rb', line 34 def dependencies @dependencies end |
#dependents ⇒ Object (readonly)
Returns the value of attribute dependents.
34 35 36 |
# File 'lib/rip/package_manager.rb', line 34 def dependents @dependents end |
#env ⇒ Object (readonly)
Returns the value of attribute env.
34 35 36 |
# File 'lib/rip/package_manager.rb', line 34 def env @env end |
#sources ⇒ Object (readonly)
Returns the value of attribute sources.
34 35 36 |
# File 'lib/rip/package_manager.rb', line 34 def sources @sources end |
#versions ⇒ Object (readonly)
Returns the value of attribute versions.
34 35 36 |
# File 'lib/rip/package_manager.rb', line 34 def versions @versions end |
Instance Method Details
#add_files(name, file_list = []) ⇒ Object
121 122 123 124 125 |
# File 'lib/rip/package_manager.rb', line 121 def add_files(name, file_list = []) @files[name] ||= [] @files[name].concat file_list save end |
#add_package(package, parent = nil) ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/rip/package_manager.rb', line 93 def add_package(package, parent = nil) name = package.name version = package.version if @versions.has_key?(name) && @versions[name] != version raise VersionConflict.new(name, version, parent, @versions[name], @dependents[name].to_a) end if parent && !parent. @dependents[name] ||= Set.new @dependents[name].add(parent.name) @dependencies[parent.name] ||= Set.new @dependencies[parent.name].add(name) end # already installed? if @versions.has_key? name false else @versions[name] = version @sources[name] = package.source @files[name] = package.files true end ensure save end |
#dir ⇒ Object
144 145 146 |
# File 'lib/rip/package_manager.rb', line 144 def dir File.join(Rip.dir, @env) end |
#files(name) ⇒ Object
81 82 83 |
# File 'lib/rip/package_manager.rb', line 81 def files(name) Array(@files[name]) end |
#inspect ⇒ Object
60 61 62 |
# File 'lib/rip/package_manager.rb', line 60 def inspect "(#{self.class} dependencies=#{dependencies.inspect} dependents=#{dependents.inspect} sources=#{sources.inspect} versions=#{versions.inspect})" end |
#installed?(name) ⇒ Boolean
85 86 87 |
# File 'lib/rip/package_manager.rb', line 85 def installed?(name) @versions.has_key? name end |
#load ⇒ Object
155 156 157 |
# File 'lib/rip/package_manager.rb', line 155 def load marshal_read unzip(File.read(path)) if File.exists? path end |
#marshal_payload ⇒ Object
167 168 169 |
# File 'lib/rip/package_manager.rb', line 167 def marshal_payload Marshal.dump [ @versions, @dependents, @dependencies, @sources, @files ] end |
#marshal_read(data) ⇒ Object
171 172 173 |
# File 'lib/rip/package_manager.rb', line 171 def marshal_read(data) @versions, @dependents, @dependencies, @sources, @files = Marshal.load(data) end |
#package(name) ⇒ Object
72 73 74 75 |
# File 'lib/rip/package_manager.rb', line 72 def package(name) return unless @versions[name] Package.for(@sources[name], @versions[name], @files[name]) end |
#package_names ⇒ Object
68 69 70 |
# File 'lib/rip/package_manager.rb', line 68 def package_names @versions.keys end |
#package_version(name) ⇒ Object
89 90 91 |
# File 'lib/rip/package_manager.rb', line 89 def package_version(name) @versions[name] end |
#packages ⇒ Object
64 65 66 |
# File 'lib/rip/package_manager.rb', line 64 def packages @versions.keys.map { |name| package(name) } end |
#packages_that_depend_on(name) ⇒ Object
77 78 79 |
# File 'lib/rip/package_manager.rb', line 77 def packages_that_depend_on(name) (@dependents[name] || []).map { |name| package(name) } end |
#path ⇒ Object
140 141 142 |
# File 'lib/rip/package_manager.rb', line 140 def path File.join(dir, "#{@env}.ripenv") end |
#remove_package(package) ⇒ Object
127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/rip/package_manager.rb', line 127 def remove_package(package) name = package.name Array(@dependencies[name]).each do |dep| @dependents[dep].delete(name) if @dependents[dep].respond_to? :delete end @dependents.delete(name) @dependencies.delete(name) @versions.delete(name) save end |
#save ⇒ Object
148 149 150 151 152 153 |
# File 'lib/rip/package_manager.rb', line 148 def save File.open(path, 'w') do |f| f.puts zip(marshal_payload) f.flush end end |
#unzip(data) ⇒ Object
163 164 165 |
# File 'lib/rip/package_manager.rb', line 163 def unzip(data) Zlib::Inflate.inflate(data) end |
#zip(data) ⇒ Object
159 160 161 |
# File 'lib/rip/package_manager.rb', line 159 def zip(data) Zlib::Deflate.deflate(data) end |