class MsPac
Public Class Methods
hilight?()
click to toggle source
# File lib/mspac.rb, line 38 def self.hilight? @@hilight ||= false return @@hilight end
new(hilight = false)
click to toggle source
# File lib/mspac.rb, line 55 def initialize(hilight = false) @@hilight = hilight FileUtils.mkdir_p(Pathname.new("~/.mspac").expand_path) @mspac_dir = Pathname.new("~/.mspac").expand_path @pm = PackageManager.new(self) @vcs = VersionControl.new("git") load_pellets end
Public Instance Methods
cached()
click to toggle source
# File lib/mspac.rb, line 8 def cached return @pellets.keys.sort.keep_if do |name| @pellets[name].cached? end end
clean()
click to toggle source
# File lib/mspac.rb, line 14 def clean @pellets.each do |name, pellet| pellet.purge if (pellet.cached? && !pellet.installed?) end # FIXME will miss pellets that get deleted by refresh end
install(pellets, force = false)
click to toggle source
# File lib/mspac.rb, line 64 def install(pellets, force = false) if (pellets.nil? || pellets.empty?) raise Error::MissingPellet.new end pellets.each do |name| if (@pellets.has_key?(name)) pellet = @pellets[name] if (pellet.installed?) pellet.update(force) elsif (pellet.cached?) pellet.link pellet.update(true) else pellet.fetch pellet.install end else raise Error::MissingPellet.new(name) end end end
installed()
click to toggle source
# File lib/mspac.rb, line 87 def installed return @pellets.keys.sort.delete_if do |name| !@pellets[name].installed? end end
lock(pellets)
click to toggle source
# File lib/mspac.rb, line 111 def lock(pellets) if (pellets.nil? || pellets.empty?) raise Error::MissingPellet.new end pellets.each do |name| if (@pellets.has_key?(name)) @pellets[name].lock else raise Error::MissingPellet.new(name) end end end
pellets()
click to toggle source
# File lib/mspac.rb, line 125 def pellets return @pellets.keys.sort end
refresh()
click to toggle source
# File lib/mspac.rb, line 129 def refresh puts hilight_status("Refreshing pellets...") Dir.chdir(@pellets_dir) do @vcs.update end end
remove(pellets, nosave)
click to toggle source
# File lib/mspac.rb, line 136 def remove(pellets, nosave) if (pellets.nil? || pellets.empty?) raise Error::MissingPellet.new end pellets.each do |name| if (@pellets.has_key?(name)) @pellets[name].remove(nosave) else raise Error::MissingPellet.new(name) end end end
search(regex)
click to toggle source
# File lib/mspac.rb, line 150 def search(regex) @pellets.keys.sort.each do |name| pellet = @pellets[name] name_match = pellet.name.match(/#{regex}/) desc_match = pellet.desc.match(/#{regex}/) puts pellet.to_s if (name_match || desc_match) end end
unlock(pellets)
click to toggle source
# File lib/mspac.rb, line 159 def unlock(pellets) if (pellets.nil? || pellets.empty?) raise Error::MissingPellet.new end pellets.each do |name| if (@pellets.has_key?(name)) @pellets[name].unlock else raise Error::MissingPellet.new(name) end end end
upgrade()
click to toggle source
# File lib/mspac.rb, line 173 def upgrade @pellets.keys.sort.each do |name| pellet = @pellets[name] pellet.update if (pellet.installed?) end end
Private Instance Methods
ensure_pellets_repo()
click to toggle source
# File lib/mspac.rb, line 21 def ensure_pellets_repo @pellets_dir = Pathname.new("~/.mspac/pellets").expand_path return if (@pellets_dir && @pellets_dir.exist?) puts hilight_status("Installing MsPac dependencies...") @pm.install(["git"]) if (ScoobyDoo.where_are_you("git").nil?) Dir.chdir(@mspac_dir) do @vcs.clone("https://gitlab.com/mjwhitta/pellets.git") end @pellets_dir = Pathname.new("~/.mspac/pellets").expand_path if (@pellets_dir.nil? || !@pellets_dir.exist?) raise Error::PelletRepo.new end end
hilight_error(error)
click to toggle source
# File lib/mspac.rb, line 43 def hilight_error(error) return error if (!@@hilight) return error.light_red end
hilight_status(status)
click to toggle source
# File lib/mspac.rb, line 49 def hilight_status(status) return status if (!@@hilight) return status.light_white end
load_pellets()
click to toggle source
# File lib/mspac.rb, line 93 def load_pellets ensure_pellets_repo @pellets = Hash.new Dir["#{@pellets_dir}/*.pellet"].each do |pellet| begin p = Pellet.new(JSON.parse(File.read(pellet)), @pm) @pellets[p.name] = p rescue JSON::ParserError => e puts hilight_error("#{pellet} is not valid JSON!") puts e.message.white.on_red rescue Exception => e puts e.message.white.on_red end end end