Extending Raakt (and other Ruby libraries) is easy! In this example we’ll add a HTML validation method that calls the 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}."