Martinicity: The Ruby Accessibility Analysis KitMike Blaketag:www.martinicity.net,2005:TypoTypo2006-07-25T15:18:01+00:00Mike Blakeurn:uuid:ca172ed7-7d12-470b-b668-c592bc7c38352006-07-25T14:33:00+00:002006-07-25T15:18:01+00:00The Ruby Accessibility Analysis Kit<p><b>Raakt</b></p>
<p>I was excited to see that <a href="http://www.peterkrantz.com/2006/accessibility-in-rails-with-raakt/">Peter Krantz</a> heard the call from the Rails Core team for education about accessibility issues and created <a href="http://rubyforge.org/projects/raakt/">Raakt(Ruby Accessibility Analysis Kit)</a>. I put it to use immediately, but ran into a strange problem.</p>
<p>The rubyfull_soup gem, which raakt requires contains a class named ‘Tag’, and so does the project I’m using to try out raakt. So I got this error in my functional tests.</p>
<div class="typocode"><pre><code class="typocode_default ">ActionView::TemplateError: undefined method `keywords' for Tag:Class</code></pre></div>
<p>
<p>The View is looking for a Model object named ‘Tag’, but it’s finding the rubyfull soup Tag object.</p>
<p>then I tried explicitly loading my Tag object first, and I got this error.</p>
<div class="typocode"><pre><code class="typocode_default ">TypeError: superclass mismatch for class Tag</code></pre></div>
<p>
<p>The best workaround I found was to require ‘raakt’ just prior to using it in the method.</p>
<div class="typocode"><pre><code class="typocode_ruby "> <span class="keyword">def </span><span class="method">assert_basic_accessibility</span>
<span class="ident">require</span> <span class="punct">'</span><span class="string">raakt</span><span class="punct">'</span>
<span class="ident">rt</span> <span class="punct">=</span> <span class="constant">Raakt</span><span class="punct">::</span><span class="constant">Test</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="attribute">@response</span><span class="punct">.</span><span class="ident">body</span><span class="punct">)</span>
<span class="ident">result</span> <span class="punct">=</span> <span class="ident">rt</span><span class="punct">.</span><span class="ident">all</span>
<span class="ident">assert</span> <span class="ident">result</span><span class="punct">.</span><span class="ident">length</span> <span class="punct">==</span> <span class="number">0</span><span class="punct">,</span> <span class="ident">result</span><span class="punct">.</span><span class="ident">collect</span> <span class="punct">{</span> <span class="punct">|</span><span class="ident">msg</span><span class="punct">|</span> <span class="punct">"</span><span class="string"><span class="escape">\n</span></span><span class="punct">"</span> <span class="punct">+</span> <span class="ident">msg</span><span class="punct">.</span><span class="ident">text</span> <span class="punct">+</span> <span class="punct">"</span><span class="string"><span class="escape">\n</span></span><span class="punct">"</span> <span class="punct">}</span>
<span class="keyword">end</span> </code></pre></div>
<p>
<p>This little problem reinforces what I mention <a href="articles/2006/07/15/ruby-namespace-conflicts">below</a> . It’s best to put new classes inside modules to give them unique namespaces.</p>
<p>Anyway, Raakt is a great addition to Rails built in testing capabilities. I’m adding it to all my projects.</p>