class Jackasset::AssetsChecker

Attributes

host[R]
num_issues[R]
source_dir[R]

Public Class Methods

call(host: 'http://localhost:8080', source_dir:) click to toggle source
# File lib/jackasset/assets_checker.rb, line 13
def self.call(host: 'http://localhost:8080', source_dir:)
  new(host: host, source_dir: source_dir).call
end
new(host:, source_dir:) click to toggle source
# File lib/jackasset/assets_checker.rb, line 7
def initialize(host:, source_dir:)
  @host = host
  @source_dir = source_dir
  @num_issues = 0
end

Public Instance Methods

call() click to toggle source
# File lib/jackasset/assets_checker.rb, line 17
def call
  img_urls
  threads = img_urls.each_with_object([]) do |url, thread_list|
    next unless url.match?(/\Ahttp/)
    thread_list << Thread.new { check_url url }
  end
  threads.each(&:join)
  puts "Finished checking #{img_urls.count} URLs and found #{num_issues} issues"
end

Private Instance Methods

check_url(url) click to toggle source
# File lib/jackasset/assets_checker.rb, line 29
def check_url(url)
  display_result Jackasset::UrlChecker.new(url: url).call
end
clean_url(url) click to toggle source
# File lib/jackasset/assets_checker.rb, line 33
def clean_url(url)
  cleaned_url = url.sub('src=', '').delete('"').strip # Remove src, quotes, and whitespace
  cleaned_url.gsub!(/\A\/\//, 'http://') # Set protocol if needed
  cleaned_url.slice!(/\A\//) # Remove single leading slash
  cleaned_url.match?(/\Ahttp/) ? cleaned_url : "#{host}/#{cleaned_url}"
end
display_result(response) click to toggle source
# File lib/jackasset/assets_checker.rb, line 40
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
img_urls() click to toggle source
# File lib/jackasset/assets_checker.rb, line 51
def img_urls
  @img_urls ||= Dir["#{source_dir}/**/*.html"].each_with_object([]) do |path, urls|
    file_content = File.read path
    file_content.scan(/src=\"\S*\"/).flatten.each do |src|
      urls << clean_url(src)
    end
  end
end