tag:www.rhnh.net,2008:/hpricot
Hpricot - Xavier Shay's Blog
2007-08-21T07:37:11Z
Enki
Xavier Shay
notreal@rhnh.net
tag:www.rhnh.net,2008:Post/146
2007-08-21T07:33:00Z
2007-08-21T07:36:09Z
Practical Hpricot: CruiseControl.rb results
<table class="CodeRay"><tr>
<td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"><pre>1<tt>
</tt>2<tt>
</tt>3<tt>
</tt>4<tt>
</tt>5<tt>
</tt>6<tt>
</tt>7<tt>
</tt>8<tt>
</tt>9<tt>
</tt><strong>10</strong><tt>
</tt></pre></td>
<td class="code"><pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }">require <span class="s"><span class="dl">'</span><span class="k">hpricot</span><span class="dl">'</span></span><tt>
</tt>require <span class="s"><span class="dl">'</span><span class="k">open-uri</span><span class="dl">'</span></span><tt>
</tt><tt>
</tt>url = <span class="s"><span class="dl">"</span><span class="k">http://mydomain.com/builds/myapp/</span><span class="il"><span class="idl">#{</span><span class="pc">ARGV</span>[<span class="i">0</span>]<span class="idl">}</span></span><span class="dl">"</span></span><tt>
</tt>doc = Hpricot(open(url))<tt>
</tt><tt>
</tt>puts (doc/<span class="s"><span class="dl">"</span><span class="k">div#build_details h1</span><span class="dl">"</span></span>).first.inner_text.gsub(<span class="rx"><span class="dl">/</span><span class="k">^</span><span class="ch">\s</span><span class="k">*</span><span class="dl">/</span></span>, <span class="s"><span class="dl">'</span><span class="dl">'</span></span>)<tt>
</tt>(doc/<span class="s"><span class="dl">"</span><span class="k">div.test-results</span><span class="dl">"</span></span>).each <span class="r">do</span> |results|<tt>
</tt> puts results.inner_html<tt>
</tt><span class="r">end</span><tt>
</tt></pre></td>
</tr></table>
<p>Grabs the current build status from CruiseControl.rb. Especially handy since our build server isn’t sending emails at the moment.</p>
tag:www.rhnh.net,2008:Post/129
2007-07-01T07:29:00Z
2007-08-15T07:29:57Z
Practical Hpricot: SVG
<p>Inkscape does a pretty good job of creating plain <span class="caps">SVG</span> files, but they could be nicer. A particular file I was working on had many path elements, all with the same style attribute that I wanted to move into a parent tag (or external style or whatever). What better way to strip them out than Hpricot?</p><table class="CodeRay"><tr>
<td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"><pre>1<tt>
</tt>2<tt>
</tt>3<tt>
</tt>4<tt>
</tt>5<tt>
</tt>6<tt>
</tt>7<tt>
</tt>8<tt>
</tt>9<tt>
</tt><strong>10</strong><tt>
</tt>11<tt>
</tt></pre></td>
<td class="code"><pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }">require <span class="s"><span class="dl">'</span><span class="k">hpricot</span><span class="dl">'</span></span><tt>
</tt><tt>
</tt>doc = open(<span class="pc">ARGV</span>[<span class="i">0</span>]) { |f| <span class="co">Hpricot</span>.XML(f) }<tt>
</tt><tt>
</tt>(doc/<span class="sy">:path</span>).each <span class="r">do</span> |path|<tt>
</tt> [<span class="sy">:id</span>, <span class="sy">:style</span>].each <span class="r">do</span> |attr| <tt>
</tt> path.remove_attribute(attr)<tt>
</tt> <span class="r">end</span><tt>
</tt><span class="r">end</span><tt>
</tt><tt>
</tt>puts doc<tt>
</tt></pre></td>
</tr></table>
<p>And you get the benefit of prettier formatting!</p>
tag:www.rhnh.net,2008:Post/140
2007-06-01T02:11:00Z
2007-08-21T07:37:11Z
Practical Hpricot: XML to INI
<table class="CodeRay"><tr>
<td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"><pre>1<tt>
</tt>2<tt>
</tt>3<tt>
</tt>4<tt>
</tt>5<tt>
</tt>6<tt>
</tt>7<tt>
</tt>8<tt>
</tt>9<tt>
</tt><strong>10</strong><tt>
</tt>11<tt>
</tt>12<tt>
</tt>13<tt>
</tt>14<tt>
</tt>15<tt>
</tt>16<tt>
</tt>17<tt>
</tt>18<tt>
</tt>19<tt>
</tt><strong>20</strong><tt>
</tt>21<tt>
</tt>22<tt>
</tt></pre></td>
<td class="code"><pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }">require <span class="s"><span class="dl">'</span><span class="k">hpricot</span><span class="dl">'</span></span><tt>
</tt>require <span class="s"><span class="dl">'</span><span class="k">open-uri</span><span class="dl">'</span></span><tt>
</tt><tt>
</tt><span class="r">def</span> <span class="fu">ini_entry</span>(url, name)<tt>
</tt> buffer = <span class="s"><span class="dl">"</span><span class="k">[</span><span class="il"><span class="idl">#{</span>url<span class="idl">}</span></span><span class="k">]</span><span class="ch">\\</span><span class="k">n</span><span class="dl">"</span></span><tt>
</tt> buffer += <span class="s"><span class="dl">"</span><span class="k">name = </span><span class="il"><span class="idl">#{</span>name<span class="idl">}</span></span><span class="ch">\\</span><span class="k">n</span><span class="dl">"</span></span><tt>
</tt> buffer += <span class="s"><span class="dl">"</span><span class="ch">\\</span><span class="k">n</span><span class="dl">"</span></span><tt>
</tt> buffer<tt>
</tt><span class="r">end</span><tt>
</tt><tt>
</tt>doc = Hpricot(open(<span class="s"><span class="dl">"</span><span class="k">http://www.byteclub.net/testsite/getFeeds.php</span><span class="dl">"</span></span>))<tt>
</tt><tt>
</tt>(doc/<span class="s"><span class="dl">"</span><span class="k">blog</span><span class="dl">"</span></span>).each <span class="r">do</span> |elem|<tt>
</tt> url = (elem/<span class="s"><span class="dl">"</span><span class="k">url</span><span class="dl">"</span></span>)<tt>
</tt> name = (elem/<span class="s"><span class="dl">"</span><span class="k">name</span><span class="dl">"</span></span>)<tt>
</tt> comments = (elem/<span class="s"><span class="dl">"</span><span class="k">comments</span><span class="dl">"</span></span>)<tt>
</tt> <tt>
</tt> <span class="r">if</span> name.length > <span class="i">0</span><tt>
</tt> puts ini_entry(url.inner_text, name.inner_text) <span class="r">if</span> url.inner_text.length > <span class="i">0</span><tt>
</tt> puts ini_entry(comments.inner_text, name.inner_text + <span class="s"><span class="dl">"</span><span class="k"> Comments</span><span class="dl">"</span></span>) <span class="r">if</span> comments.inner_text.length > <span class="i">0</span><tt>
</tt> <span class="r">end</span><tt>
</tt><span class="r">end</span><tt>
</tt></pre></td>
</tr></table>
<p>Planet coming soon!</p>