bin/autopilot
#!/usr/bin/env ruby
require 'pry' if ENV['DEBUG']
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
begin
require 'auto_pilot'
rescue LoadError
require 'rubygems'
require 'auto_pilot'
end
require 'fileutils'
def get_root
Gem::Specification.find_by_name('auto_pilot').gem_dir
rescue Gem::LoadError
Dir.pwd
end
ROOT = get_root
class Application
CONF_TEMPLATE = 'auto_pilot_config.rb'
def initialize
show_banner
ask_user_for_configuration
download_answers_and_write_files
end
private
def ask_user_for_configuration
if File.exist?("#{Dir.pwd}/#{CONF_TEMPLATE}")
log.out "found existing configuration at #{Dir.pwd}/#{CONF_TEMPLATE}"
load_configuration
else
log.out 'do you want to create a configuration file? y/n'
answer = $stdin.gets.chomp
if answer == 'y'
add_configuration_file
load_configuration
update_config_with_user
ask_user_to_keep_going
else
use_default_configuration
end
end
end
def ask_user_to_keep_going
log.out 'would you like to modify your configuration? y/n'
answer = $stdin.gets.chomp
if answer == 'y'
log.out 'update ./auto_pilot_config.rb, resume by running `autopilot`'
abort
end
end
def update_config_with_user
id = ask_for_user_id
update_config_with_answer if id.nil? || id == ''
template = "#{Dir.pwd}/#{CONF_TEMPLATE}"
text = File.read(template)
new_contents = text.gsub(/userid/, AutoPilot.configuration.user_id)
File.open(template, 'w') { |file| file.puts new_contents }
reload_config
end
def load_configuration
load "#{Dir.pwd}/#{CONF_TEMPLATE}"
end
alias_method :reload_config, :load_configuration
def use_default_configuration
AutoPilot.configure do |config|
config.user_id = ask_for_user_id
config.format = [:md]
config.folder = "#{Dir.pwd}/stackoverflow"
config.disable_front_matter = false
config.max_pages = 2
end
end
def ask_for_user_id
log.out 'enter a stackoverflow id (can be found in your profile url):'
answer = $stdin.gets.chomp
if answer.nil? or answer == ''
log.red '- invalid user id, try again'
ask_for_user_id
else
AutoPilot.configuration.user_id = answer
end
end
def copy_with_path(src, dst)
FileUtils.mkdir_p(File.dirname(dst))
FileUtils.cp(src, dst)
end
def add_configuration_file
template = "#{ROOT}/lib/auto_pilot/templates/auto_pilot_config.rb"
copy_with_path(template, CONF_TEMPLATE)
log.green "- created ./#{CONF_TEMPLATE}"
update_gitignore
end
def update_gitignore
gitignore = "#{Dir.pwd}/.gitignore"
if File.exist?(gitignore)
unless already_updated_gitignore
log.out 'would you like to add configuration to .gitignore? (recommended) y/n'
answer = $stdin.gets.chomp
if answer == 'y'
open(gitignore, 'a') do |f|
f.puts '/auto_pilot_config.rb'
end
log.green '- updated .gitignore'
end
end
end
end
def already_updated_gitignore
File.read("#{Dir.pwd}/.gitignore").match(CONF_TEMPLATE)
end
def download_answers_and_write_files
AutoPilot.write_files(AutoPilot.get_api_answers)
end
def log
AutoPilot::Log
end
def show_banner
puts <<-BLOCK.unindent
*************
-=AUTOPILOT=-
*************
BLOCK
end
end
Application.new