====== Extending Raakt ======
Extending Raakt (and other Ruby libraries) is easy! In this example we'll add a HTML validation method that calls the [[http://validator.w3.org/|W3C validator service]]. Please note that if you are planning to batch test a large number of pages, W3C will throttle your access to the validator. In this case you should install a local copy of the validator service first.
First, we add a method to the Raakt module:
# Extends the RAAKT module with a HTML validation mehod.
module Raakt
class ValidatorError < RuntimeError; end
class Test
def validate_markup(url)
require 'open-uri'
require 'uri'
require 'timeout'
validator_url = "http://validator.w3.org/check?uri="
escaped_url = URI.escape(url, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
error_count = -1
begin
timeout(45) {
open( validator_url + escaped_url) do |httpcall|
error_count = httpcall.meta['x-w3c-validator-errors'] if httpcall.meta['x-w3c-validator-errors']
puts "Validator returned " + error_count
end
}
rescue Timeout::Error
raise "Could not validate #{url}. The server did not respond."
rescue
#validator failed (typially due to encoding error)
return -1
end
return error_count
end
end
end
Save this file as raakt_extensions.rb. Then you can require raakt and raakt_extensions in your ruby script like this:
require 'rubygems'
require 'raakt_extensions'
require 'raakt'
raakttest = Raakt::Test.new
validation_result = raakttest.validate_markup("http://www.google.com")
print "The validator returned #{validation_result}."