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