class SitemapGen::CSV
Public Class Methods
new(dir_path, base_url, save_path, checking_url)
click to toggle source
# File lib/sitemap_gen/csv.rb, line 3 def initialize(dir_path, base_url, save_path, checking_url) @dir_path = dir_path @base_url = base_url @save_path = save_path || Dir.pwd @checking_url = checking_url @max_level = 1 @html_files = Dir.glob("#{dir_path}/**/index.html").sort_by { |f| File.dirname(f) } raise 'There is no index.html files in your directory' if @html_files.empty? @sitemaps = create_sitemaps end
Public Instance Methods
execute()
click to toggle source
# File lib/sitemap_gen/csv.rb, line 14 def execute ::CSV.open("#{@save_path}/sitemap.csv", 'wb') do |csv| csv << csv_header @sitemaps.each_with_index { |item, i| csv << csv_row(item, i) } end end
Private Instance Methods
create_sitemaps()
click to toggle source
# File lib/sitemap_gen/csv.rb, line 23 def create_sitemaps sitemaps = [] p 'Generating and checking page url...' @html_files.each do |f| next if f =~ ::SitemapGen::IGNORE_DIRS_REGEX page_url = @base_url + server_path(f) p page_url sitemaps.push({ url: page_url, levels: dir_levels(f), status: @checking_url ? page_status(page_url) : '' }) end p 'Finish generating url' sitemaps end
csv_header()
click to toggle source
# File lib/sitemap_gen/csv.rb, line 37 def csv_header header = ['Id'] @max_level.to_i.times.each { |l| header.push("Level #{l + 1}") } header.push('Url').push('Status') end
csv_row(item, order_num)
click to toggle source
# File lib/sitemap_gen/csv.rb, line 43 def csv_row(item, order_num) titles = item[:levels].values gap = @max_level - titles.size [order_num + 1].concat(titles) .concat(Array.new(gap) { '' }) .push(item[:url], item[:status]) end
dir_levels(file_path)
click to toggle source
# File lib/sitemap_gen/csv.rb, line 66 def dir_levels(file_path) levels = {} order = 0 dirs = server_path(file_path).split('/') if dirs.empty? levels.merge!({"level_#{order += 1}": html_page_title(file_path)}) else dirs[1..-1].each_with_index do |dir, i| levels.merge!({"level_#{order += 1}": ''}) end levels.merge!({"level_#{order += 1}": html_page_title(file_path)}) end set_max_level(order) levels end
html_page_title(file_path)
click to toggle source
# File lib/sitemap_gen/csv.rb, line 61 def html_page_title(file_path) html_doc = Nokogiri::HTML(File.read(file_path)) html_doc.css('head title')&.first&.content end
page_status(page_url)
click to toggle source
# File lib/sitemap_gen/csv.rb, line 51 def page_status(page_url) begin page_uri = URI(page_url) res = Net::HTTP.get_response(page_uri) ['200', '301', '302'].include?(res.code) ? 'Passed' : 'Failed' rescue URI::InvalidURIError 'Wrong format URL' end end
server_path(file_path)
click to toggle source
# File lib/sitemap_gen/csv.rb, line 82 def server_path(file_path) File.dirname(file_path.sub(@dir_path, '')) end
set_max_level(num)
click to toggle source
# File lib/sitemap_gen/csv.rb, line 86 def set_max_level(num) @max_level = num > @max_level ? num : @max_level end