class UrlChecker::Cli

The main class

Constants

BAD_CALL_MSG
RESULTS_HEADERS

Attributes

file_path[R]
num_issues[RW]
results[RW]
results_file_path[R]

Public Class Methods

call() click to toggle source
# File lib/url_checker/cli.rb, line 22
def self.call
  if ARGV.length == 1 && ARGV.first.match?(/\.csv\z/)
    url_checker = new(file_path: ARGV.first).call
  else
    print BAD_CALL_MSG.red
  end
  url_checker
end
new(file_path:) click to toggle source
# File lib/url_checker/cli.rb, line 11
def initialize(file_path:)
  @file_path = file_path
end

Public Instance Methods

call() click to toggle source
# File lib/url_checker/cli.rb, line 15
def call
  @results = [RESULTS_HEADERS]
  @num_issues = 0
  display_summary Benchmark.measure { check_urls_from_csv }.real
  write_results
end

Private Instance Methods

check_url(url) click to toggle source
# File lib/url_checker/cli.rb, line 35
def check_url(url)
  response = UrlChecker::SingleChecker.new(url: url).call
  collect_result response
  display_result response
end
check_url_thread(url) click to toggle source
# File lib/url_checker/cli.rb, line 41
def check_url_thread(url)
  Thread.new { check_url(url) }
end
check_urls_from_csv() click to toggle source
# File lib/url_checker/cli.rb, line 45
def check_urls_from_csv
  threads = []
  CSV.foreach(file_path) do |row|
    url = row[0]
    threads << check_url_thread(url) if url.is_a?(String) && url.match?(/\Ahttp/)
  end
  threads.each(&:join)
end
collect_result(response) click to toggle source
# File lib/url_checker/cli.rb, line 54
def collect_result(response)
  line = ["#{response.code} #{response.message}", response.uri.to_s]
  results << line
end
display_result(response) click to toggle source
# File lib/url_checker/cli.rb, line 59
def display_result(response)
  msg = " #{response.code} #{response.message} #{response.uri}\n"
  case response
  when Net::HTTPSuccess, Net::HTTPRedirection
    print msg.green
  else
    @num_issues += 1
    print msg.red
  end
end
display_summary(run_time) click to toggle source
# File lib/url_checker/cli.rb, line 70
def display_summary(run_time)
  num_checked = results.length - 1
  msg = "  #{num_checked} URLs checked with #{num_issues} issue(s) in #{run_time.round 2} s.\n"
  num_issues.positive? ? print(msg.yellow) : print(msg.green)
end
write_results() click to toggle source
# File lib/url_checker/cli.rb, line 76
def write_results
  time = Time.now.strftime('%Y-%m-%d-%H:%M:%S')
  @results_file_path = file_path.gsub('.csv', "_results_#{time}.csv")
  print "  Results saved to #{results_file_path}\n"
  CSV.open(results_file_path, 'wb') do |csv|
    results.each { |r| csv << r }
  end
  results_file_path
end