broken_link_finder 0.9.4 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/CHANGELOG.md +52 -0
- data/Gemfile.lock +51 -38
- data/README.md +65 -29
- data/benchmark.rb +9 -5
- data/bin/console +11 -19
- data/bin/setup +1 -1
- data/broken_link_finder.gemspec +8 -5
- data/exe/broken_link_finder +14 -3
- data/lib/broken_link_finder.rb +8 -2
- data/lib/broken_link_finder/finder.rb +131 -132
- data/lib/broken_link_finder/link_manager.rb +137 -0
- data/lib/broken_link_finder/reporter/html_reporter.rb +137 -0
- data/lib/broken_link_finder/reporter/reporter.rb +76 -0
- data/lib/broken_link_finder/reporter/text_reporter.rb +88 -0
- data/lib/broken_link_finder/version.rb +1 -1
- data/lib/broken_link_finder/wgit_extensions.rb +25 -5
- data/lib/broken_link_finder/xpath.rb +14 -0
- metadata +21 -15
- data/lib/broken_link_finder/reporter.rb +0 -116
@@ -1,116 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module BrokenLinkFinder
|
4
|
-
class Reporter
|
5
|
-
# The amount of pages/links to display when verbose is false.
|
6
|
-
NUM_VALUES = 3
|
7
|
-
|
8
|
-
# Creates a new Reporter instance.
|
9
|
-
# stream is any Object that responds to :puts.
|
10
|
-
def initialize(stream, sort, broken_links, ignored_links)
|
11
|
-
raise 'stream must respond_to? :puts' unless stream.respond_to?(:puts)
|
12
|
-
raise "sort by either :page or :link, not #{sort}" \
|
13
|
-
unless %i[page link].include?(sort)
|
14
|
-
|
15
|
-
@stream = stream
|
16
|
-
@sort = sort
|
17
|
-
@broken_links = broken_links
|
18
|
-
@ignored_links = ignored_links
|
19
|
-
end
|
20
|
-
|
21
|
-
# Pretty print a report detailing the link summary.
|
22
|
-
def pretty_print_link_report(broken_verbose: true, ignored_verbose: false)
|
23
|
-
report_broken_links(verbose: broken_verbose)
|
24
|
-
report_ignored_links(verbose: ignored_verbose)
|
25
|
-
|
26
|
-
nil
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
# Report a summary of the broken links.
|
32
|
-
def report_broken_links(verbose: true)
|
33
|
-
if @broken_links.empty?
|
34
|
-
print 'Good news, there are no broken links!'
|
35
|
-
else
|
36
|
-
num_pages, num_links = get_hash_stats(@broken_links)
|
37
|
-
print "Found #{num_links} broken link(s) across #{num_pages} page(s):"
|
38
|
-
|
39
|
-
@broken_links.each do |key, values|
|
40
|
-
msg = sort_by_page? ?
|
41
|
-
"The following broken links were found on '#{key}':" :
|
42
|
-
"The broken link '#{key}' was found on the following pages:"
|
43
|
-
nprint msg
|
44
|
-
|
45
|
-
if verbose || (values.length <= NUM_VALUES)
|
46
|
-
values.each { |value| print value }
|
47
|
-
else # Only print N values and summarise the rest.
|
48
|
-
NUM_VALUES.times { |i| print values[i] }
|
49
|
-
|
50
|
-
objects = sort_by_page? ? 'link(s)' : 'page(s)'
|
51
|
-
print "+ #{values.length - NUM_VALUES} other #{objects}, remove --concise to see them all"
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
# Report a summary of the ignored links.
|
58
|
-
def report_ignored_links(verbose: false)
|
59
|
-
if @ignored_links.any?
|
60
|
-
num_pages, num_links = get_hash_stats(@ignored_links)
|
61
|
-
nprint "Ignored #{num_links} unsupported link(s) across #{num_pages} page(s), which you should check manually:"
|
62
|
-
|
63
|
-
@ignored_links.each do |key, values|
|
64
|
-
msg = sort_by_page? ?
|
65
|
-
"The following links were ignored on '#{key}':" :
|
66
|
-
"The link '#{key}' was ignored on the following pages:"
|
67
|
-
nprint msg
|
68
|
-
|
69
|
-
if verbose || (values.length <= NUM_VALUES)
|
70
|
-
values.each { |value| print value }
|
71
|
-
else # Only print N values and summarise the rest.
|
72
|
-
NUM_VALUES.times { |i| print values[i] }
|
73
|
-
|
74
|
-
objects = sort_by_page? ? 'link(s)' : 'page(s)'
|
75
|
-
print "+ #{values.length - NUM_VALUES} other #{objects}, use --verbose to see them all"
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
# Return true if the sort is by page.
|
82
|
-
def sort_by_page?
|
83
|
-
@sort == :page
|
84
|
-
end
|
85
|
-
|
86
|
-
# Returns the key/value statistics of hash e.g. the number of keys and
|
87
|
-
# combined values. The hash should be of the format: { 'str' => [...] }.
|
88
|
-
# Use like: `num_pages, num_links = get_hash_stats(links)`.
|
89
|
-
def get_hash_stats(hash)
|
90
|
-
num_keys = hash.keys.length
|
91
|
-
values = hash.values.flatten
|
92
|
-
num_values = sort_by_page? ? values.length : values.uniq.length
|
93
|
-
|
94
|
-
sort_by_page? ?
|
95
|
-
[num_keys, num_values] :
|
96
|
-
[num_values, num_keys]
|
97
|
-
end
|
98
|
-
|
99
|
-
# Prints the text + \n. Defaults to a blank line.
|
100
|
-
def print(text = '')
|
101
|
-
@stream.puts(text)
|
102
|
-
end
|
103
|
-
|
104
|
-
# Prints text + \n\n.
|
105
|
-
def printn(text)
|
106
|
-
print(text)
|
107
|
-
print
|
108
|
-
end
|
109
|
-
|
110
|
-
# Prints \n + text + \n.
|
111
|
-
def nprint(text)
|
112
|
-
print
|
113
|
-
print(text)
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|