html-proofer 1.3.3 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2ec0386b90eb4e6cd4488cc9c05a51f9bb4618b9
4
- data.tar.gz: 131403625ac57dc2efbae4799f6925151457f0d5
3
+ metadata.gz: f2eb21756ab1eb24e38b51ada6d481b1dbc42eb8
4
+ data.tar.gz: bb779ed45d42bb8c9e7824cb66bcdd33f027c2ee
5
5
  SHA512:
6
- metadata.gz: 8574ae57e7f490f393d0031f054d3f00b5e2ab8a530bfa9bf4188328186c29aefc4508db03422a520febdd15149a13aadf8f5f6d5a910ae6ea6856962085c8f3
7
- data.tar.gz: 56ebf1b4e835f97aca351f4c76eef0000198f09b555f155ba1510faf719b0c423cae7377d411478276c431342ae5854fcd77afe12952b89f4631c61e15ef8df1
6
+ metadata.gz: 3dd53810b0e3ae1b9760ced7d748100ab5ff56ed9b2b5f9770ea67960653b3a00d199a82f3a92c86c43054c3ec21191f82d9a860be389abce615aaf71b465425
7
+ data.tar.gz: 1225ae4c9a19292b05017409233dd8e8d1c0bcc5761038a8b40f62bebcc5926073e185ff7a4d4de205a4ffd53886d91481adaba54a57c13eba0086eeac404aba
data/README.md CHANGED
@@ -63,7 +63,7 @@ You'll get a new program called `htmlproof` with this gem. Terrific!
63
63
  Use it like you'd expect to:
64
64
 
65
65
  ``` bash
66
- htmlproof run ./out --swap wow:cow,mow:doh --ext .html.erb --ignore www.github.com
66
+ htmlproof ./out --swap wow:cow,mow:doh --ext .html.erb --ignore www.github.com
67
67
  ```
68
68
 
69
69
  Note: since `swap` is a bit special, you'll pass in a pair of `RegEx:String` values.
@@ -139,6 +139,8 @@ The `HTML::Proofer` constructor takes an optional hash of additional options:
139
139
  | `verbose` | If `true`, outputs extra information as the checking happens. Useful for debugging. | `false` |
140
140
  | `only_4xx` | Only reports errors for links that fall within the 4xx status code range. | `false` |
141
141
 
142
+ ### Configuring Typhoeus
143
+
142
144
  You can also pass in any of Typhoeus' options for the external link check. For example:
143
145
 
144
146
  ``` ruby
@@ -147,6 +149,18 @@ HTML::Proofer.new("out/", {:ext => ".htm", :verbose => true, :ssl_verifyhost =>
147
149
 
148
150
  This sets `HTML::Proofer`'s extensions to use _.htm_, and gives Typhoeus a configuration for it to be verbose, and use specific SSL settings. Check [the Typhoeus documentation](https://github.com/typhoeus/typhoeus#other-curl-options) for more information on what options it can receive.
149
151
 
152
+ ### Configuring Parallel
153
+
154
+ [Parallel](https://github.com/grosser/parallel) is being used to speed things up a bit. You can pass in any of its options with the options "namespace" `:parallel`. For example:
155
+
156
+ ``` ruby
157
+ HTML::Proofer.new("out/", {:ext => ".htm", :verbose => true, :ssl_verifyhost => 2, :parallel => { :in_processes => 3} })
158
+ ```
159
+
160
+ `:in_processes => 3` will be passed into Parallel as a configuration option.
161
+
162
+ ### Array of links
163
+
150
164
  Instead of a directory as the first argument, you can also pass in an array of links:
151
165
 
152
166
  ``` ruby
data/html-proofer.gemspec CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.name = "html-proofer"
6
- gem.version = "1.3.3"
6
+ gem.version = "1.4.0"
7
7
  gem.authors = ["Garen Torikian"]
8
8
  gem.email = ["gjtorikian@gmail.com"]
9
9
  gem.description = %q{Test your rendered HTML files to make sure they're accurate.}
@@ -20,6 +20,7 @@ Gem::Specification.new do |gem|
20
20
  gem.add_dependency "colored", "~> 1.2"
21
21
  gem.add_dependency "typhoeus", "~> 0.6.7"
22
22
  gem.add_dependency "yell", "~> 2.0"
23
+ gem.add_dependency "parallel", "~> 1.3"
23
24
 
24
25
  gem.add_development_dependency "redcarpet"
25
26
  gem.add_development_dependency "rspec", "~> 2.13.0"
data/lib/html/proofer.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'nokogiri'
2
2
  require 'yell'
3
+ require 'parallel'
3
4
 
4
5
  begin
5
6
  require "awesome_print"
@@ -24,6 +25,8 @@ module HTML
24
25
  class Proofer
25
26
  include Yell::Loggable
26
27
 
28
+ attr_reader :options, :typhoeus_opts, :parallel_opts
29
+
27
30
  def initialize(src, opts={})
28
31
  @src = src
29
32
 
@@ -43,6 +46,10 @@ module HTML
43
46
  :followlocation => true
44
47
  }
45
48
 
49
+ # fall back to parallel defaults
50
+ @parallel_opts = opts[:parallel] || {}
51
+ opts.delete(:parallel)
52
+
46
53
  # Typhoeus won't let you pass in any non-Typhoeus option; if the option is not
47
54
  # a proofer_opt, it must be for Typhoeus
48
55
  opts.keys.each do |key|
@@ -63,27 +70,32 @@ module HTML
63
70
 
64
71
  def run
65
72
  unless @src.is_a? Array
66
- total_files = 0
67
73
  external_urls = {}
68
74
 
69
75
  logger.info HTML::colorize :white, "Running #{get_checks} checks on #{@src} on *#{@options[:ext]}... \n\n"
70
76
 
71
- files.each do |path|
72
- total_files += 1
77
+ results = Parallel.map(files, @parallel_opts) do |path|
73
78
  html = HTML::Proofer.create_nokogiri(path)
79
+ result = {:external_urls => {}, :failed_tests => []}
74
80
 
75
81
  get_checks.each do |klass|
76
82
  logger.debug HTML::colorize :blue, "Checking #{klass.to_s.downcase} on #{path} ..."
77
83
  check = Object.const_get(klass).new(@src, path, html, @options)
78
84
  check.run
79
- external_urls.merge!(check.external_urls)
80
- @failed_tests.concat(check.issues) if check.issues.length > 0
85
+ result[:external_urls].merge!(check.external_urls)
86
+ result[:failed_tests].concat(check.issues) if check.issues.length > 0
81
87
  end
88
+ result
89
+ end
90
+
91
+ results.each do |item|
92
+ external_urls.merge!(item[:external_urls])
93
+ @failed_tests.concat(item[:failed_tests])
82
94
  end
83
95
 
84
96
  external_link_checker(external_urls) unless @options[:disable_external]
85
97
 
86
- logger.info HTML::colorize :green, "Ran on #{total_files} files!\n\n"
98
+ logger.info HTML::colorize :green, "Ran on #{files.length} files!\n\n"
87
99
  else
88
100
  external_urls = Hash[*@src.map{ |s| [s, nil] }.flatten]
89
101
  external_link_checker(external_urls) unless @options[:disable_external]
@@ -36,9 +36,11 @@ module HTML
36
36
  end
37
37
 
38
38
  def parts
39
- URI::Parser.new(:ESCAPED => '\%|\|').parse url
39
+ return @parts_cached if defined?(@parts_cached)
40
+
41
+ @parts_cached = URI::Parser.new(:ESCAPED => '\%|\|').parse url
40
42
  rescue URI::Error
41
- nil
43
+ @parts_cached = nil
42
44
  end
43
45
 
44
46
  def path
@@ -1,6 +1,7 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe HTML::Proofer do
4
+
4
5
  describe "#failed_tests" do
5
6
  it "is a list of the formatted errors" do
6
7
  brokenLinkInternalFilepath = "#{FIXTURES_DIR}/links/brokenLinkInternal.html"
@@ -9,6 +10,7 @@ describe HTML::Proofer do
9
10
  proofer.failed_tests.should eq(["\e[34mspec/html/proofer/fixtures/links/brokenLinkInternal.html\e[0m: internally linking to ./notreal.html, which does not exist", "\e[34mspec/html/proofer/fixtures/links/brokenLinkInternal.html\e[0m: internally linking to ./missingImageAlt.html, which does not exist"])
10
11
  end
11
12
  end
13
+
12
14
  describe "#files" do
13
15
  it "works for directory that ends with .html" do
14
16
  folder = "#{FIXTURES_DIR}/links/_site/folder.html"
@@ -16,4 +18,21 @@ describe HTML::Proofer do
16
18
  proofer.files.should == ["#{folder}/index.html"]
17
19
  end
18
20
  end
21
+
22
+ describe "#options" do
23
+ it "strips out undesired Typhoeus options" do
24
+ folder = "#{FIXTURES_DIR}/links/_site/folder.html"
25
+ proofer = HTML::Proofer.new folder, :verbose => true
26
+ proofer.options[:verbose].should == true
27
+ proofer.typhoeus_opts[:verbose].should == nil
28
+ end
29
+
30
+ it "takes options for Parallel" do
31
+ folder = "#{FIXTURES_DIR}/links/_site/folder.html"
32
+ proofer = HTML::Proofer.new folder, :parallel => { :in_processes => 3 }
33
+ proofer.parallel_opts[:in_processes].should == 3
34
+ proofer.typhoeus_opts[:in_processes].should == nil
35
+ proofer.options[:parallel].should == nil
36
+ end
37
+ end
19
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: html-proofer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garen Torikian
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-28 00:00:00.000000000 Z
11
+ date: 2014-09-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mercenary
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '2.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: parallel
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.3'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.3'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: redcarpet
85
99
  requirement: !ruby/object:Gem::Requirement