w3clove 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -16,4 +16,20 @@ I've already done something similar to this, I sent {a little contribution to do
16
16
 
17
17
  * in addition to an XML file, accept as input the URL of a site and crawl the site to find all internal links
18
18
  * validate the markup locally, without querying the W3C site, for more speed and to not saturate the W3C site
19
- * store the results on a local database, so on subsequent checks, only the pages that had errors are re-checked (unless a --checkall force flag is passed). This way developers can check the whole site, get the errors, deploy the corrections, and recheck the site.
19
+ * store the results on a local database, so on subsequent checks, only the pages that had errors are re-checked (unless a --checkall force flag is passed). This way developers can check the whole site, get the errors, deploy the corrections, and recheck the site.
20
+
21
+ = Installation:
22
+
23
+ w3clove is a Ruby gem that can be installed on the usual way
24
+
25
+ gem install w3clove
26
+
27
+ = Usage:
28
+
29
+ Pass it the url of an XML sitemap to be checked, like:
30
+
31
+ w3clove http://www.ryanair.com/sitemap.xml
32
+
33
+ = Notes:
34
+
35
+ This gem requires Ruby 1.9, and has been tested on Ruby 1.9.2
data/bin/w3clove CHANGED
@@ -4,7 +4,7 @@
4
4
  require_relative '../lib/w3clove'
5
5
 
6
6
  begin
7
- W3clove.check_sitemap(ARGV[0])
7
+ W3Clove::Validator.check(ARGV[0])
8
8
  rescue
9
9
  puts "There was an error processing your request"
10
10
  puts "USAGE: w3clove url_of_xml_sitemap"
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ module W3Clove
4
+ ##
5
+ # A message holds a message_id, a line, a text and a type
6
+ #
7
+ # message_id... corresponds to the W3C messages list from
8
+ # http://validator.w3.org/docs/errors.html
9
+ # line......... line number where the error was detected
10
+ # on the page that created it
11
+ # text......... generic but descriptive text about the error
12
+ # type......... can be :error or :warning
13
+ #
14
+ Message = Struct.new(:message_id, :line, :text, :type)
15
+ end
@@ -0,0 +1,56 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'w3c_validators'
4
+ include W3CValidators
5
+
6
+ module W3Clove
7
+ ##
8
+ # A page has an URL to be validated, and a collection of errors
9
+ # In case of an exception happens when validating, it is tracked
10
+ #
11
+ class Page
12
+ attr_accessor :url, :exception
13
+
14
+ def initialize(url)
15
+ @url = url
16
+ end
17
+
18
+ ##
19
+ # Checks for errors and returns true if none found, false otherwise
20
+ # warnings are not considered as validation errors so a page with
21
+ # warnings but without errors will return true
22
+ # If the validation goes well, errors should be an array. Otherwise
23
+ # it will still be nil, which will not be considered validated
24
+ def valid?
25
+ !errors.nil? && errors.empty?
26
+ end
27
+
28
+ def errors
29
+ @errors ||= validations.errors.map {|e|
30
+ W3Clove::Message.new(e.message_id,
31
+ e.line,
32
+ e.message,
33
+ :error)}
34
+ rescue Exception => e
35
+ @exception = e.to_s
36
+ nil
37
+ end
38
+
39
+ def warnings
40
+ @warnings ||= validations.warnings.map {|w|
41
+ W3Clove::Message.new(w.message_id,
42
+ w.line,
43
+ w.message,
44
+ :warning)}
45
+ rescue Exception => e
46
+ @exception = e.to_s
47
+ nil
48
+ end
49
+
50
+ private
51
+
52
+ def validations
53
+ @validations ||= MarkupValidator.new.validate_uri(url)
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,43 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'open-uri'
4
+ require 'nokogiri'
5
+
6
+ module W3Clove
7
+ ##
8
+ # A sitemap has an URL, and holds a collection of pages to be validated
9
+ #
10
+ class Sitemap
11
+ attr_accessor :url
12
+
13
+ def initialize(url)
14
+ @url = url
15
+ end
16
+
17
+ def pages
18
+ @pages ||= pages_in_sitemap.uniq {|p| p.url}
19
+ end
20
+
21
+ def errors
22
+ pages.map {|p| p.errors}.flatten
23
+ end
24
+
25
+ def warnings
26
+ pages.map {|p| p.warnings}.flatten
27
+ end
28
+
29
+ private
30
+
31
+ def pages_in_sitemap
32
+ locations.map {|loc| W3Clove::Page.new(loc.text)}
33
+ end
34
+
35
+ def locations
36
+ Nokogiri::XML(doc).css('loc')
37
+ end
38
+
39
+ def doc
40
+ @doc ||= open(url)
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,94 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ module W3Clove
4
+ ##
5
+ # Validator module is the one in charge of doing the validation loop
6
+ # for all pages on a sitemap and output the errors
7
+ #
8
+ module Validator
9
+ attr_writer :printer
10
+
11
+ extend self
12
+
13
+ ##
14
+ # Parses a remote xml sitemap and checks markup validation for each url
15
+ # Shows progress on dot-style (...F...FFE..). A dot is a page with no errors,
16
+ # an F is a page with errors, and an E is an exception
17
+ # After the checking is done, a detailed summary is shown
18
+ def check(url)
19
+ sitemap = W3Clove::Sitemap.new(url)
20
+ say "Validating #{sitemap.pages.length} pages..."
21
+
22
+ sitemap.pages.each do |page|
23
+ say_inline page.valid? ? "." : (page.errors.nil? ? 'E' : 'F')
24
+ end
25
+
26
+ show_results(sitemap)
27
+ end
28
+
29
+ private
30
+
31
+ ##
32
+ # Outputs the results of the validation
33
+ def show_results(sitemap)
34
+ show_sitemap_summary(sitemap)
35
+ show_popular_errors(sitemap)
36
+ show_popular_errors(sitemap)
37
+ say "\n\nDETAILS PER PAGE"
38
+ sitemap.pages.select {|page| !page.errors.empty?}.each do |p|
39
+ show_page_summary(p)
40
+ end
41
+ end
42
+
43
+ def show_sitemap_summary(sitemap)
44
+ <<HEREDOC
45
+ SITEMAP SUMMARY
46
+ TOTAL: #{sitemap.errors.length} errors, #{sitemap.warnings.length} warnings
47
+ HEREDOC
48
+ end
49
+
50
+ def show_popular_errors(sitemap)
51
+ say "\n\nMOST POPULAR ERRORS\n"
52
+ sitemap.errors.group_by {|e| e.message_id}.sort_by {|m,e| e.length}.reverse.each do |message_id, errors|
53
+ say "error #{message_id} happens #{errors.length} times"
54
+ end
55
+ end
56
+
57
+ def show_popular_warnings(sitemap)
58
+ say "\n\nMOST POPULAR WARNINGS\n"
59
+ sitemap.warnings.group_by {|e| e.message_id}.sort_by {|m,e| e.length}.reverse.each do |message_id, warnings|
60
+ say "warning #{message_id} happens #{warnings.length} times"
61
+ end
62
+ end
63
+
64
+ def show_page_summary(page)
65
+ say "\n ** #{page.url} **"
66
+ " #{page.errors.length} errors, #{page.warnings.length} warnings"
67
+ page.errors.each do |error|
68
+ say "\n Error #{error.message_id} on line #{error.line}:"
69
+ say " #{error.text}"
70
+ end
71
+
72
+ page.warnings.each do |warning|
73
+ say "\n Warning #{warning.message_id} on line #{warning.line}:"
74
+ say " #{warning.text}"
75
+ end
76
+ end
77
+
78
+ def printer
79
+ @printer ||= STDOUT
80
+ end
81
+
82
+ ##
83
+ # A shorter alias for printer.puts
84
+ def say(text)
85
+ printer.puts text
86
+ end
87
+
88
+ ##
89
+ # A shorter alias for printer.print
90
+ def say_inline(text)
91
+ printer.print text
92
+ end
93
+ end
94
+ end
@@ -1,3 +1,5 @@
1
- module W3clove
2
- VERSION = "0.0.1"
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ module W3Clove
4
+ VERSION = "0.0.2"
3
5
  end
data/lib/w3clove.rb CHANGED
@@ -1,27 +1,8 @@
1
- module W3clove
2
- require 'open-uri'
3
- require 'nokogiri'
4
- require 'w3c_validators'
5
- include W3CValidators
1
+ # -*- encoding: utf-8 -*-
6
2
 
7
- extend self
8
-
9
- ##
10
- # Parses a remote xml sitemap and checks markup validation for each url within
11
- def check_sitemap(sitemap_url)
12
- validator = MarkupValidator.new
13
-
14
- totals = {:errors => 0, :warnings => 0}
15
-
16
- doc = Nokogiri::XML(open(sitemap_url))
17
- doc.css('loc').collect {|item| item.text}.each do |url|
18
- puts "\nValidating markup of #{url}"
19
- results = validator.validate_uri(url)
20
- puts "#{results.errors.count} errors, #{results.warnings.count} warnings"
21
- totals[:errors] += results.errors.count
22
- totals[:warnings] += results.warnings.count
23
- end
24
-
25
- puts "\nTOTAL:#{totals[:errors]} errors, #{totals[:warnings]} warnings"
26
- end
3
+ module W3Clove
4
+ require_relative './w3clove/validator'
5
+ require_relative './w3clove/sitemap'
6
+ require_relative './w3clove/page'
7
+ require_relative './w3clove/message'
27
8
  end
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require_relative 'spec_helper'
4
+
5
+ describe W3Clove::Message do
6
+ before(:each) do
7
+ @error_message = W3Clove::Message.new('25',
8
+ 100,
9
+ message_text('25'),
10
+ :error)
11
+ @warning_message = W3Clove::Message.new('25',
12
+ 100,
13
+ message_text('25'),
14
+ :warning)
15
+ end
16
+
17
+ it "should have a message_id" do
18
+ @error_message.message_id.should == '25'
19
+ end
20
+
21
+ it "should have a line" do
22
+ @error_message.line.should == 100
23
+ end
24
+
25
+ it "should have a text" do
26
+ @error_message.text.should == message_text('25')
27
+ end
28
+
29
+ it "should have a type" do
30
+ @error_message.type == :error
31
+ @warning_message.type == :warning
32
+ end
33
+ end
@@ -0,0 +1,19 @@
1
+ module W3Clove
2
+ class MockedValidator
3
+ attr_accessor :errors, :warnings
4
+
5
+ def initialize
6
+ @errors, @warnings = [], []
7
+ end
8
+
9
+ def add_error(message_id, line, message)
10
+ @errors << W3Clove::MockedMessage.new(message_id, line, message)
11
+ end
12
+
13
+ def add_warning(message_id, line, message)
14
+ @warnings << W3Clove::MockedMessage.new(message_id, line, message)
15
+ end
16
+ end
17
+
18
+ MockedMessage = Struct.new(:message_id, :line, :message)
19
+ end
data/spec/page_spec.rb ADDED
@@ -0,0 +1,97 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require_relative 'spec_helper'
4
+
5
+ describe W3Clove::Page do
6
+ before(:each) do
7
+ @page = W3Clove::Page.new('http://www.ryanair.com/es/')
8
+ MarkupValidator.any_instance.stubs(:validate_uri).with('http://www.ryanair.com/es/').returns(stubbed_validator_results)
9
+ end
10
+
11
+ it "should have an URL" do
12
+ @page.url.should == "http://www.ryanair.com/es/"
13
+ end
14
+
15
+ it "should be valid when it has no errors" do
16
+ @page.errors.should_not be_empty
17
+ @page.should_not be_valid
18
+ end
19
+
20
+ it "should be valid when it has no errors, even if it has warnings" do
21
+ page = W3Clove::Page.new('http://example.com/no_errors_but_warnings')
22
+ MarkupValidator.any_instance.stubs(:validate_uri).with('http://example.com/no_errors_but_warnings').returns(stubbed_validator_results(false))
23
+ page.errors.should be_empty
24
+ page.warnings.should_not be_empty
25
+ page.should be_valid
26
+ end
27
+
28
+ it "should not be valid if an exception happened when validating" do
29
+ page = W3Clove::Page.new('http://example.com/timeout')
30
+ MarkupValidator.any_instance.stubs(:validate_uri).with('http://example.com/timeout').raises(TimeoutError)
31
+ page.errors.should be_nil
32
+ page.should_not be_valid
33
+ end
34
+
35
+ it "should get its validation errors from the W3C" do
36
+ @page.errors.length.should == 3
37
+
38
+ @page.errors.each do |e|
39
+ e.should be_an_instance_of W3Clove::Message
40
+ end
41
+
42
+ @page.errors[0].message_id.should == '25'
43
+ @page.errors[0].line.should == '92'
44
+ @page.errors[0].text.should == message_text('25')
45
+ @page.errors[0].type.should == :error
46
+
47
+ @page.errors[1].message_id.should == '325'
48
+ @page.errors[1].line.should == '92'
49
+ @page.errors[1].text.should == message_text('325')
50
+ @page.errors[1].type.should == :error
51
+
52
+ @page.errors[2].message_id.should == '325'
53
+ @page.errors[2].line.should == '224'
54
+ @page.errors[2].text.should == message_text('325')
55
+ @page.errors[2].type.should == :error
56
+ end
57
+
58
+ it "should get its validation warnings from the W3C" do
59
+ @page.warnings.length.should == 3
60
+
61
+ @page.warnings.each do |w|
62
+ w.should be_an_instance_of W3Clove::Message
63
+ end
64
+
65
+ @page.warnings[0].message_id.should == '338'
66
+ @page.warnings[0].line.should == '92'
67
+ @page.warnings[0].text.should == message_text('338')
68
+ @page.warnings[0].type.should == :warning
69
+
70
+ @page.warnings[1].message_id.should == '247'
71
+ @page.warnings[1].line.should == '112'
72
+ @page.warnings[1].text.should == message_text('247')
73
+ @page.warnings[1].type.should == :warning
74
+
75
+ @page.warnings[2].message_id.should == '247'
76
+ @page.warnings[2].line.should == '202'
77
+ @page.warnings[2].text.should == message_text('247')
78
+ @page.warnings[2].type.should == :warning
79
+ end
80
+
81
+ it "should recover from timeouts when checking for errors" do
82
+ page = W3Clove::Page.new('http://example.com/timeout')
83
+ MarkupValidator.any_instance.stubs(:validate_uri).with('http://example.com/timeout').raises(TimeoutError)
84
+ lambda { page.errors }.should_not raise_error
85
+ page.errors.should be_nil
86
+ page.exception.should == 'Timeout::Error'
87
+ end
88
+
89
+ it "should recover from timeouts when checking for warnings" do
90
+ page = W3Clove::Page.new('http://example.com/timeout')
91
+ MarkupValidator.any_instance.stubs(:validate_uri).with('http://example.com/timeout').raises(TimeoutError)
92
+ lambda { page.warnings }.should_not raise_error
93
+ page.warnings.should be_nil
94
+ page.exception.should == 'Timeout::Error'
95
+ end
96
+ end
97
+
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
3
+ <url>
4
+ <loc>http://www.ryanair.com/es/</loc>
5
+ </url>
6
+ <url>
7
+ <loc>http://www.ryanair.com/es/careers/job</loc>
8
+ </url>
9
+ <url>
10
+ <loc>http://www.ryanair.com/es/about</loc>
11
+ </url>
12
+ <url>
13
+ <loc>http://www.ryanair.com/es/about</loc>
14
+ </url>
15
+ <url>
16
+ <loc>http://www.ryanair.com/es/about</loc>
17
+ </url>
18
+ </urlset>
@@ -0,0 +1,38 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require_relative 'spec_helper'
4
+
5
+ describe W3Clove::Sitemap do
6
+ before(:each) do
7
+ @sitemap = W3Clove::Sitemap.new('http://ryanair.com/sitemap.xml')
8
+ @sitemap.stub!(:doc).and_return(open("#{$samples_dir}/sitemap.xml"))
9
+ MarkupValidator.any_instance.stubs(:validate_uri).returns(stubbed_validator_results)
10
+ end
11
+
12
+ it "should have an URL" do
13
+ @sitemap.url.should == 'http://ryanair.com/sitemap.xml'
14
+ end
15
+
16
+ it "should get its pages from the xml, removing repeated urls" do
17
+ @sitemap.pages.length.should == 3
18
+ @sitemap.pages[0].url.should == 'http://www.ryanair.com/es/'
19
+ @sitemap.pages[1].url.should == 'http://www.ryanair.com/es/careers/job'
20
+ @sitemap.pages[2].url.should == 'http://www.ryanair.com/es/about'
21
+ end
22
+
23
+ it "should know the errors of all of its pages as a whole" do
24
+ @sitemap.errors.length.should == 9
25
+ @sitemap.errors.each do |e|
26
+ e.should be_an_instance_of W3Clove::Message
27
+ e.type.should == :error
28
+ end
29
+ end
30
+
31
+ it "should know the warnings of all of its pages as a whole" do
32
+ @sitemap.warnings.length.should == 9
33
+ @sitemap.warnings.each do |w|
34
+ w.should be_an_instance_of W3Clove::Message
35
+ w.type.should == :warning
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,36 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require_relative '../lib/w3clove'
4
+ require_relative './mocks/mocked_validator'
5
+ require 'mocha'
6
+
7
+ $samples_dir = File.dirname(__FILE__) + '/samples'
8
+
9
+ def message_text(message_id)
10
+ message_texts = {
11
+ '25' => 'general entity "B" not defined and no default entity',
12
+ '325' => 'reference to entity "B" for which no system identifier could be generated',
13
+ '65' => 'document type does not allow element "P" here; missing one of "APPLET", "OBJECT", "MAP", "IFRAME", "BUTTON" start-tag',
14
+ '338' => 'cannot generate system identifier for general entity "B"',
15
+ '247' => 'NET-enabling start-tag requires SHORTTAG YES'
16
+ }
17
+ message_texts[message_id]
18
+ end
19
+
20
+ def stubbed_validator_results(with_errors=true, with_warnings=true)
21
+ fake_validator = W3Clove::MockedValidator.new
22
+
23
+ if with_errors
24
+ fake_validator.add_error('25', '92', message_text('25'))
25
+ fake_validator.add_error('325', '92', message_text('325'))
26
+ fake_validator.add_error('325', '224', message_text('325'))
27
+ end
28
+
29
+ if with_warnings
30
+ fake_validator.add_warning('338', '92', message_text('338'))
31
+ fake_validator.add_warning('247', '112', message_text('247'))
32
+ fake_validator.add_warning('247', '202', message_text('247'))
33
+ end
34
+
35
+ fake_validator
36
+ end
data/w3clove.gemspec CHANGED
@@ -1,10 +1,11 @@
1
1
  # -*- encoding: utf-8 -*-
2
+
2
3
  $:.push File.expand_path("../lib", __FILE__)
3
4
  require "w3clove/version"
4
5
 
5
6
  Gem::Specification.new do |s|
6
7
  s.name = "w3clove"
7
- s.version = W3clove::VERSION
8
+ s.version = W3Clove::VERSION
8
9
  s.platform = Gem::Platform::RUBY
9
10
  s.authors = ["Jaime Iniesta"]
10
11
  s.email = ["jaimeiniesta@gmail.com"]
@@ -15,9 +16,12 @@ and outputs a detailed report with all errors and warnings }
15
16
 
16
17
  s.rubyforge_project = "w3clove"
17
18
 
18
- s.add_dependency 'w3c_validators'
19
+ s.add_dependency 'w3c_validators', '1.0.2'
19
20
  s.add_dependency 'nokogiri'
20
21
 
22
+ s.add_development_dependency 'rspec'
23
+ s.add_development_dependency 'mocha'
24
+
21
25
  s.files = `git ls-files`.split("\n")
22
26
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
27
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 2
9
+ version: 0.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jaime Iniesta
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-03-15 00:00:00 +01:00
17
+ date: 2011-03-22 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -23,11 +23,13 @@ dependencies:
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
24
  none: false
25
25
  requirements:
26
- - - ">="
26
+ - - "="
27
27
  - !ruby/object:Gem::Version
28
28
  segments:
29
+ - 1
29
30
  - 0
30
- version: "0"
31
+ - 2
32
+ version: 1.0.2
31
33
  type: :runtime
32
34
  version_requirements: *id001
33
35
  - !ruby/object:Gem::Dependency
@@ -43,6 +45,32 @@ dependencies:
43
45
  version: "0"
44
46
  type: :runtime
45
47
  version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: rspec
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ segments:
57
+ - 0
58
+ version: "0"
59
+ type: :development
60
+ version_requirements: *id003
61
+ - !ruby/object:Gem::Dependency
62
+ name: mocha
63
+ prerelease: false
64
+ requirement: &id004 !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ segments:
70
+ - 0
71
+ version: "0"
72
+ type: :development
73
+ version_requirements: *id004
46
74
  description: " this tool allows you to check the markup validation of a whole site passing an XML sitemap,\n\
47
75
  and outputs a detailed report with all errors and warnings "
48
76
  email:
@@ -59,15 +87,18 @@ files:
59
87
  - README.rdoc
60
88
  - Rakefile
61
89
  - bin/w3clove
62
- - heatup/01_single_validation.rb
63
- - heatup/02_multiple_validation.rb
64
- - heatup/03_multiple_validation_from_text_file.rb
65
- - heatup/04_multiple_validations_from_xml_file.rb
66
- - heatup/05_multiple_validations_from_remote_xml_sitemap.rb
67
- - heatup/sitemap.xml
68
- - heatup/urls.txt
69
90
  - lib/w3clove.rb
91
+ - lib/w3clove/message.rb
92
+ - lib/w3clove/page.rb
93
+ - lib/w3clove/sitemap.rb
94
+ - lib/w3clove/validator.rb
70
95
  - lib/w3clove/version.rb
96
+ - spec/message_spec.rb
97
+ - spec/mocks/mocked_validator.rb
98
+ - spec/page_spec.rb
99
+ - spec/samples/sitemap.xml
100
+ - spec/sitemap_spec.rb
101
+ - spec/spec_helper.rb
71
102
  - w3clove.gemspec
72
103
  has_rdoc: true
73
104
  homepage: https://github.com/jaimeiniesta/w3clove/
@@ -101,5 +132,10 @@ rubygems_version: 1.3.7
101
132
  signing_key:
102
133
  specification_version: 3
103
134
  summary: command-line tool to validate the markup of a whole site against the W3C validator
104
- test_files: []
105
-
135
+ test_files:
136
+ - spec/message_spec.rb
137
+ - spec/mocks/mocked_validator.rb
138
+ - spec/page_spec.rb
139
+ - spec/samples/sitemap.xml
140
+ - spec/sitemap_spec.rb
141
+ - spec/spec_helper.rb
@@ -1,16 +0,0 @@
1
- # Example of validation of a single URL
2
-
3
- require 'w3c_validators'
4
- include W3CValidators
5
- validator = MarkupValidator.new
6
-
7
- url = 'http://university.rubymendicant.com/'
8
- puts "Validating markup of #{url}"
9
-
10
- results = validator.validate_uri(url)
11
-
12
- if results.errors.length > 0
13
- puts "There are #{results.errors.length} validation errors"
14
- else
15
- puts 'Valid!'
16
- end
@@ -1,25 +0,0 @@
1
- # Example of validation of a list of URLs
2
-
3
- require 'w3c_validators'
4
- include W3CValidators
5
- validator = MarkupValidator.new
6
-
7
- urls = %w{http://university.rubymendicant.com/
8
- http://university.rubymendicant.com/changelog.html
9
- http://university.rubymendicant.com/alumni.html}
10
- totals = {:errors => 0, :warnings => 0}
11
-
12
- urls.each do |url|
13
- puts "\nValidating markup of #{url}"
14
- results = validator.validate_uri(url)
15
- puts "#{results.errors.count} errors, #{results.warnings.count} warnings"
16
- totals[:errors] += results.errors.count
17
- totals[:warnings] += results.warnings.count
18
- end
19
-
20
- puts "\nTOTAL:#{totals[:errors]} errors, #{totals[:warnings]} warnings"
21
-
22
-
23
-
24
-
25
-
@@ -1,23 +0,0 @@
1
- # Example of validation of a list of URLs from a text file
2
-
3
- require 'w3c_validators'
4
- include W3CValidators
5
- validator = MarkupValidator.new
6
-
7
- totals = {:errors => 0, :warnings => 0}
8
- File.open("urls.txt", "r") do |file|
9
- file.each_line do |url|
10
- puts "\nValidating markup of #{url}"
11
- results = validator.validate_uri(url)
12
- puts "#{results.errors.count} errors, #{results.warnings.count} warnings"
13
- totals[:errors] += results.errors.count
14
- totals[:warnings] += results.warnings.count
15
- end
16
- end
17
-
18
- puts "\nTOTAL:#{totals[:errors]} errors, #{totals[:warnings]} warnings"
19
-
20
-
21
-
22
-
23
-
@@ -1,24 +0,0 @@
1
- # Example of validation of a list of URLs from a local XML sitemap file
2
-
3
- require 'nokogiri'
4
- require 'w3c_validators'
5
- include W3CValidators
6
- validator = MarkupValidator.new
7
-
8
- totals = {:errors => 0, :warnings => 0}
9
-
10
- doc = Nokogiri::XML(File.open("sitemap.xml"))
11
- doc.css('loc').collect {|item| item.text}.each do |url|
12
- puts "\nValidating markup of #{url}"
13
- results = validator.validate_uri(url)
14
- puts "#{results.errors.count} errors, #{results.warnings.count} warnings"
15
- totals[:errors] += results.errors.count
16
- totals[:warnings] += results.warnings.count
17
- end
18
-
19
- puts "\nTOTAL:#{totals[:errors]} errors, #{totals[:warnings]} warnings"
20
-
21
-
22
-
23
-
24
-
@@ -1,25 +0,0 @@
1
- # Example of validation of a list of URLs from a remote XML sitemap
2
-
3
- require 'open-uri'
4
- require 'nokogiri'
5
- require 'w3c_validators'
6
- include W3CValidators
7
- validator = MarkupValidator.new
8
-
9
- totals = {:errors => 0, :warnings => 0}
10
-
11
- doc = Nokogiri::XML(open('https://github.com/jaimeiniesta/w3clove/raw/master/heatup/sitemap.xml'))
12
- doc.css('loc').collect {|item| item.text}.each do |url|
13
- puts "\nValidating markup of #{url}"
14
- results = validator.validate_uri(url)
15
- puts "#{results.errors.count} errors, #{results.warnings.count} warnings"
16
- totals[:errors] += results.errors.count
17
- totals[:warnings] += results.warnings.count
18
- end
19
-
20
- puts "\nTOTAL:#{totals[:errors]} errors, #{totals[:warnings]} warnings"
21
-
22
-
23
-
24
-
25
-
data/heatup/sitemap.xml DELETED
@@ -1,12 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
3
- <url>
4
- <loc>http://university.rubymendicant.com/</loc>
5
- </url>
6
- <url>
7
- <loc>http://university.rubymendicant.com/changelog.html</loc>
8
- </url>
9
- <url>
10
- <loc>http://university.rubymendicant.com/alumni.html</loc>
11
- </url>
12
- </url>
data/heatup/urls.txt DELETED
@@ -1,3 +0,0 @@
1
- http://university.rubymendicant.com/
2
- http://university.rubymendicant.com/changelog.html
3
- http://university.rubymendicant.com/alumni.html