Parent

Class/Module Index [+]

Quicksearch

Nanoc::Extra::LinkCollector

Public Class Methods

new(filenames, mode=nil) click to toggle source
# 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

Public Instance Methods

external_href?(href) click to toggle source
# File lib/nanoc/extra/link_collector.rb, line 34
def external_href?(href)
  !!(href =~ %{^(\/\/|[a-z\-]+:)})
end
filenames_per_href() click to toggle source
# 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
hrefs_in_file(filename) click to toggle source
# 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

[Validate]

Generated with the Darkfish Rdoc Generator 2.