class PoetCLI

Constants

MAGIC_LINE

Attributes

files_to_include[RW]

Public Instance Methods

bootstrap(file=nil) click to toggle source
# File lib/poet.rb, line 43
def bootstrap(file=nil)
  file ||= File.expand_path(file || options[:output])
  if File.directory?(options[:dir])
    $stderr.puts "You're already good to go."
    Process.exit!(3)
  end
  FileUtils.mkdir_p(options[:dir])
  FileUtils.mv(file, options[:dir]) if File.file?(file)
  create
end
completeme() click to toggle source
# File lib/poet.rb, line 55
def completeme
  completion_dir = File.expand_path("~/.bash_completion.d/")
  FileUtils.mkdir_p(completion_dir)
  say "Copying completion file to #{completion_dir}"
  FileUtils.cp(File.expand_path('../../completion/poet.bash', __FILE__), completion_dir)
  say %Q(To use the completion, execute this command:\n
  echo 'source #{File.join(completion_dir, 'poet.bash')}' >> ~/.bashrc)
end
create() click to toggle source
# File lib/poet.rb, line 65
def create
  if !File.directory?(options[:dir])
    $stderr.puts "#{options[:dir]} does not exist or is not a directory"
    Process.exit!(1)
  end

  if File.exists?(options[:output]) && File.new(options[:output]).gets == "#{MAGIC_LINE}\n"
    puts "Found generated ssh_config under #{options[:output]}. Overwriting..."
  elsif File.exists?(options[:output])
    $stderr.puts "Found hand-crafted ssh_config under #{options[:output]}. Please move it out of the way or specify a different output file with the -o option."
    Process.exit!(2)
  end

  whitelist = files_to_include || options[:with].split(',').map{|file| "#{file}.disabled"}
  files = Dir["#{options[:dir]}/**/*"].reject do |file|
    File.directory?(file) || \
      file =~ /\.disabled$/ && !whitelist.include?(File.basename(file))
  end

  files -= [options[:output]]

  entries = []

  files.sort.each do |file|
    entries << "\n# Located in " + file.to_s
    entries << File.read(file)
    $stdout.puts "Using #{file.gsub(/^\.\//, '')}" if options.verbose?
  end

  File.open(options[:output], 'w', 0600) do |ssh_config|
    ssh_config.puts(MAGIC_LINE)
    ssh_config.puts("# DO NOT EDIT THIS FILE")
    ssh_config.puts("# Create or modify files under #{options[:dir]} instead")
    ssh_config.puts(entries.join("\n"))
  end
end
edit(file) click to toggle source
# File lib/poet.rb, line 103
def edit(file)
  if ENV['EDITOR'].to_s.empty?
    $stderr.puts "$EDITOR is empty. Could not determine your favorite editor."
    Process.exit!(4)
  end
  filepath = File.join(options[:dir], file)
  checksum_before = Digest::MD5.file(filepath) rescue '0'*16
  system("#{ENV['EDITOR']} #{filepath}")
  self.files_to_include = [file]
  create if File.exists?(filepath) && checksum_before != Digest::MD5.file(filepath)
end
ls() click to toggle source
# File lib/poet.rb, line 117
def ls
  if options.tree?
    print_tree(options[:dir])
  else
    files = Dir["#{options[:dir]}/**/*"].sort.reject { |file| File.directory?(file) }
    puts files.map{|filename| filename[options[:dir].size+1..-1]}.join("\n")
  end
end
print_tree(dir = ".", nesting = 0) click to toggle source