Skip to content
Browse files

New rake validate_guides task to validate output/*.html against the W…

…3C Validator
  • Loading branch information...
1 parent 0244b43 commit 7db557f1520b2c2c60958e67c049ff424f61cbf1 @jaimeiniesta jaimeiniesta committed May 24, 2010
Showing with 73 additions and 0 deletions.
  1. +6 −0 railties/Rakefile
  2. +67 −0 railties/guides/w3c_validator.rb
View
6 railties/Rakefile
@@ -50,6 +50,12 @@ task :update_prototype_ujs do
system "curl http://github.com/rails/prototype-ujs/raw/master/src/rails.js > lib/rails/generators/rails/app/templates/public/javascripts/rails.js"
end
+# Validate guides -------------------------------------------------------------------------
+desc 'Validate guides, use ONLY=foo to process just "foo.html"'
+task :validate_guides do
+ ruby "guides/w3c_validator.rb"
+end
+
# Generate documentation ------------------------------------------------------------------
Rake::RDocTask.new { |rdoc|
View
67 railties/guides/w3c_validator.rb
@@ -0,0 +1,67 @@
+# ---------------------------------------------------------------------------
+#
+# This script validates the generated guides against the W3C Validator.
+#
+# Guides are taken from the output directory, from where all .html files are
+# submitted to the validator.
+#
+# This script is prepared to be launched from the railties directory as a rake task:
+#
+# rake validate_guides
+#
+# If nothing is specified, all files will be validated, but you can check just
+# some of them using this environment variable:
+#
+# ONLY
+# Use ONLY if you want to validate only one or a set of guides. Prefixes are
+# enough:
+#
+# # validates only association_basics.html
+# ONLY=assoc rake validate_guides
+#
+# Separate many using commas:
+#
+# # validates only
+# ONLY=assoc,migrations rake validate_guides
+#
+# ---------------------------------------------------------------------------
+
+require 'rubygems'
+require 'w3c_validators'
+include W3CValidators
+
+module RailsGuides
+ class Validator
+
+ def validate
+ validator = MarkupValidator.new
+
+ guides_to_validate.each do |f|
+ puts "Validating #{f}"
+ results = validator.validate_file(f)
+
+ if !results.validity
+ puts "#{f} FAILED W3C validation with #{results.errors.size} error(s):"
+ results.errors.each do |error|
+ puts error.to_s
+ end
+ end
+ end
+ end
+
+ private
+ def guides_to_validate
+ guides = Dir["./guides/output/*.html"]
+ ENV.key?('ONLY') ? select_only(guides) : guides
+ end
+
+ def select_only(guides)
+ prefixes = ENV['ONLY'].split(",").map(&:strip)
+ guides.select do |guide|
+ prefixes.any? {|p| guide.start_with?("./guides/output/#{p}")}
+ end
+ end
+ end
+end
+
+RailsGuides::Validator.new.validate

0 comments on commit 7db557f

Please sign in to comment.
Something went wrong with that request. Please try again.