validate-website 0.7.7 → 0.7.9
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 +7 -0
- data/lib/validate_website/core.rb +13 -0
- data/lib/validate_website/validator.rb +1 -1
- data/spec/core_spec.rb +1 -0
- data/spec/fakeweb_helper.rb +40 -48
- metadata +51 -38
- data/README.rdoc +0 -114
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 508617dba80034c3c180a97bb29ae4b6b20cd346
|
4
|
+
data.tar.gz: 8427dd8ee3e1e3e3de26a404b77820d6dcf6b27f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f3a236e0035c6b5fa3f6136066a28abfff550c4f621d37253680d678d38ef97deaee125c4a0cf9512b234549717fe8fb7847730c3df2faddaca417faf2c5f57f
|
7
|
+
data.tar.gz: 714e6b037aa011031762ced9cdde2083bb18ad39d7cda69883096bd6a016e40876857c32af586e8284187475797d86f783dd1c9150c41e5a984900b957ca4776
|
@@ -22,6 +22,8 @@ module ValidateWebsite
|
|
22
22
|
EXIT_FAILURE_NOT_FOUND = 65
|
23
23
|
EXIT_FAILURE_MARKUP_NOT_FOUND = 66
|
24
24
|
|
25
|
+
PING_URL = 'http://www.google.com/'
|
26
|
+
|
25
27
|
def initialize(options={}, validation_type=:crawl)
|
26
28
|
@markup_error = nil
|
27
29
|
@not_found_error = nil
|
@@ -50,6 +52,8 @@ module ValidateWebsite
|
|
50
52
|
opts = @options.merge(opts)
|
51
53
|
puts color(:note, "validating #{@site}", opts[:color]) unless opts[:quiet]
|
52
54
|
|
55
|
+
puts color(:warning, "No internet connection") unless internet_connection?
|
56
|
+
|
53
57
|
@anemone = Anemone.crawl(@site, opts) do |anemone|
|
54
58
|
anemone.skip_links_like Regexp.new(opts[:exclude]) if opts[:exclude]
|
55
59
|
|
@@ -88,6 +92,15 @@ module ValidateWebsite
|
|
88
92
|
end
|
89
93
|
end
|
90
94
|
|
95
|
+
def internet_connection?
|
96
|
+
begin
|
97
|
+
true if open(ValidateWebsite::Core::PING_URL)
|
98
|
+
rescue
|
99
|
+
false
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
|
91
104
|
def crawl_static(opts={})
|
92
105
|
opts = @options.merge(opts)
|
93
106
|
puts color(:note, "validating #{@site}", opts[:color])
|
@@ -45,7 +45,7 @@ module ValidateWebsite
|
|
45
45
|
# TODO: use a local Java, Python parser... write a Ruby HTML5 parser ?
|
46
46
|
require 'net/http'
|
47
47
|
require 'multipart_body'
|
48
|
-
url = URI.parse('http://validator.nu/')
|
48
|
+
url = URI.parse('http://html5.validator.nu/')
|
49
49
|
multipart = MultipartBody.new(:content => document)
|
50
50
|
http = Net::HTTP.new(url.host)
|
51
51
|
headers = {
|
data/spec/core_spec.rb
CHANGED
data/spec/fakeweb_helper.rb
CHANGED
@@ -1,62 +1,54 @@
|
|
1
1
|
# encoding: UTF-8
|
2
|
-
|
3
|
-
require 'fakeweb'
|
4
|
-
rescue LoadError
|
5
|
-
warn "You need the 'fakeweb' gem installed to test ValidateWebsite"
|
6
|
-
exit
|
7
|
-
end
|
2
|
+
require 'fakeweb'
|
8
3
|
|
9
4
|
FakeWeb.allow_net_connect = false
|
10
5
|
|
11
6
|
class FakePage
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
7
|
+
attr_accessor :links
|
8
|
+
attr_accessor :hrefs
|
9
|
+
attr_accessor :body
|
10
|
+
|
11
|
+
def initialize(name = '', options = {})
|
12
|
+
@name = name
|
13
|
+
@links = [options[:links]].flatten if options.has_key?(:links)
|
14
|
+
@hrefs = [options[:hrefs]].flatten if options.has_key?(:hrefs)
|
15
|
+
@redirect = options[:redirect] if options.has_key?(:redirect)
|
16
|
+
@content_type = options[:content_type] || "text/html"
|
17
|
+
@body = options[:body]
|
18
|
+
|
19
|
+
create_body unless @body
|
20
|
+
add_to_fakeweb
|
21
|
+
end
|
27
22
|
|
28
|
-
|
29
|
-
|
30
|
-
|
23
|
+
def url
|
24
|
+
SPEC_DOMAIN + @name
|
25
|
+
end
|
31
26
|
|
32
|
-
|
27
|
+
private
|
33
28
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
def add_to_fakeweb
|
42
|
-
options = {:body => @body, :content_type => @content_type, :status => [200, "OK"]}
|
29
|
+
def create_body
|
30
|
+
@body = "<html><body>"
|
31
|
+
@links.each{|l| @body += "<a href=\"#{SPEC_DOMAIN}#{l}\"></a>"} if @links
|
32
|
+
@hrefs.each{|h| @body += "<a href=\"#{h}\"></a>"} if @hrefs
|
33
|
+
@body += "</body></html>"
|
34
|
+
end
|
43
35
|
|
44
|
-
|
45
|
-
|
36
|
+
def add_to_fakeweb
|
37
|
+
options = {:body => @body, :content_type => @content_type, :status => [200, "OK"]}
|
46
38
|
|
47
|
-
|
48
|
-
|
49
|
-
options[:location] = redirect_url
|
39
|
+
if @redirect
|
40
|
+
options[:status] = [301, "Permanently Moved"]
|
50
41
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
:status => [200, "OK"]})
|
55
|
-
end
|
42
|
+
# only prepend SPEC_DOMAIN if a relative url (without an http scheme) was specified
|
43
|
+
redirect_url = (@redirect =~ /http/) ? @redirect : SPEC_DOMAIN + @redirect
|
44
|
+
options[:location] = redirect_url
|
56
45
|
|
57
|
-
|
46
|
+
# register the page this one redirects to
|
47
|
+
FakeWeb.register_uri(:get, redirect_url, {:body => '',
|
48
|
+
:content_type => @content_type,
|
49
|
+
:status => [200, "OK"]})
|
58
50
|
end
|
59
|
-
end
|
60
51
|
|
61
|
-
|
62
|
-
|
52
|
+
FakeWeb.register_uri(:get, SPEC_DOMAIN + @name, options)
|
53
|
+
end
|
54
|
+
end
|
metadata
CHANGED
@@ -1,82 +1,99 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: validate-website
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
5
|
-
prerelease:
|
4
|
+
version: 0.7.9
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Laurent Arnoud
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-03-18 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: anemone
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 0.6.1
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.6.1
|
25
27
|
- !ruby/object:Gem::Dependency
|
26
28
|
name: rainbow
|
27
|
-
requirement:
|
28
|
-
none: false
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
|
-
- -
|
31
|
+
- - '>='
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: 1.1.1
|
33
34
|
type: :runtime
|
34
35
|
prerelease: false
|
35
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.1.1
|
36
41
|
- !ruby/object:Gem::Dependency
|
37
42
|
name: multipart_body
|
38
|
-
requirement:
|
39
|
-
none: false
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
40
44
|
requirements:
|
41
|
-
- -
|
45
|
+
- - '>='
|
42
46
|
- !ruby/object:Gem::Version
|
43
47
|
version: 0.2.1
|
44
48
|
type: :runtime
|
45
49
|
prerelease: false
|
46
|
-
version_requirements:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.2.1
|
47
55
|
- !ruby/object:Gem::Dependency
|
48
56
|
name: rake
|
49
|
-
requirement:
|
50
|
-
none: false
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
51
58
|
requirements:
|
52
|
-
- -
|
59
|
+
- - '>='
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: 0.8.7
|
55
62
|
type: :development
|
56
63
|
prerelease: false
|
57
|
-
version_requirements:
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.8.7
|
58
69
|
- !ruby/object:Gem::Dependency
|
59
70
|
name: minitest
|
60
|
-
requirement:
|
61
|
-
none: false
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
62
72
|
requirements:
|
63
|
-
- -
|
73
|
+
- - '>='
|
64
74
|
- !ruby/object:Gem::Version
|
65
75
|
version: 2.1.0
|
66
76
|
type: :development
|
67
77
|
prerelease: false
|
68
|
-
version_requirements:
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 2.1.0
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: fakeweb
|
71
|
-
requirement:
|
72
|
-
none: false
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
73
86
|
requirements:
|
74
|
-
- -
|
87
|
+
- - '>='
|
75
88
|
- !ruby/object:Gem::Version
|
76
89
|
version: 1.3.0
|
77
90
|
type: :development
|
78
91
|
prerelease: false
|
79
|
-
version_requirements:
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.3.0
|
80
97
|
description: validate-website is a web crawler for checking the markup validity with
|
81
98
|
XML Schema / DTD and not found urls.
|
82
99
|
email: laurent@spkdev.net
|
@@ -86,7 +103,6 @@ executables:
|
|
86
103
|
extensions: []
|
87
104
|
extra_rdoc_files: []
|
88
105
|
files:
|
89
|
-
- README.rdoc
|
90
106
|
- Rakefile
|
91
107
|
- LICENSE
|
92
108
|
- lib/validate_website.rb
|
@@ -199,27 +215,24 @@ files:
|
|
199
215
|
- data/schemas/xhtml-iframe-1.xsd
|
200
216
|
- data/schemas/xhtml-framework-1.xsd
|
201
217
|
- data/schemas/xhtml-basic10.xsd
|
202
|
-
-
|
203
|
-
|
204
|
-
- !binary |-
|
205
|
-
YmluL3ZhbGlkYXRlLXdlYnNpdGUtc3RhdGlj
|
218
|
+
- bin/validate-website
|
219
|
+
- bin/validate-website-static
|
206
220
|
homepage: http://github.com/spk/validate-website
|
207
221
|
licenses:
|
208
222
|
- MIT
|
223
|
+
metadata: {}
|
209
224
|
post_install_message:
|
210
225
|
rdoc_options: []
|
211
226
|
require_paths:
|
212
227
|
- lib
|
213
228
|
required_ruby_version: !ruby/object:Gem::Requirement
|
214
|
-
none: false
|
215
229
|
requirements:
|
216
|
-
- -
|
230
|
+
- - '>='
|
217
231
|
- !ruby/object:Gem::Version
|
218
232
|
version: '0'
|
219
233
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
220
|
-
none: false
|
221
234
|
requirements:
|
222
|
-
- -
|
235
|
+
- - '>='
|
223
236
|
- !ruby/object:Gem::Version
|
224
237
|
version: '0'
|
225
238
|
requirements:
|
@@ -227,9 +240,9 @@ requirements:
|
|
227
240
|
- rainbow
|
228
241
|
- multipart_body
|
229
242
|
rubyforge_project:
|
230
|
-
rubygems_version:
|
243
|
+
rubygems_version: 2.0.0
|
231
244
|
signing_key:
|
232
|
-
specification_version:
|
245
|
+
specification_version: 4
|
233
246
|
summary: Web crawler for checking the validity of your documents
|
234
247
|
test_files:
|
235
248
|
- spec/validator_spec.rb
|
data/README.rdoc
DELETED
@@ -1,114 +0,0 @@
|
|
1
|
-
= validate-website - Web crawler for checking the validity of your documents
|
2
|
-
|
3
|
-
== INSTALLATION
|
4
|
-
|
5
|
-
=== Debian
|
6
|
-
|
7
|
-
aptitude install rubygems ruby-dev libxslt-dev libxml2-dev
|
8
|
-
|
9
|
-
=== RubyGems
|
10
|
-
|
11
|
-
gem install validate-website
|
12
|
-
|
13
|
-
== SYNOPSIS
|
14
|
-
|
15
|
-
validate-website [OPTIONS]
|
16
|
-
validate-website-static [OPTIONS]
|
17
|
-
|
18
|
-
== DESCRIPTION
|
19
|
-
|
20
|
-
validate-website is a web crawler for checking the markup validity with XML
|
21
|
-
Schema / DTD and not found urls (more info doc/validate-website.txt).
|
22
|
-
|
23
|
-
validate-website-static checks the markup validity of your local documents with
|
24
|
-
XML Schema / DTD (more info doc/validate-website-static.txt).
|
25
|
-
|
26
|
-
HTML5 support with Validator.nu Web Service.
|
27
|
-
|
28
|
-
== VALIDATE WEBSITE OPTIONS
|
29
|
-
|
30
|
-
-s, --site SITE
|
31
|
-
Website to crawl (Default: http://localhost:3000/)
|
32
|
-
-u, --user-agent USERAGENT
|
33
|
-
Change user agent (Default: Anemone/VERSION)
|
34
|
-
-e, --exclude EXCLUDE
|
35
|
-
Url to exclude (ex: redirect|news)
|
36
|
-
-i, --ignore-errors IGNORE
|
37
|
-
Ignore certain validation errors (ex: autocorrect)
|
38
|
-
-f, --file FILE
|
39
|
-
Save not well formed or not found (with -n used) urls
|
40
|
-
-c, --cookies COOKIES
|
41
|
-
Set defaults cookies
|
42
|
-
-m, --[no-]markup-validation
|
43
|
-
Markup validation (Default: true)
|
44
|
-
-n, --not-found
|
45
|
-
Log not found url (Default: false)
|
46
|
-
--[no-]color
|
47
|
-
Show colored output (Default: true)
|
48
|
-
-v, --verbose
|
49
|
-
Show detail of validator errors (Default: false).
|
50
|
-
-q, --quiet
|
51
|
-
Only report errors (Default: false).
|
52
|
-
-d, --debug
|
53
|
-
Show anemone log (Default: false)
|
54
|
-
-h, --help
|
55
|
-
Show help message and exit.
|
56
|
-
|
57
|
-
== EXIT STATUS
|
58
|
-
0::
|
59
|
-
Markup is valid and no 404 found.
|
60
|
-
64::
|
61
|
-
Not valid markup found.
|
62
|
-
65::
|
63
|
-
There are pages not found.
|
64
|
-
66::
|
65
|
-
There are not valid markup and pages not found.
|
66
|
-
|
67
|
-
== On your application
|
68
|
-
|
69
|
-
require 'validate_website/validator'
|
70
|
-
body = '<!DOCTYPE html><html></html>'
|
71
|
-
v = ValidateWebsite::Validator.new(Nokogiri::HTML(body), body)
|
72
|
-
v.valid? # => false
|
73
|
-
|
74
|
-
== With RSpec
|
75
|
-
|
76
|
-
On spec/spec_helper.rb:
|
77
|
-
|
78
|
-
require 'validate_website/validator'
|
79
|
-
require 'validate_website/rspec'
|
80
|
-
|
81
|
-
On your spec/controllers:
|
82
|
-
|
83
|
-
it 'should be valid' do
|
84
|
-
response.body.should be_w3c_valid
|
85
|
-
end
|
86
|
-
|
87
|
-
== REQUIREMENTS
|
88
|
-
|
89
|
-
See validate-website.gemspec file.
|
90
|
-
|
91
|
-
== CREDITS
|
92
|
-
|
93
|
-
* Thanks tenderlove for Nokogiri, this tool is inspired from markup_validity.
|
94
|
-
* And Chris Kite for Anemone web-spider framework.
|
95
|
-
|
96
|
-
== MORE INFO
|
97
|
-
|
98
|
-
The HTML5 support is done by using the Validator.nu Web Service, so the content
|
99
|
-
of your webpage is logged by a tier. It's not the case for other validation
|
100
|
-
because validate-website use the XML Schema or DTD stored on the data/ directory.
|
101
|
-
|
102
|
-
Please read http://about.validator.nu/#tos for more info on the HTML5
|
103
|
-
validation service.
|
104
|
-
|
105
|
-
== CONTRIBUTORS
|
106
|
-
|
107
|
-
* François de Metz (francois2metz)
|
108
|
-
* Bruno Michel (nono)
|
109
|
-
* Matt Brictson (mbrictson)
|
110
|
-
|
111
|
-
== LICENSE
|
112
|
-
The MIT License
|
113
|
-
|
114
|
-
Copyright (c) 2009-2012 Laurent Arnoud <laurent@spkdev.net>
|