class SitemapCheck::Sitemap

Attributes

checked[RW]
doc[RW]
hydra[RW]
logger[RW]
pages[R]
url[RW]

Public Class Methods

new(url, logger = Logger.new) click to toggle source
# File lib/sitemap_check/sitemap.rb, line 9
def initialize(url, logger = Logger.new)
  self.logger = logger
  self.url = url
  self.checked = 0
  self.hydra = Typhoeus::Hydra.new(max_concurrency: concurency)
  setup_doc
end

Public Instance Methods

check_pages() click to toggle source
# File lib/sitemap_check/sitemap.rb, line 19
def check_pages
  queue_pages
  hydra.run
  self.checked = pages.count
end
errored_pages() click to toggle source
# File lib/sitemap_check/sitemap.rb, line 37
def errored_pages
  pages.select(&:error)
end
exists?() click to toggle source
# File lib/sitemap_check/sitemap.rb, line 41
def exists?
  @ok
end
missing_pages() click to toggle source
# File lib/sitemap_check/sitemap.rb, line 33
def missing_pages
  pages.reject(&:exists)
end
sitemaps() click to toggle source
# File lib/sitemap_check/sitemap.rb, line 25
def sitemaps
  expanded_sitemaps = maps.map do |sitemap|
    map = Sitemap.new(sitemap.loc.text)
    [map] + map.sitemaps
  end.flatten
  (expanded_sitemaps + [self]).uniq(&:url)
end

Private Instance Methods

concurency() click to toggle source
# File lib/sitemap_check/sitemap.rb, line 52
def concurency
  ENV.fetch("CONCURRENCY", "10").to_i
end
maps() click to toggle source
# File lib/sitemap_check/sitemap.rb, line 73
def maps
  doc.sitemapindex.sitemap
rescue NoMethodError
  []
end
queue_pages() click to toggle source
# File lib/sitemap_check/sitemap.rb, line 56
def queue_pages
  pages.each { |page| hydra.queue page.request }
end
setup_doc() click to toggle source
# File lib/sitemap_check/sitemap.rb, line 60
def setup_doc
  response = Typhoeus.get(url, followlocation: true)
  return unless (@ok = response.success?)
  self.doc = Nokogiri::Slop(response.body)
  doc.remove_namespaces!
end