Module: Lace

Extended by:
Lace
Included in:
Lace
Defined in:
lib/lace.rb,
lib/cmd/diff.rb,
lib/cmd/help.rb,
lib/cmd/list.rb,
lib/cmd/apply.rb,
lib/cmd/fetch.rb,
lib/cmd/setup.rb,
lib/cmd/where.rb,
lib/cmd/remove.rb,
lib/cmd/update.rb,
lib/lace/utils.rb,
lib/cmd/inspect.rb,
lib/cmd/upgrade.rb,
lib/cmd/activate.rb,
lib/cmd/validate.rb,
lib/lace/version.rb,
lib/cmd/deactivate.rb

Constant Summary collapse

VERSION =
"0.5.3"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#failedObject Also known as: failed?

Returns the value of attribute failed.



6
7
8
# File 'lib/lace.rb', line 6

def failed
  @failed
end

Class Method Details

.applyObject



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/cmd/apply.rb', line 10

def apply
  package_name = ARGV.shift
  raise ResourceNotSpecified unless package_name
  ohai "Applying package #{package_name}"
  package = Package.new(package_name, ARGV.first)

  diff = PackageUtils.diff(package_name)

  if diff.added.empty? && diff.removed.empty?
    puts 'Everything is already in sync. Nothing to do.'
    return
  end

  diff.added.each do |f|
    dest = f.as_dotfile(Dir.home, package.path)
    dest_path = dest.to_path.gsub(Dir.home, '$HOME')
    puts "Link #{f.basename} to #{dest_path}?"
    next unless ARGV.confirm?("Link #{f.basename} to #{dest_path}?")

    package.link_file_or_directory(f, dest, force: true)
    ohai "Linked"
  end

  diff.removed.each do |f|
    dest = f.as_dotfile(Dir.home, package.path)
    dest_path = dest.to_path.gsub(Dir.home, '$HOME')
    next unless ARGV.confirm?("Remove link for #{f.basename} from #{dest_path}?")

    package.unlink_file(f, force: true)
    ohai "Removed"
  end
end

.diffObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/cmd/diff.rb', line 9

def diff
  package_name = ARGV.shift
  raise ResourceNotSpecified unless package_name

  package = Package.new(package_name, ARGV.first)
  diff = PackageUtils.diff package_name

  if diff.added.empty? && diff.removed.empty?
    ohai 'Everything is already in sync.'
    return
  end

  ohai 'The following files would be added [+] or removed [-]'
  diff.added.each do |f|
    puts "[+] #{f.basename} -> #{f.as_dotfile(Dir.home, package.path).to_path.gsub(Dir.home, '$HOME')}"
  end
  diff.removed.each do |f|
    puts "[-] #{f.basename} -> #{f.as_dotfile(Dir.home, package.path).to_path.gsub(Dir.home, '$HOME')}"
  end
end

.pkgs_folderObject



9
10
11
12
13
14
15
16
# File 'lib/lace.rb', line 9

def self.pkgs_folder
  packages_folder = Pathname.new(ENV["HOME"]).join(".lace.pkgs")

  if ENV["LACE_FOLDER"]
    packages_folder = Pathname.new(ENV["LACE_FOLDER"])
  end
  packages_folder
end

.pstoreObject



18
19
20
# File 'lib/lace.rb', line 18

def self.pstore
  @pstore ||= PStore.new(pkgs_folder/".lace.pstore")
end

.setupObject



9
10
11
12
# File 'lib/cmd/setup.rb', line 9

def setup
  package_name = ARGV.shift
  PackageUtils.setup package_name
end

.validateObject



24
25
26
27
28
29
30
31
32
# File 'lib/cmd/validate.rb', line 24

def validate
  resource = ARGV.shift
  flavor = ARGV.shift
  raise ResourceNotSpecified unless resource

  validation = PackageValidator.new(PackageFacts.new(resource), flavor)
  puts ERB.new(VALIDATE, trim_mode: '-').result(binding)
  Lace.failed = true if validation.has_errors?
end

Instance Method Details

#activateObject



5
6
7
8
9
# File 'lib/cmd/activate.rb', line 5

def activate
  package_name = ARGV.shift
  raise ResourceNotSpecified unless package_name
  PackageUtils.activate package_name
end

#active_packagesObject



5
6
7
# File 'lib/cmd/list.rb', line 5

def active_packages
  installed_packages.select(&:is_active?)
end

#deactivateObject



5
6
7
8
9
# File 'lib/cmd/deactivate.rb', line 5

def deactivate
  package_name = ARGV.shift
  raise ResourceNotSpecified unless package_name
  PackageUtils.deactivate package_name
end

#fetchObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/cmd/fetch.rb', line 5

def fetch
  resource = ARGV.shift
  desired_package_name = ARGV.value "name"
  raise ResourceNotSpecified unless resource
  package_name, target_folder = PackageUtils.fetch(resource, desired_package_name)
  begin
    Package.new(package_name, false)
  rescue PackageFactsNotFound => e
    onoe e.message
    onoe "Removing fetched files"
    FileUtils.rm_rf(target_folder)
    Lace.failed = true
  end
end

#helpObject



34
35
36
# File 'lib/cmd/help.rb', line 34

def help
  puts HELP
end

#help_sObject



37
38
39
# File 'lib/cmd/help.rb', line 37

def help_s
  HELP
end

#inspectObject



17
18
19
20
21
22
# File 'lib/cmd/inspect.rb', line 17

def inspect
  resource = ARGV.shift
  raise ResourceNotSpecified unless resource
  package = PackagePresenter.new Package.new(resource, false)
  puts ERB.new(INSPECT).result(binding)
end

#installed_packagesObject



9
10
11
12
13
# File 'lib/cmd/list.rb', line 9

def installed_packages
  Dir.glob(File.join(Lace.pkgs_folder, "**")).sort.map do |p|
    Package.new(Pathname.new(p).basename.to_s, false)
  end
end

#listObject



15
16
17
18
19
20
21
22
23
# File 'lib/cmd/list.rb', line 15

def list
  if installed_packages.length > 0
    installed_packages.map do |package|
      puts "[#{Tty.green}#{package.is_active? ? "*" : " "}#{Tty.reset}] #{package.name}#{package.is_modified? ? " (has local changes)":""}"
    end
  else
    puts "There are no pkgs installed"
  end
end

#removeObject



5
6
7
8
9
# File 'lib/cmd/remove.rb', line 5

def remove
  package_name = ARGV.shift
  raise ResourceNotSpecified unless package_name
  PackageUtils.remove package_name
end

#system(cmd, *args) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
# File 'lib/lace/utils.rb', line 100

def system cmd, *args
  puts "#{cmd} #{args*' '}" if ARGV.verbose?
  fork do
    yield if block_given?
    args.collect!{|arg| arg.to_s}
    exec(cmd.to_s, *args) rescue nil
    exit! 1 # never gets here unless exec failed
  end
  Process.wait
  $?.success?
end

#updateObject



5
6
7
8
9
# File 'lib/cmd/update.rb', line 5

def update
  resource = ARGV.shift
  raise ResourceNotSpecified unless resource
  PackageUtils.update resource
end

#upgradeObject



5
6
7
8
9
10
11
12
13
# File 'lib/cmd/upgrade.rb', line 5

def upgrade
  require 'cmd/list'
  if Lace.active_packages.empty?
    upgrade_lace_folder
  else
    onoe "Please deactivate all packages before continuing"
    Lace.failed = true
  end
end

#upgrade_lace_folderObject



14
15
16
17
18
19
20
# File 'lib/cmd/upgrade.rb', line 14

def upgrade_lace_folder
  old_dir = Pathname.new(ENV["HOME"])/".cassias"
  if old_dir.exist?
    File.rename old_dir, Lace.pkgs_folder
    old_dir.rmdir_if_possible
  end
end

#whereObject



5
6
7
8
9
10
11
12
13
14
15
# File 'lib/cmd/where.rb', line 5

def where
  package_name = ARGV.shift
  raise ResourceNotSpecified unless package_name
  begin
    package = Package.new(package_name, false)
    puts "#{package.path}"
  rescue PackageFactsNotFound => e
    onoe "asd"
    Lace.failed = true
  end
end