# File lib/nanoc/extra/link_collector.rb, line 8 def initialize(filenames, mode=nil) @filenames = filenames @filter = case mode when nil lambda { |h| true } when :external lambda { |h| external_href?(h) } when :internal lambda { |h| !external_href?(h) } else raise ArgumentError, 'Expected mode argument to be :internal, :external or nil' end end
# File lib/nanoc/extra/link_collector.rb, line 34 def external_href?(href) !!(href =~ %{^(\/\/|[a-z\-]+:)}) end
# File lib/nanoc/extra/link_collector.rb, line 22 def filenames_per_href require 'nokogiri' filenames_per_href = {} @filenames.each do |filename| hrefs_in_file(filename).each do |href| filenames_per_href[href] ||= Set.new filenames_per_href[href] << filename end end filenames_per_href end
# File lib/nanoc/extra/link_collector.rb, line 38 def hrefs_in_file(filename) hrefs_in_file = Set.new doc = Nokogiri::HTML(::File.read(filename)) doc.css('a').each { |e| hrefs_in_file << e[:href] unless e[:href].nil? } doc.css('img').each { |e| hrefs_in_file << e[:src] } # Convert protocol-relative urls # e.g. //example.com => http://example.com hrefs_in_file.map! { |href| href.gsub /^\/\//, 'http://' } # Strip fragment hrefs_in_file.map! { |href| href.gsub(/#.*$/, '') } hrefs_in_file.select(&@filter) end
Generated with the Darkfish Rdoc Generator 2.