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
# File lib/poet.rb, line 30 def print_tree(dir = ".", nesting = 0) Dir.entries(dir).sort.each do |entry| next if entry =~ /^\.{1,2}/ # Ignore ".", "..", or hidden files puts "| " * nesting + "|-- #{entry}" if File.stat(d = "#{dir}#{File::SEPARATOR}#{entry}").directory? print_tree(d, nesting + 1) end end end