W3C Validators Gem README

W3C Validators is a Ruby wrapper for the World Wide Web Consortium’s online validation services.

It supports the markup validator, the feed validator and the CSS validator.

Installation

gem install w3c_validators

Usage

There are three main validator classes available, the W3CValidators::MarkupValidator (used for HTML), the W3CValidators::FeedValidator and the W3CValidators::CSSValidator.

Each validator has offers three different validation methods.

  • validate_text methods take a string

  • validate_file methods take a path to a file or an IO object

  • validate_uri methods take a published URL

In addition, the W3CValidators::MarkupValidator has a validate_uri_quickly method, which performs a HEAD request against the markup validation service. The Results of this call give an error count but no error details.

Using a local validator

Each of the three validators allows you to specify a custom path to the validator. You can set your own validator like this:

validator = MarkupValidator.new(:validator_uri => 'http://localhost/check')

Using a proxy server

You can use a proxy server by passing in its information in the contructor.

validator = MarkupValidator.new(:proxy_server => 'proxy.example.com',
                                :proxy_port   => 80,
                                :proxy_user   => 'optional',
                                :proxy_pass   => 'optional')

Examples

Example #1: Markup validator, local file

require 'w3c_validators'

include W3CValidators

@validator = MarkupValidator.new

# override the DOCTYPE
@validator.set_doctype!(:html32)

# turn on debugging messages
@validator.set_debug!(true)

file = File.dirname(__FILE__) + '/fixtures/markup.html'
results = @validator.validate_file(fp)

if results.errors.length > 0
  results.errors.each do |err|
    puts err.to_s
  end
else
  puts 'Valid!'
end

puts 'Debugging messages'

results.debug_messages.each do |key, value|
  puts "#{key}: #{value}"
end

Example #2: Feed validator, remote file

require 'w3c_validators'

include W3CValidators

@validator = FeedValidator.new

results = @validator.validate_uri('http://example.com/feed.xml')

if results.errors.length > 0
  results.errors.each do |err|
    puts err.to_s
  end
else
  puts 'Valid!'
end

Example #3: CSS validator, text fragment

require 'w3c_validators'

include W3CValidators

@validator = CSSValidator.new

results = @validator.validate_text('body { margin: 0px; }')

if results.errors.length > 0
  results.errors.each do |err|
    puts err.to_s
  end
else
  puts 'Valid!'
end

Tests

Run unit tests using rake test. Note that there is a one second delay between each call to the W3C’s validators per their request.

Credits and code

Documentation is available at code.dunae.ca/w3c_validators.

Source is available on GitHub

Written by Alex Dunae (dunae.ca, e-mail ‘code’ at the same domain), 2007.

Thanks to Ryan King for creating the 0.9.2 update.

Thanks to Ryan King, Jonathan Julian and Sylvain LaFleur for creating the 0.9.3 update.

Thanks to James Rosen and Roman Shterenzon for creating the 1.0.1 update.