#!/usr/bin/env ruby $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib]) require 'tempfile' require 'twog' require 'optparse' require 'whenever' require 'fileutils' twog_dir = "#{ENV['HOME']}/.twog" FileUtils.mkdir_p twog_dir unless File.exists?(twog_dir) twog_cron_schedule_file = "#{twog_dir}/schedule.rb" twog_cron_schedule_log = "#{twog_dir}/cron.log" twog_cron_identifier = "twog" legacy_conf_file_name = "#{ENV['HOME']}/.twog.yaml" twog_conf_file = "#{twog_dir}/conf.yaml" options = {} opts = OptionParser.new do |opts| opts.banner = "Twog is a tool to tweet blog posts" opts.on_tail("-h","-?","--help", "Display help") do puts opts exit 0 end opts.on("-v", "--version", "Display current version") do puts "Twog " + Twog.version exit 0 end opts.on("--cronadd N", "Add crontab job to run twog every N minutes") do |n| twog_cron_schedule_content = <<-EOS set :output, "#{twog_cron_schedule_log}" every #{n}.minutes do command "twog" end EOS answer = "" if File.exists?(twog_cron_schedule_file) puts "Cron schedule file (#{twog_cron_schedule_file}) already exists. Overwrite? [Y/n]" answer = gets end File.open(twog_cron_schedule_file, 'w') {|f| f.write(twog_cron_schedule_content) } if ["Y","y",""].include?(answer.chomp) cron_options = {:file => twog_cron_schedule_file, :identifier => twog_cron_identifier, :update => true} Whenever::CommandLine.execute(cron_options) exit 0 end opts.on("--cronrm", "Remove twog crontab job") do File.open(twog_cron_schedule_file, 'w') {|f| f.write("") } cron_options = {:file => twog_cron_schedule_file, :identifier => twog_cron_identifier, :update => true} Whenever::CommandLine.execute(cron_options) puts "Twog cron job removed successfully" exit 0 end opts.on("--conf", "Create default conf file") do conf_file_contents = <<-EOS rss_feed: 'http://url.com/feed.rss' consumer_key: 'consumer key' consumer_secret: 'consumer secret' access_token: 'access token' access_secret: 'access secret' bitly_username: 'username' bitly_api_key: 'api key' last_blog_post_tweeted: EOS FileUtils.mv(legacy_conf_file_name, twog_conf_file) if File.exists?(legacy_conf_file_name) if File.exists?(twog_conf_file) puts "#{twog_conf_file} already exists" exit 0 end File.open(twog_conf_file, 'w') {|f| f.write(conf_file_contents) } puts "Default configuration file created at #{twog_conf_file}" exit 0 end end # Read command line options into `options` hash opts.parse! # Get args from the command line if ARGV.size > 1 puts "Invalid options. Run `twog --help` for assistance." exit(1) end raise "please run 'twog --conf' to create the #{twog_conf_file} file" unless File.exists?(twog_conf_file) conf = YAML.load_file(twog_conf_file) Twog.run(conf)