bad_link_finder 0.2.3 → 0.3.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 +5 -13
- data/README.md +3 -1
- data/lib/bad_link_finder.rb +1 -1
- data/lib/bad_link_finder/site.rb +6 -2
- data/lib/bad_link_finder/site_checker.rb +3 -2
- data/lib/bad_link_finder/version.rb +1 -1
- data/test/integration/bad_link_finder_test.rb +25 -2
- data/test/unit/site_test.rb +10 -0
- metadata +28 -14
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
ZDNmNDg2NjYwODNmN2IwNGQyNTllZGQ3Yjc2ZTY0MjU4Y2JkMTBkMA==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1958650ee80f6111928153181b576b6e2964450b
|
4
|
+
data.tar.gz: 74cf1cdd49ee638a65d5759dd051ad32709a5693
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
MjEzYWYxOWE0NTBmZjg2ZGJiYmQxZmYwMWEzNzA1NWJjNjEwM2RhMGJmZmNi
|
11
|
-
MzQ2NGU3NGMxNWI0MmFlYjdlNjYxODY5N2ExZjQ3OGQ3YThiZDk=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NWEzMmE1NGRlNmUwOGVkNmY3ZDNmMTNkZjc3MzVkMTZlOTY1ZGRjY2M2YWM5
|
14
|
-
NDI0ZTYxNTg0MzVlYTcwZjUyNDMwNGE5OTcxYmFkMjJiMGUxOTUzZGIxODQ1
|
15
|
-
NmEzNjM5OTBhZWE1ZTk4OTgzZTBjYTU5ZmViM2Y5N2M3Y2ZlZDI=
|
6
|
+
metadata.gz: 0dbf259bf6364c615f222ec5698bf3816212373ce12dc056a5edd9ac51ec2a4daedfbd37759d7a655f7320a041f0772a80f193f1fda9e4751cedaf58a659e06a
|
7
|
+
data.tar.gz: f3049d9b48675bdbf2eddfc35cda601fdb67b75321bb96ee78299a2cbccdeb840f865b97ee8488e82cb610c1df94c70ebaa5fa2adfd14eb5d1715a655ab4748c
|
data/README.md
CHANGED
@@ -6,8 +6,10 @@ Crawls a mirrored site and checks that all links either return a successful resp
|
|
6
6
|
|
7
7
|
Set environment variables:
|
8
8
|
|
9
|
-
- `MIRROR_DIR`, to the location of your mirrored site.
|
9
|
+
- `MIRROR_DIR`, to the location of your mirrored site. Local files will be read in alphabetical order.
|
10
10
|
- `REPORT_OUTPUT_FILE`, to the location you'd like the CSV saved to.
|
11
11
|
- `SITE_HOST`, to the full host of the live site you'd like to test against, including protocol. For example, `https://www.example.com`
|
12
|
+
- `START_FROM`, optional, specify a file on disk from which to start, e.g. `example-folder/example.html`.
|
13
|
+
Will check this file and all following files. Useful for restarting aborted runs.
|
12
14
|
|
13
15
|
Then execute `bad_link_finder`.
|
data/lib/bad_link_finder.rb
CHANGED
@@ -16,7 +16,7 @@ module BadLinkFinder
|
|
16
16
|
csv_file = report_path.open('w')
|
17
17
|
csv_builder = BadLinkFinder::CSVBuilder.new(csv_file)
|
18
18
|
|
19
|
-
BadLinkFinder::SiteChecker.new(ENV['MIRROR_DIR'], ENV['SITE_HOST'], csv_builder).run
|
19
|
+
BadLinkFinder::SiteChecker.new(ENV['MIRROR_DIR'], ENV['SITE_HOST'], csv_builder, ENV['START_FROM']).run
|
20
20
|
|
21
21
|
csv_file.close
|
22
22
|
|
data/lib/bad_link_finder/site.rb
CHANGED
@@ -5,13 +5,17 @@ module BadLinkFinder
|
|
5
5
|
class Site
|
6
6
|
include Enumerable
|
7
7
|
|
8
|
-
def initialize(mirror_dir)
|
8
|
+
def initialize(mirror_dir, start_from = nil)
|
9
9
|
@mirror_dir = mirror_dir.is_a?(String) ? Pathname.new(mirror_dir) : mirror_dir
|
10
|
+
@start_from = start_from
|
10
11
|
end
|
11
12
|
|
12
13
|
def each
|
13
14
|
Dir.chdir(@mirror_dir) do
|
14
|
-
Dir.glob('**/*').
|
15
|
+
paths = Dir.glob('**/*').sort
|
16
|
+
paths = paths[paths.index(@start_from)..-1] if @start_from
|
17
|
+
|
18
|
+
paths.each do |path|
|
15
19
|
next if File.directory?(path)
|
16
20
|
yield BadLinkFinder::Page.new(@mirror_dir, path)
|
17
21
|
end
|
@@ -4,15 +4,16 @@ require 'bad_link_finder/page_checker'
|
|
4
4
|
|
5
5
|
module BadLinkFinder
|
6
6
|
class SiteChecker
|
7
|
-
def initialize(mirror_dir, host, csv_builder)
|
7
|
+
def initialize(mirror_dir, host, csv_builder, start_from = nil)
|
8
8
|
@mirror_dir = File.expand_path(mirror_dir)
|
9
9
|
@host = host
|
10
10
|
@csv_builder = csv_builder
|
11
|
+
@start_from = start_from
|
11
12
|
@result_cache = BadLinkFinder::ResultCache.new
|
12
13
|
end
|
13
14
|
|
14
15
|
def run
|
15
|
-
BadLinkFinder::Site.new(@mirror_dir).each do |page|
|
16
|
+
BadLinkFinder::Site.new(@mirror_dir, @start_from).each do |page|
|
16
17
|
page_checker = BadLinkFinder::PageChecker.new(@host, page, @result_cache)
|
17
18
|
puts "Checking page #{page.path} as #{page_checker.page_url}"
|
18
19
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
require 'webmock/minitest'
|
3
3
|
require 'bad_link_finder'
|
4
|
+
require 'tempfile'
|
4
5
|
|
5
6
|
describe BadLinkFinder do
|
6
7
|
|
@@ -11,17 +12,27 @@ describe BadLinkFinder do
|
|
11
12
|
stub_request(:any, 'http://www.example.com/example/?test=true&redirect=http://www.example.com/in-param-url/index.html').to_return(status: 404)
|
12
13
|
|
13
14
|
ENV['MIRROR_DIR'] = (FIXTURES_ROOT+'www.example.com').to_s
|
14
|
-
ENV['REPORT_OUTPUT_FILE'] = (TMP_ROOT+'bad_links.csv').to_s
|
15
15
|
ENV['SITE_HOST'] = 'http://www.example.com/'
|
16
|
+
|
17
|
+
@tempfile = Tempfile.new('bad_links.csv')
|
18
|
+
ENV['REPORT_OUTPUT_FILE'] = @tempfile.path
|
19
|
+
end
|
20
|
+
|
21
|
+
after do
|
22
|
+
@tempfile.close
|
23
|
+
@tempfile.unlink
|
24
|
+
|
25
|
+
['MIRROR_DIR', 'REPORT_OUTPUT_FILE', 'SITE_HOST', 'START_FROM'].each { |k| ENV.delete(k) }
|
16
26
|
end
|
17
27
|
|
18
28
|
it "finds all broken links and exports to a CSV" do
|
19
29
|
BadLinkFinder.run
|
20
30
|
|
21
|
-
csv_string =
|
31
|
+
csv_string = @tempfile.read
|
22
32
|
|
23
33
|
assert_match 'http://www.example.com/example/relative-example', csv_string
|
24
34
|
assert_match 'correct-article-id', csv_string
|
35
|
+
assert_match 'https://www.example.net/external-example.html', csv_string
|
25
36
|
end
|
26
37
|
|
27
38
|
it "complains if key variables are missing" do
|
@@ -42,4 +53,16 @@ describe BadLinkFinder do
|
|
42
53
|
end
|
43
54
|
end
|
44
55
|
|
56
|
+
it "starts from a specific page if requested" do
|
57
|
+
ENV['START_FROM'] = 'example/relative-example.html'
|
58
|
+
|
59
|
+
BadLinkFinder.run
|
60
|
+
|
61
|
+
csv_string = @tempfile.read
|
62
|
+
|
63
|
+
assert_match 'http://www.example.com/example/relative-example', csv_string
|
64
|
+
assert_match 'correct-article-id', csv_string
|
65
|
+
refute_match 'https://www.example.net/external-example.html', csv_string
|
66
|
+
end
|
67
|
+
|
45
68
|
end
|
data/test/unit/site_test.rb
CHANGED
@@ -17,6 +17,16 @@ describe BadLinkFinder::Site do
|
|
17
17
|
|
18
18
|
assert_same_elements site_map, BadLinkFinder::Site.new(@site_mirror).map { |page| page.path.to_s }
|
19
19
|
end
|
20
|
+
|
21
|
+
it "starts from a specific path if given" do
|
22
|
+
site_map = [
|
23
|
+
'example/relative-example',
|
24
|
+
''
|
25
|
+
]
|
26
|
+
|
27
|
+
site = BadLinkFinder::Site.new(@site_mirror, 'example/relative-example.html')
|
28
|
+
assert_equal site_map, site.map { |page| page.path.to_s }
|
29
|
+
end
|
20
30
|
end
|
21
31
|
|
22
32
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bad_link_finder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elliot Crosby-McCullough
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mechanize
|
@@ -30,40 +30,54 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
33
|
+
version: '1.5'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
40
|
+
version: '1.5'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: webmock
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
@@ -103,7 +117,10 @@ executables:
|
|
103
117
|
extensions: []
|
104
118
|
extra_rdoc_files: []
|
105
119
|
files:
|
120
|
+
- LICENCE.txt
|
121
|
+
- README.md
|
106
122
|
- bin/bad_link_finder
|
123
|
+
- lib/bad_link_finder.rb
|
107
124
|
- lib/bad_link_finder/csv_builder.rb
|
108
125
|
- lib/bad_link_finder/link.rb
|
109
126
|
- lib/bad_link_finder/page.rb
|
@@ -112,9 +129,6 @@ files:
|
|
112
129
|
- lib/bad_link_finder/site.rb
|
113
130
|
- lib/bad_link_finder/site_checker.rb
|
114
131
|
- lib/bad_link_finder/version.rb
|
115
|
-
- lib/bad_link_finder.rb
|
116
|
-
- README.md
|
117
|
-
- LICENCE.txt
|
118
132
|
- test/fixtures/www.example.com/example/index.html
|
119
133
|
- test/fixtures/www.example.com/example/relative-example.html
|
120
134
|
- test/fixtures/www.example.com/index.html
|
@@ -137,17 +151,17 @@ require_paths:
|
|
137
151
|
- lib
|
138
152
|
required_ruby_version: !ruby/object:Gem::Requirement
|
139
153
|
requirements:
|
140
|
-
- -
|
154
|
+
- - '>='
|
141
155
|
- !ruby/object:Gem::Version
|
142
156
|
version: '0'
|
143
157
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
144
158
|
requirements:
|
145
|
-
- -
|
159
|
+
- - '>='
|
146
160
|
- !ruby/object:Gem::Version
|
147
161
|
version: '0'
|
148
162
|
requirements: []
|
149
163
|
rubyforge_project:
|
150
|
-
rubygems_version: 2.
|
164
|
+
rubygems_version: 2.2.0
|
151
165
|
signing_key:
|
152
166
|
specification_version: 4
|
153
167
|
summary: Tests links in static site mirrors
|