class Vcsmap::CLI

Public Class Methods

new(arguments) click to toggle source
# File lib/vcsmap/cli.rb, line 5
def initialize(arguments)
  @command = arguments[0]
  @plugin = arguments[1]
  @pages = arguments[2]
  @output = arguments[3]
end

Public Instance Methods

run() click to toggle source
# File lib/vcsmap/cli.rb, line 12
def run
  case @command
  when 'list'
    list_plugins
  when 'run'
    run_plugin(@output === '--no-ascii')
  when nil
    abort "vcsmap requires a command. #{usage}"
  else
    abort "Command not recognized. #{usage}"
  end
end

Private Instance Methods

list_plugins() click to toggle source
# File lib/vcsmap/cli.rb, line 31
def list_plugins
  puts "Available plugins:\n\n"
  PluginList.render_list
  exit
end
run_plugin(no_ascii) click to toggle source
# File lib/vcsmap/cli.rb, line 37
def run_plugin(no_ascii)
  begin
    plugin = PluginList.get_object(@plugin)
  rescue KeyError
    abort "Cannot find plugin with name '#{@plugin}'."
  rescue NameError
    abort "The plugin '#{@plugin}' has not been implemented yet."
  end

  unless @pages && (1..100).cover?(@pages.to_i)
    abort 'Specify a number of pages (1-100) to load after the plugin name (1 page = ~10 results).'
  end

  puts 'Searching for matching files ...'
  provider = Vcsmap::Provider::GitHub.new
  results = provider.search(plugin, @pages.to_i)

  bar = Vcsmap::ProgressBar.new(results.count)

  data = []

  abort "No files were found matching the search string (#{plugin.search_string})." if results.empty?

  results.each do |result|
    bar.step
    file = HTTP.follow(true).get(result).body.to_s
    credentials = plugin.credentials(file)
    credentials << result.split('/').slice(3, 2).join('/')
    # TODO: make an object that holds credentials and has empty? and valid? methods.
    # this object should also be able to filter 'false' creds like localhost and default ones.
    data << credentials unless credentials[1].nil? || credentials[1].empty?
  end

  if data.empty?
    abort "Some files were loaded (#{results.count}), but none of them contained matching credentials. " \
          'You could try a higher page number.'
  end

  bar.clear

  csv_writer = Vcsmap::CsvWriter.new(@plugin, plugin.table_header, data)
  csv_writer.write!

  unless no_ascii
    table = TTY::Table.new plugin.table_header << 'Repo', data
    puts table.render(:ascii)
  end
end
usage() click to toggle source
# File lib/vcsmap/cli.rb, line 27
def usage
  "See http://vcsmap.org or open #{Helpers.project_directory}/README.md for instructions."
end