html-proofer 0.0.9 → 0.0.10

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.
@@ -1,9 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- html-proofer (0.0.2)
4
+ html-proofer (0.0.10)
5
5
  colored (~> 1.2)
6
6
  nokogiri (~> 1.5.6)
7
+ typhoeus (~> 0.6.3)
7
8
 
8
9
  GEM
9
10
  remote: http://rubygems.org/
@@ -14,6 +15,10 @@ GEM
14
15
  colored (1.2)
15
16
  diff-lcs (1.2.1)
16
17
  escape_utils (0.3.2)
18
+ ethon (0.5.12)
19
+ ffi (>= 1.3.0)
20
+ mime-types (~> 1.18)
21
+ ffi (1.9.0)
17
22
  gemoji (1.4.0)
18
23
  github-markdown (0.5.3)
19
24
  html-pipeline (0.0.8)
@@ -25,6 +30,7 @@ GEM
25
30
  rinku (~> 1.7)
26
31
  sanitize (~> 2.0)
27
32
  i18n (0.6.4)
33
+ mime-types (1.23)
28
34
  multi_json (1.6.1)
29
35
  nokogiri (1.5.6)
30
36
  rinku (1.7.2)
@@ -38,6 +44,8 @@ GEM
38
44
  rspec-mocks (2.13.0)
39
45
  sanitize (2.0.3)
40
46
  nokogiri (>= 1.4.4, < 1.6)
47
+ typhoeus (0.6.3)
48
+ ethon (~> 0.5.11)
41
49
 
42
50
  PLATFORMS
43
51
  ruby
data/README.md CHANGED
@@ -20,7 +20,7 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
- Require the gem; generate some HTML; create a new instance of the `HTML::Proofer` on
23
+ Require the gem; generate some HTML; create a new instance of the `HTML::Proofer` on
24
24
  your out folder; then `run` it:
25
25
 
26
26
  ```ruby
@@ -56,7 +56,6 @@ The `HTML::Proofer` constructor takes an optional hash of additional options:
56
56
  * `:ext`: the extension (including the `.`) of your HTML files (default: `.html`)
57
57
  * `:href_swap`: a hash containing key-value pairs of `RegExp => String`. It transforms links that match `RegExp` into `String` via `gsub`.
58
58
  * `:href_ignore`: an array of Strings containing `href`s that are safe to ignore (default: `mailto`)
59
- * `:longTests`: a Boolean indicating if long-running tests should run (for example, tests checking external links)
60
59
 
61
60
  ## What's Tested?
62
61
 
@@ -64,4 +63,4 @@ The `HTML::Proofer` constructor takes an optional hash of additional options:
64
63
  * Whether your internal image references are not broken
65
64
  * Whether external images are showing
66
65
  * Whether your internal links are not broken; this includes hash references (`#linkToMe`)
67
- * Whether external links are working
66
+ * Whether external links are working
@@ -16,6 +16,7 @@ Gem::Specification.new do |gem|
16
16
 
17
17
  gem.add_dependency "nokogiri", "~> 1.5.6"
18
18
  gem.add_dependency "colored", "~> 1.2"
19
+ gem.add_dependency "typhoeus", "~> 0.6.3"
19
20
 
20
21
  gem.add_development_dependency "html-pipeline", "~> 0.0.7"
21
22
  gem.add_development_dependency "rspec", "~> 2.13.0"
@@ -18,6 +18,7 @@ module HTML
18
18
  html = HTML::Proofer.create_nokogiri(path)
19
19
  check = klass.new(path, html, @options)
20
20
  check.run
21
+ check.hydra.run
21
22
  self.print_issues(klass, check.issues)
22
23
  end
23
24
  end
@@ -4,12 +4,13 @@ require 'net/https'
4
4
  require 'timeout'
5
5
  require 'uri'
6
6
  require 'colored'
7
+ require 'typhoeus'
7
8
 
8
9
  class HTML::Proofer::Checks
9
10
 
10
11
  class Check
11
12
 
12
- attr_reader :issues
13
+ attr_reader :issues, :hydra
13
14
 
14
15
  def initialize(path, html, opts={})
15
16
  @path = path
@@ -17,6 +18,7 @@ class HTML::Proofer::Checks
17
18
  @options = opts
18
19
  @issues = []
19
20
 
21
+ @hydra = Typhoeus::Hydra.hydra
20
22
  @additional_href_ignores = @options[:href_ignore] || []
21
23
  end
22
24
 
@@ -50,48 +52,22 @@ class HTML::Proofer::Checks
50
52
  false
51
53
  end
52
54
 
53
- def validate_url(href)
54
- return true unless @options[:longTests]
55
-
56
- # Parse
57
- url = nil
58
- begin
59
- url = URI.parse(href)
60
- rescue URI::InvalidURIError
61
- return Result.new(href, 'invalid URI')
62
- end
63
-
64
- # Get status
65
- res = nil
66
- 5.times do |i|
67
- begin
68
- Timeout::timeout(10) do
69
- res = request_url(url)
70
- end
71
- rescue => e
72
- return nil
73
- end
74
-
75
- next if res.code =~ /^5..$/
76
-
77
- if res.code =~ /^3..$/
78
- # Find proper location
79
- location = res['Location']
80
- if location !~ /^https?:\/\//
81
- base_url = url.dup
82
- base_url.path = (location =~ /^\// ? '' : '/')
83
- base_url.query = nil
84
- base_url.fragment = nil
85
- location = base_url.to_s + location
86
- end
87
- url = URI.parse(location)
88
- elsif res.code == '200'
89
- return true
55
+ def validate_url(href, issue_text)
56
+ request = Typhoeus::Request.new(href)
57
+ request.on_complete do |response|
58
+ if response.success?
59
+ # no op
60
+ elsif response.timed_out?
61
+ self.add_issue(issue_text + " got a time out")
62
+ elsif response.code == 0
63
+ # Could not get an http response, something's wrong.
64
+ self.add_issue(issue_text + " #{response}")
90
65
  else
91
- return nil
66
+ # Received a non-successful http response.
67
+ self.add_issue(issue_text + " HTTP request failed: " + response.code.to_s)
92
68
  end
93
69
  end
94
- raise 'should not have gotten here'
70
+ hydra.queue(request)
95
71
  end
96
72
 
97
73
  def request_url(url)
@@ -11,7 +11,7 @@ class Images < ::HTML::Proofer::Checks::Check
11
11
  if !external_href?(src)
12
12
  self.add_issue("#{@path}".blue + ": internal image #{src} does not exist") unless src[0] != "/" and File.exist?(File.join(File.dirname(@path), src))
13
13
  else
14
- self.add_issue("#{@path}".blue + ": external image #{src} does not exist") unless validate_url(src)
14
+ validate_url(src, "#{@path}".blue + ": external image #{src} does not exist")
15
15
  end
16
16
  else
17
17
  self.add_issue("#{@path}".blue + ": image has no src attribute")
@@ -47,7 +47,7 @@ class Links < ::HTML::Proofer::Checks::Check
47
47
  self.add_issue("#{@path}".blue + ": internally linking to #{href}, which does not exist") unless File.exist?(File.join(File.dirname(@path), href))
48
48
  end
49
49
  else
50
- self.add_issue("#{@path}".blue + ": externally linking to #{href}, which does not exist") unless validate_url(href)
50
+ validate_url(href, "#{@path}".blue + ": externally linking to #{href}, which does not exist")
51
51
  end
52
52
  else
53
53
  self.add_issue("#{@path}".blue + ": link has no href attribute") unless a['name'] || a['id']
@@ -1,5 +1,5 @@
1
1
  module HTML
2
2
  class Proofer
3
- VERSION = "0.0.9"
3
+ VERSION = "0.0.10"
4
4
  end
5
5
  end
@@ -3,7 +3,7 @@ require "spec_helper"
3
3
  describe "Image tests" do
4
4
  it "passes for existing external images" do
5
5
  externalImageFilepath = "#{FIXTURES_DIR}/existingImageExternal.html"
6
- @imageCheck = Images.new(externalImageFilepath, HTML::Proofer.create_nokogiri(externalImageFilepath), {:longTests => true})
6
+ @imageCheck = Images.new(externalImageFilepath, HTML::Proofer.create_nokogiri(externalImageFilepath))
7
7
  @imageCheck.run
8
8
  @imageCheck.issues[0].should eq(nil)
9
9
  end
@@ -31,8 +31,10 @@ describe "Image tests" do
31
31
 
32
32
  it "fails for missing external images" do
33
33
  externalImageFilepath = "#{FIXTURES_DIR}/missingImageExternal.html"
34
- @imageCheck = Images.new(externalImageFilepath, HTML::Proofer.create_nokogiri(externalImageFilepath), {:longTests => true})
34
+ @imageCheck = Images.new(externalImageFilepath, HTML::Proofer.create_nokogiri(externalImageFilepath))
35
35
  @imageCheck.run
36
+ @imageCheck.hydra.run
37
+ @imageCheck.issues[0].sub!(/ #<Typhoeus::Response:[\w]+>/, "")
36
38
  @imageCheck.issues[0].should eq("spec/html/proofer/fixtures/missingImageExternal.html".blue + ": external image http://www.whatthehell does not exist")
37
39
  end
38
40
 
@@ -56,4 +58,4 @@ describe "Image tests" do
56
58
  @imageCheck.run
57
59
  @imageCheck.issues[0].should eq("spec/html/proofer/fixtures/terribleImageName.html".blue + ": image has a terrible filename (./Screen Shot 2012-08-09 at 7.51.18 AM.png)")
58
60
  end
59
- end
61
+ end
@@ -18,8 +18,10 @@ describe "Links tests" do
18
18
 
19
19
  it "fails for broken external links" do
20
20
  brokenLinkExternalFilepath = "#{FIXTURES_DIR}/brokenLinkExternal.html"
21
- @linkCheck = Links.new(brokenLinkExternalFilepath, HTML::Proofer.create_nokogiri(brokenLinkExternalFilepath), {:longTests => true})
21
+ @linkCheck = Links.new(brokenLinkExternalFilepath, HTML::Proofer.create_nokogiri(brokenLinkExternalFilepath))
22
22
  @linkCheck.run
23
+ @linkCheck.hydra.run
24
+ @linkCheck.issues[0].sub!(/ #<Typhoeus::Response:[\w]+>/, "")
23
25
  @linkCheck.issues[0].should eq("spec/html/proofer/fixtures/brokenLinkExternal.html".blue + ": externally linking to http://www.asdo3IRJ395295jsingrkrg4.com, which does not exist")
24
26
  end
25
27
 
@@ -39,14 +41,14 @@ describe "Links tests" do
39
41
 
40
42
  it "should follow redirects" do
41
43
  linkWithRedirectFilepath = "#{FIXTURES_DIR}/linkWithRedirect.html"
42
- @linkCheck = Links.new(linkWithRedirectFilepath, HTML::Proofer.create_nokogiri(linkWithRedirectFilepath), {:longTests => true})
44
+ @linkCheck = Links.new(linkWithRedirectFilepath, HTML::Proofer.create_nokogiri(linkWithRedirectFilepath))
43
45
  @linkCheck.run
44
46
  @linkCheck.issues[0].should eq(nil)
45
47
  end
46
48
 
47
49
  it "should understand https" do
48
50
  linkWithHttpsFilepath = "#{FIXTURES_DIR}/linkWithHttps.html"
49
- @linkCheck = Links.new(linkWithHttpsFilepath, HTML::Proofer.create_nokogiri(linkWithHttpsFilepath), {:longTests => true})
51
+ @linkCheck = Links.new(linkWithHttpsFilepath, HTML::Proofer.create_nokogiri(linkWithHttpsFilepath))
50
52
  @linkCheck.run
51
53
  @linkCheck.issues[0].should eq(nil)
52
54
  end
@@ -57,4 +59,4 @@ describe "Links tests" do
57
59
  @linkCheck.run
58
60
  @linkCheck.issues[0].should eq(nil)
59
61
  end
60
- end
62
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: html-proofer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-02 00:00:00.000000000 Z
12
+ date: 2013-06-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
45
  version: '1.2'
46
+ - !ruby/object:Gem::Dependency
47
+ name: typhoeus
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 0.6.3
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.6.3
46
62
  - !ruby/object:Gem::Dependency
47
63
  name: html-pipeline
48
64
  requirement: !ruby/object:Gem::Requirement