Class: Nanoc::Extra::LinkCollector

Inherits:
Object
  • Object
show all
Defined in:
lib/nanoc/extra/link_collector.rb

Constant Summary

URI_ATTRS =
{
  'a' => :href,
  'audio' => :src,
  'form' => :action,
  'iframe' => :src,
  'img' => :src,
  'link' => :href,
  'script' => :src,
  'video' => :src
}

Instance Method Summary (collapse)

Constructor Details

- (LinkCollector) initialize(filenames, mode = nil)

Returns a new instance of LinkCollector



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/nanoc/extra/link_collector.rb', line 18

def initialize(filenames, mode = nil)
  Nanoc::Extra::JRubyNokogiriWarner.check_and_warn

  @filenames = filenames
  @filter =
    case mode
    when nil
      ->(_h) { true }
    when :external
      ->(h) { external_href?(h) }
    when :internal
      ->(h) { !external_href?(h) }
    else
      raise ArgumentError, 'Expected mode argument to be :internal, :external or nil'
    end
end

Instance Method Details

- (Boolean) external_href?(href)

Returns:

  • (Boolean)


59
60
61
# File 'lib/nanoc/extra/link_collector.rb', line 59

def external_href?(href)
  href =~ %r{^(\/\/|[a-z\-]+:)}
end

- (Object) filenames_per_href



35
36
37
38
39
40
41
42
43
44
45
# File 'lib/nanoc/extra/link_collector.rb', line 35

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

- (Object) filenames_per_resource_uri



47
48
49
50
51
52
53
54
55
56
57
# File 'lib/nanoc/extra/link_collector.rb', line 47

def filenames_per_resource_uri
  require 'nokogiri'
  filenames_per_resource_uri = {}
  @filenames.each do |filename|
    resource_uris_in_file(filename).each do |resouce_uri|
      filenames_per_resource_uri[resouce_uri] ||= Set.new
      filenames_per_resource_uri[resouce_uri] << filename
    end
  end
  filenames_per_resource_uri
end

- (Object) hrefs_in_file(filename)



63
64
65
# File 'lib/nanoc/extra/link_collector.rb', line 63

def hrefs_in_file(filename)
  uris_in_file filename, %w(a img)
end

- (Object) resource_uris_in_file(filename)



67
68
69
# File 'lib/nanoc/extra/link_collector.rb', line 67

def resource_uris_in_file(filename)
  uris_in_file filename, %w(audio form img iframe link script video)
end