<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>RealityForge.org: Rails Plugin to Validate (X)HTML and CSS</title>
    <link>/articles/2006/03/15/rails-plugin-to-validate-x-html-and-css</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>A little short for a storm trooper</description>
    <item>
      <title>Rails Plugin to Validate (X)HTML and CSS</title>
      <description>&lt;p&gt;Here is an enahnced version of &lt;a href="http://scottraymond.net"&gt;Scott Raymond&amp;#8217;s&lt;/a&gt; &lt;a href="http://redgreenblu.com/svn/projects/assert_valid_markup/"&gt;assert_valid_markup&lt;/a&gt; 
plugin that I use in my projects. Below are the directions for use;&lt;/p&gt;


	&lt;h3&gt;HowTo Validate (X)HTML&lt;/h3&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;# Calling the assertion with no parameters validates &lt;/span&gt;
&lt;span class="comment"&gt;# whatever is in @request.body, which is automatically &lt;/span&gt;
&lt;span class="comment"&gt;# set by the existing get/post/etc helpers. For example:&lt;/span&gt;

&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;FooControllerTest&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;Test&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Unit&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;TestCase&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;test_bar_markup&lt;/span&gt;
    &lt;span class="ident"&gt;get&lt;/span&gt; &lt;span class="symbol"&gt;:bar&lt;/span&gt;
    &lt;span class="ident"&gt;assert_valid_markup&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;

&lt;span class="comment"&gt;# Add a string parameter to the assertion to validate &lt;/span&gt;
&lt;span class="comment"&gt;# any random fragment. For example:&lt;/span&gt;

&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;FooControllerTest&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;Test&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Unit&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;TestCase&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;test_bar_markup&lt;/span&gt;
    &lt;span class="ident"&gt;assert_valid_markup&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&amp;lt;div&amp;gt;Hello, world.&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;

&lt;span class="comment"&gt;# For the ultimate in convenience, use the class-level&lt;/span&gt;
&lt;span class="comment"&gt;# method to validate a number of actions in one line. &lt;/span&gt;

&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;FooControllerTest&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;Test&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Unit&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;TestCase&lt;/span&gt;
  &lt;span class="ident"&gt;assert_valid_markup&lt;/span&gt; &lt;span class="symbol"&gt;:bar&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:baz&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:qux&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;h3&gt;HowTo Validate &lt;span class="caps"&gt;CSS&lt;/span&gt;&lt;/h3&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;# Pass a string parameter to the assertion to validate &lt;/span&gt;
&lt;span class="comment"&gt;# a css fragment. For example:&lt;/span&gt;

&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;FooControllerTest&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;Test&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Unit&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;TestCase&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;test_bar_css&lt;/span&gt;
    &lt;span class="ident"&gt;filename&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&lt;span class="expr"&gt;#{RAILS_ROOT}&lt;/span&gt;/public/stylesheets/bar.css&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
    &lt;span class="ident"&gt;assert_valid_css&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="constant"&gt;File&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;open&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;filename&lt;/span&gt; &lt;span class="punct"&gt;,'&lt;/span&gt;&lt;span class="string"&gt;rb&lt;/span&gt;&lt;span class="punct"&gt;').&lt;/span&gt;&lt;span class="ident"&gt;read&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;

&lt;span class="comment"&gt;# For the ultimate in convenience, use the class-level&lt;/span&gt;
&lt;span class="comment"&gt;# method to validate a bunch of css files in one line.&lt;/span&gt;
&lt;span class="comment"&gt;# Assumes that the CSS files are relative to &lt;/span&gt;
&lt;span class="comment"&gt;# $RAILS_ROOT/public/stylesheets/ and end with '.css'. &lt;/span&gt;
&lt;span class="comment"&gt;# The following example validates &lt;/span&gt;
&lt;span class="comment"&gt;#  $RAILS_ROOT/public/stylesheets/layout.css, &lt;/span&gt;
&lt;span class="comment"&gt;#  $RAILS_ROOT/public/stylesheets/standard.css and &lt;/span&gt;
&lt;span class="comment"&gt;#  $RAILS_ROOT/public/stylesheets/theme.css&lt;/span&gt;

&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;FooControllerTest&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;Test&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Unit&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;TestCase&lt;/span&gt;
  &lt;span class="ident"&gt;assert_valid_css_files&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;layout&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;standard&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;theme&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Most of the credit for this plugin goes to Scott for the initial idea! The modifications that I made include;&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Validation of &lt;span class="caps"&gt;CSS&lt;/span&gt; files.&lt;/li&gt;
		&lt;li&gt;Caching of fragments occurs in &lt;code&gt;$RAILS_ROOT/tmp&lt;/code&gt; according to the name of the test class + test method. This avoids filling up the system temp folder with expired cache files.&lt;/li&gt;
		&lt;li&gt;Ability to turn off validation by setting the &amp;#8220;NONET&amp;#8221; environment variable to &amp;#8220;true&amp;#8221;.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;You can grab it from subversion at;&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://assert-valid-asset.googlecode.com/svn/trunk/"&gt;http://assert-valid-asset.googlecode.com/svn/trunk/&lt;/a&gt;&lt;/p&gt;


	&lt;h4&gt;Update 12th of May, 2008&lt;/h4&gt;


	&lt;p&gt;Steve Sloan has also added a Git repo for the code which you can grab from:&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://github.com/CodeMonkeySteve/assert-valid-asset/tree/master"&gt;http://github.com/CodeMonkeySteve/assert-valid-asset/tree/master&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 15 Mar 2006 19:18:00 +1100</pubDate>
      <guid isPermaLink="false">urn:uuid:e93d2591-c8bb-4fe9-993e-f958140f5ad6</guid>
      <author>Peter Donald</author>
      <link>http://www.realityforge.org/articles/2006/03/15/rails-plugin-to-validate-x-html-and-css</link>
      <category>Rails</category>
      <category>rails</category>
      <category>plugin</category>
      <category>css</category>
      <category>html</category>
      <category>validate</category>
      <trackback:ping>http://www.realityforge.org/articles/trackback/37</trackback:ping>
    </item>
    <item>
      <title>"Rails Plugin to Validate (X)HTML and CSS" by Peter Donald</title>
      <description>&lt;p&gt;Fixed, Thanks!&lt;/p&gt;</description>
      <pubDate>Thu, 16 Mar 2006 08:07:48 +1100</pubDate>
      <guid isPermaLink="false">urn:uuid:99973183-6d3c-4e40-9ad2-d39e8cdbfb15</guid>
      <link>http://www.realityforge.org/articles/2006/03/15/rails-plugin-to-validate-x-html-and-css#comment-39</link>
    </item>
    <item>
      <title>"Rails Plugin to Validate (X)HTML and CSS" by Steve Ross</title>
      <description>&lt;p&gt;In that last bit about the class method, you need to use:&lt;/p&gt;


	&lt;p&gt;assert_valid_css_files &amp;#8216;foo&amp;#8217;, &amp;#8216;bar&amp;#8217;&lt;/p&gt;</description>
      <pubDate>Thu, 16 Mar 2006 03:48:21 +1100</pubDate>
      <guid isPermaLink="false">urn:uuid:6502540d-9dd6-4d2f-882c-5bf978b1844e</guid>
      <link>http://www.realityforge.org/articles/2006/03/15/rails-plugin-to-validate-x-html-and-css#comment-38</link>
    </item>
  </channel>
</rss>
