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
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