class GistSweep::Sweep
Public Instance Methods
load_github_api(config, file_path)
click to toggle source
# File lib/gist/sweep.rb, line 69 def load_github_api(config, file_path) if config["oauth_token"] and !config["oauth_token"].empty? Octokit::Client.new(:access_token => config["oauth_token"]) else puts "You need to setup a 'Personal Access Token' to use with gist-sweep" puts "I'll wait for you to paste one in: " code = STDIN.gets.strip write_config_file(code, file_path) Octokit::Client.new(:access_token => code) end end
parse_arguments()
click to toggle source
# File lib/gist/sweep.rb, line 9 def parse_arguments() options = { :verbose => false, :config_file => "~/.gist-sweep", :public => false, :days => 90 } OptionParser.new do |opts| opts.banner = "Usage: gist-sweep [options]" opts.on("-v", "-s", "Print verbose messages") do |v| options[:verbose] = v end opts.on("-V", "Show the version") do |v| puts "gist-sweep: #{Gist::Sweep::VERSION}" end opts.on("-c", "Read config from a different file") do |c| options[:config_file] = c end opts.on("-u USERNAME", "Username to sweep gists on") do |u| options[:username] = u end opts.on("-d NUM", "Days to keep (default=90)", Integer) do |d| options[:days] = d.to_i end opts.on("-p", "Include public gists") do |p| options[:public] = p end end.parse! options end
promot_to_remove_gists(gists)
click to toggle source
# File lib/gist/sweep.rb, line 81 def promot_to_remove_gists(gists) gists.each do |g| puts "#{g[:updated_at]} (#{g[:id]}) -- #{g[:description]}" end print "Remove #{gists.size} gists? (y/n) " line = STDIN.gets.strip if line == 'y' true else false end end
read_config_from_file(path)
click to toggle source
# File lib/gist/sweep.rb, line 49 def read_config_from_file(path) expanded_path = File.expand_path(path) if File.exists?(expanded_path) contents = File.read(expanded_path) if contents.chomp.empty? {} else JSON.parse(contents) end else {} end end
sweep(raw_args)
click to toggle source
# File lib/gist/sweep.rb, line 100 def sweep(raw_args) args = parse_arguments() config = read_config_from_file(args[:config_file]) github = load_github_api(config, args[:config_file]) # pattern will be the first item in ARGV after options are parsed pattern = ARGV[0] if args[:username] min_age = DateTime.now - args[:days] verbose_log(args, "Removing gists older than #{min_age}") pattern_matcher = Regexp.new(pattern || "") gists_to_remove = github.gists(args[:username]).select do |g| remove_already = (!g[:public] or args[:public]) && (g[:updated_at].to_datetime < min_age) if pattern remove_already && pattern_matcher.match(g[:description]) else remove_already end end if gists_to_remove.empty? puts "No gists to remove" else if promot_to_remove_gists(gists_to_remove) gists_to_remove.each do |g| verbose_log(args, "Deleting gist #{g[:id]}") github.delete_gist(g[:id]) end puts "Swept gists." end end else abort "No username defined (with -u flag)." end end
verbose_log(args, msg)
click to toggle source
# File lib/gist/sweep.rb, line 94 def verbose_log(args, msg) if args[:verbose] puts msg end end
write_config_file(oauth_token, path)
click to toggle source
# File lib/gist/sweep.rb, line 63 def write_config_file(oauth_token, path) expanded_path = File.expand_path(path) File.write(expanded_path, JSON.generate({:oauth_token => oauth_token})) FileUtils.chmod(0400, expanded_path) end