<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.2" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>Railin'</title>
	<link>http://www.bryandonovan.com/ruby</link>
	<description>Ruby, Rails, and other Development</description>
	<pubDate>Sun, 06 Jul 2008 19:45:24 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.2</generator>
	<language>en</language>
			<item>
		<title>Rubystats 0.2.3 released</title>
		<link>http://www.bryandonovan.com/ruby/2008/07/06/rubystats-023-released/</link>
		<comments>http://www.bryandonovan.com/ruby/2008/07/06/rubystats-023-released/#comments</comments>
		<pubDate>Sun, 06 Jul 2008 19:42:31 +0000</pubDate>
		<dc:creator>Bryan</dc:creator>
		
		<category><![CDATA[Rails]]></category>

		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[ruby rubystats]]></category>

		<guid isPermaLink="false">http://www.bryandonovan.com/ruby/2008/07/06/rubystats-023-released/</guid>
		<description><![CDATA[Thanks to Franz Schwartau who noticed a bug in the Rubystats gem, and after four hours of debugging, I&#8217;ve released Rubystats 0.2.3 which fixes the bug* Franz found in the beta distribution calculations.
Thanks again, Franz.
 * By bug I mean bugs, and by bugs I mean stupid mistakes in my code and lack of sufficient test [...]]]></description>
			<content:encoded><![CDATA[<p>Thanks to Franz Schwartau who noticed a bug in the <a href="http://rubystats.rubyforge.org" title="rubystats gem on rubyforge">Rubystats</a> gem, and after four hours of debugging, I&#8217;ve released Rubystats 0.2.3 which fixes the <a href="http://rubyforge.org/tracker/index.php?func=detail&amp;aid=21100&amp;group_id=1227&amp;atid=4833">bug</a>* Franz found in the beta distribution calculations.</p>
<p>Thanks again, Franz.</p>
<p><em> * By bug I mean bugs, and by bugs I mean stupid mistakes in my code and lack of sufficient test coverage.  But hey, this was some of the first ruby code I wrote (in fact I learned a lot of the ruby syntax in this project because I ported it from the PHPMath library), so I&#8217;m not surprised.  Not to say that the Rubystats library is junk.. it&#8217;s worked flawlessly for me for a few years now and has quite a bit of test coverage (more than PHPMath does &#8212; I implemented the tests from PHPMath and then some), but it&#8217;s certainly not perfect yet. It&#8217;s great to have members of the community finding bugs and letting me know about them.  That&#8217;s what open source is all about I guess. </em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryandonovan.com/ruby/2008/07/06/rubystats-023-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Heel RubyGem</title>
		<link>http://www.bryandonovan.com/ruby/2008/04/25/heel-rubygem/</link>
		<comments>http://www.bryandonovan.com/ruby/2008/04/25/heel-rubygem/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 16:28:03 +0000</pubDate>
		<dc:creator>Bryan</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[heel thin ruby coderay launchy]]></category>

		<guid isPermaLink="false">http://www.bryandonovan.com/ruby/2008/04/25/heel-rubygem/</guid>
		<description><![CDATA[I recently came across the Heel RubyGem.  To quote the RDoc page, &#8220;Heel is a small static web server for use when you need a quick web server for a directory. Once the server is running, heel will use launchy to open your browser at the URL of your document root.&#8221;  It uses [...]]]></description>
			<content:encoded><![CDATA[<p>I recently came across the Heel RubyGem.  To quote the RDoc page, &#8220;<a href="http://copiousfreetime.rubyforge.org/heel/classes/Heel.html">Heel</a> is a small static web server for use when you need a quick web server for a directory. Once the server is running, heel will use <a href="http://copiousfreetime.rubyforge.org/launchy/">launchy</a> to open your browser at the URL of your document root.&#8221;  It uses <a href="http://code.macournoyer.com/thin/">Thin</a> as a webserver</p>
<p>It&#8217;s just nice to, for example, launch Heel in your system&#8217;s rubygems directory so you can easily browse around. You can view ruby files with syntax highlighting (using <a href="http://coderay.rubychan.de/">coderay</a>).  Here&#8217;s a sample ruby file.. as you can see, it&#8217;s nicely done:</p>
<p><img src="http://www.bryandonovan.com/ruby/wp-content/uploads/2008/04/heel.png" alt="heel image" height="388" vspace="5" width="339" /></p>
<p>I was just looking the Thin webserver and came across this.  It&#8217;s been handy so far.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryandonovan.com/ruby/2008/04/25/heel-rubygem/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Writing tests for acts_as plugins</title>
		<link>http://www.bryandonovan.com/ruby/2008/02/20/writing-tests-for-acts_as-plugins/</link>
		<comments>http://www.bryandonovan.com/ruby/2008/02/20/writing-tests-for-acts_as-plugins/#comments</comments>
		<pubDate>Wed, 20 Feb 2008 23:52:44 +0000</pubDate>
		<dc:creator>Bryan</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[ruby rails tests ActiveRecord]]></category>

		<guid isPermaLink="false">http://www.bryandonovan.com/ruby/2008/02/20/writing-tests-for-acts_as-plugins/</guid>
		<description><![CDATA[It took me a while to figure out a good way to approach this, so thought I&#8217;d share.  I&#8217;ve been wondering how to best write test code for a Rails plugin that deals with ActiveRecord models, and after trying a few different approaches, I decided to do the thing I should have done in [...]]]></description>
			<content:encoded><![CDATA[<p>It took me a while to figure out a good way to approach this, so thought I&#8217;d share.  I&#8217;ve been wondering how to best write test code for a Rails plugin that deals with ActiveRecord models, and after trying a few different approaches, I decided to do the thing I should have done in the first place: look at the test code for the plugins in Rails core.  The acts_as_tree <a href="http://dev.rubyonrails.org/svn/rails/plugins/acts_as_tree/test/acts_as_tree_test.rb" target="_blank">test code</a> is what I ended up using as a guide for my <a href="http://code.google.com/p/rails-multifielddate-plugin/source/browse/plugins/multi_field_date/test/multi_field_date_test.rb?r=8" target="_blank">tests</a> for <a href="http://code.google.com/p/rails-multifielddate-plugin/" target="_blank">MultiFieldDate</a>.  This approach uses SQLite as an in-memory database, so you do have to have SQLite3 and the sqlite3-ruby gem installed for this to work.  Alternatively, this should work with other database engines, but it would probably be a good idea to use table prefixes in those cases to avoid conflicts with existing tables.</p>
<p>Here&#8217;s a snippet of the MultiFieldDate test code:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby"><span style="color:#DD7522;">require</span> <span style="color:#669933;">'test/unit'</span>
<span style="color:#DD7522;">require</span> <span style="color:#669933;">'rubygems'</span>
<span style="color:#DD7522;">require</span> <span style="color:#669933;">'active_record'</span>
$:.<span style="color:#F3C55F;">unshift</span> <span style="color:#DD7522;">File</span>.<span style="color:#F3C55F;">dirname</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#DD7522;">__FILE__</span><span style="color:#DDDDDD;">&#41;</span> + <span style="color:#669933;">'/../lib'</span>
<span style="color:#DD7522;">require</span> <span style="color:#DD7522;">File</span>.<span style="color:#F3C55F;">dirname</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#DD7522;">__FILE__</span><span style="color:#DDDDDD;">&#41;</span> + <span style="color:#669933;">'/../init'</span>
&nbsp;
<span style="color:#6666ff;">ActiveRecord::Base</span>.<span style="color:#F3C55F;">establish_connection</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#5098C2;">:adapter</span> =&gt; <span style="color:#669933;">&quot;sqlite3&quot;</span>, <span style="color:#5098C2;">:dbfile</span> =&gt; <span style="color:#669933;">&quot;:memory:&quot;</span><span style="color:#DDDDDD;">&#41;</span>
&nbsp;
<span style="color:#7B7B7B; font-style:italic;"># AR keeps printing annoying schema statements</span>
<span style="color:#ff6633;">$stdout</span> = <span style="color:#DD7522;">StringIO</span>.<span style="color:#F3C55F;">new</span>
&nbsp;
<span style="color:#DD7522;">def</span> setup_db
  <span style="color:#6666ff;">ActiveRecord::Base</span>.<span style="color:#F3C55F;">logger</span>
  <span style="color:#6666ff;">ActiveRecord::Schema</span>.<span style="color:#F3C55F;">define</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#5098C2;">:version</span> =&gt; <span style="color:#EDDD3D;">1</span><span style="color:#DDDDDD;">&#41;</span> <span style="color:#DD7522;">do</span>
    create_table <span style="color:#5098C2;">:people</span> <span style="color:#DD7522;">do</span> |t|
      t.<span style="color:#F3C55F;">column</span> <span style="color:#5098C2;">:name</span>, <span style="color:#5098C2;">:string</span>
      t.<span style="color:#F3C55F;">column</span> <span style="color:#5098C2;">:birth_date</span>, <span style="color:#5098C2;">:date</span>
      t.<span style="color:#F3C55F;">column</span> <span style="color:#5098C2;">:birth_year</span>, <span style="color:#5098C2;">:integer</span>
      t.<span style="color:#F3C55F;">column</span> <span style="color:#5098C2;">:birth_month</span>, <span style="color:#5098C2;">:integer</span>
      t.<span style="color:#F3C55F;">column</span> <span style="color:#5098C2;">:birth_day</span>, <span style="color:#5098C2;">:integer</span>
    <span style="color:#DD7522;">end</span>
  <span style="color:#DD7522;">end</span>
<span style="color:#DD7522;">end</span>
&nbsp;
<span style="color:#DD7522;">def</span> teardown_db
  <span style="color:#6666ff;">ActiveRecord::Base</span>.<span style="color:#F3C55F;">connection</span>.<span style="color:#F3C55F;">tables</span>.<span style="color:#F3C55F;">each</span> <span style="color:#DD7522;">do</span> |table|
    <span style="color:#6666ff;">ActiveRecord::Base</span>.<span style="color:#F3C55F;">connection</span>.<span style="color:#F3C55F;">drop_table</span><span style="color:#DDDDDD;">&#40;</span>table<span style="color:#DDDDDD;">&#41;</span>
  <span style="color:#DD7522;">end</span>
<span style="color:#DD7522;">end</span>
&nbsp;
<span style="color:#DD7522;">class</span> Person &lt; <span style="color:#6666ff;">ActiveRecord::Base</span>
  multi_field_date <span style="color:#5098C2;">:birth</span>, <span style="color:#5098C2;">:date_field</span> =&gt; <span style="color:#669933;">'birth_date'</span>, <span style="color:#5098C2;">:year_field</span> =&gt; <span style="color:#669933;">'birth_year'</span>,
  <span style="color:#5098C2;">:month_field</span> =&gt; <span style="color:#669933;">'birth_month'</span>, <span style="color:#5098C2;">:day_field</span> =&gt; <span style="color:#669933;">'birth_day'</span>
<span style="color:#DD7522;">end</span>
&nbsp;
<span style="color:#DD7522;">class</span> PersonTest &lt; <span style="color:#6666ff;">Test::Unit::TestCase</span>
&nbsp;
  <span style="color:#DD7522;">def</span> setup
    setup_db
  <span style="color:#DD7522;">end</span>
&nbsp;
  <span style="color:#DD7522;">def</span> teardown
    teardown_db
  <span style="color:#DD7522;">end</span>
&nbsp;
  <span style="color:#DD7522;">def</span> test_create_without_birth_date
    person = Person.<span style="color:#F3C55F;">new</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#5098C2;">:name</span> =&gt; <span style="color:#669933;">'Joe Jones'</span><span style="color:#DDDDDD;">&#41;</span>
    person.<span style="color:#F3C55F;">save</span>
    assert<span style="color:#DDDDDD;">&#40;</span>person.<span style="color:#F3C55F;">valid</span>?, <span style="color:#DD7522;">true</span><span style="color:#DDDDDD;">&#41;</span>
  <span style="color:#DD7522;">end</span>
<span style="color:#7B7B7B; font-style:italic;">#...</span>
<span style="color:#DD7522;">end</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.bryandonovan.com/ruby/2008/02/20/writing-tests-for-acts_as-plugins/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Upgrading to Rails 2.0</title>
		<link>http://www.bryandonovan.com/ruby/2008/02/16/upgrading-to-rails-20/</link>
		<comments>http://www.bryandonovan.com/ruby/2008/02/16/upgrading-to-rails-20/#comments</comments>
		<pubDate>Sat, 16 Feb 2008 19:15:53 +0000</pubDate>
		<dc:creator>Bryan</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[rails ruby]]></category>

		<guid isPermaLink="false">http://www.bryandonovan.com/ruby/2008/02/16/upgrading-to-rails-20/</guid>
		<description><![CDATA[Here&#8217;s a couple one-liner scripts to help convert your Rails app to 2.0.  These scripts are by no means perfect, but should help if you have a lot of files with &#8220;start_form_tag&#8221;, &#8220;end_form_tag&#8221;, or &#8220;:post =&#62; true&#8221;.  Back your files up first, of course.

find . &#124;grep -i &#34;\.erb$&#34; &#124; xargs ruby -p -i [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a couple one-liner scripts to help convert your Rails app to 2.0.  These scripts are by no means perfect, but should help if you have a lot of files with &#8220;start_form_tag&#8221;, &#8220;end_form_tag&#8221;, or &#8220;:post =&gt; true&#8221;.  Back your files up first, of course.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby">find . |grep -i <span style="color:#669933;">&quot;<span style="color:#000099;">\.</span>erb$&quot;</span> | xargs ruby -<span style="color:#DD7522;">p</span> -i -e <span style="color:#669933;">&quot;gsub(/&lt;%=.*start_form_tag(.*)%&gt;/i, '&lt;% form_tag <span style="color:#000099;">\1</span> do -%&gt;')&quot;</span>
find . |grep -i <span style="color:#669933;">&quot;<span style="color:#000099;">\.</span>erb$&quot;</span> | xargs ruby -<span style="color:#DD7522;">p</span> -i -e <span style="color:#669933;">&quot;gsub(/&lt;%.*end_form_tag.*%&gt;/i, '&lt;% end #form_tag-%&gt;')&quot;</span>
find . |grep -i <span style="color:#669933;">&quot;<span style="color:#000099;">\.</span>erb$&quot;</span> | xargs ruby -<span style="color:#DD7522;">p</span> -i -e <span style="color:#669933;">'gsub(/:post<span style="color:#000099;">\s</span>=&gt;<span style="color:#000099;">\s</span>true/i, &quot;:method<span style="color:#000099;">\s</span>=&gt;<span style="color:#000099;">\s</span>:post&quot;)'</span></pre></div></div>

<p>Replace &#8220;erb&#8221; with &#8220;rtml&#8221; if you haven&#8217;t converted your views to .erb yet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryandonovan.com/ruby/2008/02/16/upgrading-to-rails-20/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Responses to benchmarks</title>
		<link>http://www.bryandonovan.com/ruby/2008/02/06/responses-to-benchmarks/</link>
		<comments>http://www.bryandonovan.com/ruby/2008/02/06/responses-to-benchmarks/#comments</comments>
		<pubDate>Wed, 06 Feb 2008 15:33:52 +0000</pubDate>
		<dc:creator>Bryan</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.bryandonovan.com/ruby/2008/02/06/responses-to-benchmarks/</guid>
		<description><![CDATA[A couple people posted responses to the benchmarks on my Sun blog, so here they are.
From Susan Potter:
Bryan,
I wrote a benchmarking blog post in October last year relating to the difference in code-level optimizations between Ruby 1.8.6 and Ruby 1.9.0 and how the roles were reversed in these two versions: (link)

And her direct response:
This is [...]]]></description>
			<content:encoded><![CDATA[<p>A couple people posted responses to the benchmarks on my Sun blog, so here they are.</p>
<p>From <a href="http://snakesgemscoffee.susanpotter.net/">Susan Potter</a>:</p>
<blockquote><p>Bryan,</p>
<p>I wrote a benchmarking blog post in October last year relating to the difference in code-level optimizations between Ruby 1.8.6 and Ruby 1.9.0 and how the roles were reversed in these two versions: (<a href="http://blog.managedopensource.com/2007/10/31/reversal-of-code-performance-optimizations-from-ruby-1-8-to-1-9" target="_blank">link</a>)<a href="http://blog.managedopensource.com/2007/10/31/reversal-of-code-performance-optimizations-from-ruby-1-8-to-1-9" rel="nofollow"><br />
</a></p></blockquote>
<p>And her direct response:</p>
<blockquote><p>This is a response to Bryan Donovan’s blog post called ways to pass options.</p>
<p>Bryan’s original benchmark was run on Ruby 1.8.4.  I will be running the benchmarks on Ruby 1.8.6 and Ruby 1.9 to demonstrate performance reversal of code level optimizations between Ruby versions (as I did in Ruby performance reversal benchmark 1.8 to 1.9).<br />
I will use Bryan’s Ruby benchmark code to run for both Ruby 1.8.6 and Ruby 1.9.0 (official).</p>
<p>Ruby 1.8.6 Results</p>
<p>Below are the results of running the options passing benchmark in Ruby 1.8.6:</p></blockquote>

<div class="wp_syntax"><div class="code"><pre class="ruby">With no option values passed
Rehearsal -------------------------------------------
delete:   <span style="color:#EDDD3D;">0.290000</span>   <span style="color:#EDDD3D;">0.050000</span>   <span style="color:#EDDD3D;">0.340000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.428564</span><span style="color:#DDDDDD;">&#41;</span>
merge:    <span style="color:#EDDD3D;">0.700000</span>   <span style="color:#EDDD3D;">0.190000</span>   <span style="color:#EDDD3D;">0.890000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">1.017415</span><span style="color:#DDDDDD;">&#41;</span>
or_nil:   <span style="color:#EDDD3D;">0.370000</span>   <span style="color:#EDDD3D;">0.050000</span>   <span style="color:#EDDD3D;">0.420000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.509209</span><span style="color:#DDDDDD;">&#41;</span>
---------------------------------- total: <span style="color:#EDDD3D;">1</span>.650000sec
&nbsp;
              user     <span style="color:#DD7522;">system</span>      total        real
delete:   <span style="color:#EDDD3D;">0.300000</span>   <span style="color:#EDDD3D;">0.050000</span>   <span style="color:#EDDD3D;">0.350000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.428401</span><span style="color:#DDDDDD;">&#41;</span>
merge:    <span style="color:#EDDD3D;">0.760000</span>   <span style="color:#EDDD3D;">0.130000</span>   <span style="color:#EDDD3D;">0.890000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">1.010474</span><span style="color:#DDDDDD;">&#41;</span>
or_nil:   <span style="color:#EDDD3D;">0.360000</span>   <span style="color:#EDDD3D;">0.050000</span>   <span style="color:#EDDD3D;">0.410000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.490170</span><span style="color:#DDDDDD;">&#41;</span>
&nbsp;
With some option values passed
Rehearsal -------------------------------------------
delete:   <span style="color:#EDDD3D;">0.360000</span>   <span style="color:#EDDD3D;">0.060000</span>   <span style="color:#EDDD3D;">0.420000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.505094</span><span style="color:#DDDDDD;">&#41;</span>
merge:    <span style="color:#EDDD3D;">0.890000</span>   <span style="color:#EDDD3D;">0.130000</span>   <span style="color:#EDDD3D;">1.020000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">1.150165</span><span style="color:#DDDDDD;">&#41;</span>
or_nil:   <span style="color:#EDDD3D;">0.390000</span>   <span style="color:#EDDD3D;">0.070000</span>   <span style="color:#EDDD3D;">0.460000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.563713</span><span style="color:#DDDDDD;">&#41;</span>
---------------------------------- total: <span style="color:#EDDD3D;">1</span>.900000sec
&nbsp;
              user     <span style="color:#DD7522;">system</span>      total        real
delete:   <span style="color:#EDDD3D;">0.340000</span>   <span style="color:#EDDD3D;">0.060000</span>   <span style="color:#EDDD3D;">0.400000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.489191</span><span style="color:#DDDDDD;">&#41;</span>
merge:    <span style="color:#EDDD3D;">0.920000</span>   <span style="color:#EDDD3D;">0.110000</span>   <span style="color:#EDDD3D;">1.030000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">1.149708</span><span style="color:#DDDDDD;">&#41;</span>
or_nil:   <span style="color:#EDDD3D;">0.350000</span>   <span style="color:#EDDD3D;">0.090000</span>   <span style="color:#EDDD3D;">0.440000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.528287</span><span style="color:#DDDDDD;">&#41;</span>
&nbsp;
With all option values passed
Rehearsal -------------------------------------------
delete:   <span style="color:#EDDD3D;">0.420000</span>   <span style="color:#EDDD3D;">0.050000</span>   <span style="color:#EDDD3D;">0.470000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.547446</span><span style="color:#DDDDDD;">&#41;</span>
merge:    <span style="color:#EDDD3D;">0.970000</span>   <span style="color:#EDDD3D;">0.130000</span>   <span style="color:#EDDD3D;">1.100000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">1.228093</span><span style="color:#DDDDDD;">&#41;</span>
or_nil:   <span style="color:#EDDD3D;">0.420000</span>   <span style="color:#EDDD3D;">0.050000</span>   <span style="color:#EDDD3D;">0.470000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.574593</span><span style="color:#DDDDDD;">&#41;</span>
---------------------------------- total: <span style="color:#EDDD3D;">2</span>.040000sec
&nbsp;
              user     <span style="color:#DD7522;">system</span>      total        real
delete:   <span style="color:#EDDD3D;">0.400000</span>   <span style="color:#EDDD3D;">0.050000</span>   <span style="color:#EDDD3D;">0.450000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.485888</span><span style="color:#DDDDDD;">&#41;</span>
merge:    <span style="color:#EDDD3D;">0.960000</span>   <span style="color:#EDDD3D;">0.140000</span>   <span style="color:#EDDD3D;">1.100000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">1.237509</span><span style="color:#DDDDDD;">&#41;</span>
or_nil:   <span style="color:#EDDD3D;">0.400000</span>   <span style="color:#EDDD3D;">0.060000</span>   <span style="color:#EDDD3D;">0.460000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.536063</span><span style="color:#DDDDDD;">&#41;</span></pre></div></div>

<p>Ruby 1.9.0 Results</p>
<p>Below are the results of running the options passing benchmark in Ruby 1.9.0:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby">With no option values passed
Rehearsal -------------------------------------------
delete:   <span style="color:#EDDD3D;">0.150000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.150000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.230391</span><span style="color:#DDDDDD;">&#41;</span>
merge:    <span style="color:#EDDD3D;">0.540000</span>   <span style="color:#EDDD3D;">0.010000</span>   <span style="color:#EDDD3D;">0.550000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.645735</span><span style="color:#DDDDDD;">&#41;</span>
or_nil:   <span style="color:#EDDD3D;">0.120000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.120000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.188468</span><span style="color:#DDDDDD;">&#41;</span>
---------------------------------- total: <span style="color:#EDDD3D;">0</span>.820000sec
&nbsp;
              user     <span style="color:#DD7522;">system</span>      total        real
delete:   <span style="color:#EDDD3D;">0.160000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.160000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.238828</span><span style="color:#DDDDDD;">&#41;</span>
merge:    <span style="color:#EDDD3D;">0.520000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.520000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.610940</span><span style="color:#DDDDDD;">&#41;</span>
or_nil:   <span style="color:#EDDD3D;">0.120000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.120000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.180744</span><span style="color:#DDDDDD;">&#41;</span>
&nbsp;
With some option values passed
Rehearsal -------------------------------------------
delete:   <span style="color:#EDDD3D;">0.220000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.220000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.294110</span><span style="color:#DDDDDD;">&#41;</span>
merge:    <span style="color:#EDDD3D;">0.690000</span>   <span style="color:#EDDD3D;">0.010000</span>   <span style="color:#EDDD3D;">0.700000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.803382</span><span style="color:#DDDDDD;">&#41;</span>
or_nil:   <span style="color:#EDDD3D;">0.220000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.220000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.297869</span><span style="color:#DDDDDD;">&#41;</span>
---------------------------------- total: <span style="color:#EDDD3D;">1</span>.140000sec
&nbsp;
              user     <span style="color:#DD7522;">system</span>      total        real
delete:   <span style="color:#EDDD3D;">0.210000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.210000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.283983</span><span style="color:#DDDDDD;">&#41;</span>
merge:    <span style="color:#EDDD3D;">0.700000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.700000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.802766</span><span style="color:#DDDDDD;">&#41;</span>
or_nil:   <span style="color:#EDDD3D;">0.230000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.230000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.295433</span><span style="color:#DDDDDD;">&#41;</span>
&nbsp;
With all option values passed
Rehearsal -------------------------------------------
delete:   <span style="color:#EDDD3D;">0.270000</span>   <span style="color:#EDDD3D;">0.010000</span>   <span style="color:#EDDD3D;">0.280000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.348052</span><span style="color:#DDDDDD;">&#41;</span>
merge:    <span style="color:#EDDD3D;">0.770000</span>   <span style="color:#EDDD3D;">0.040000</span>   <span style="color:#EDDD3D;">0.810000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.947252</span><span style="color:#DDDDDD;">&#41;</span>
or_nil:   <span style="color:#EDDD3D;">0.240000</span>   <span style="color:#EDDD3D;">0.010000</span>   <span style="color:#EDDD3D;">0.250000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.336790</span><span style="color:#DDDDDD;">&#41;</span>
---------------------------------- total: <span style="color:#EDDD3D;">1</span>.340000sec
&nbsp;
              user     <span style="color:#DD7522;">system</span>      total        real
delete:   <span style="color:#EDDD3D;">0.280000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.280000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.660810</span><span style="color:#DDDDDD;">&#41;</span>
merge:    <span style="color:#EDDD3D;">0.750000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.750000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">1.618925</span><span style="color:#DDDDDD;">&#41;</span>
or_nil:   <span style="color:#EDDD3D;">0.240000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.240000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.478159</span><span style="color:#DDDDDD;">&#41;</span></pre></div></div>

<blockquote><p>In Ruby 1.8.6 the delete code is consistently more efficient, whereas in Ruby 1.9.0 the or_nil code is mostly more efficient, except for the With some option values passed scenario.</p>
<p>This once again shows that when optimizing performance on the code level, you need to be careful that you justify your micro-optimizations before you create code spaghetti just “because….”.  Readability and maintainability is most important and when needed, only then should you optimize.</p></blockquote>
<p><strong>Charles Oliver Nutter&#8217;s Response</strong><br />
<a href="http://headius.blogspot.com/">Charles Oliver Nutter</a> (of JRuby) responded as well:</p>
<blockquote><p> Stumbled on your blog post and ran the same numbers in JRuby on soylatte Java 6 on basically the same machine. My numbers for Ruby 1.8.6p111 were roughly the same as yours.</p>
<p>Here&#8217;s Ruby:</p></blockquote>

<div class="wp_syntax"><div class="code"><pre class="ruby"> user <span style="color:#DD7522;">system</span> total real
delete: <span style="color:#EDDD3D;">0.200000</span> <span style="color:#EDDD3D;">0.000000</span> <span style="color:#EDDD3D;">0.200000</span> <span style="color:#DDDDDD;">&#40;</span> <span style="color:#EDDD3D;">0.207049</span><span style="color:#DDDDDD;">&#41;</span>
merge: <span style="color:#EDDD3D;">0.710000</span> <span style="color:#EDDD3D;">0.010000</span> <span style="color:#EDDD3D;">0.720000</span> <span style="color:#DDDDDD;">&#40;</span> <span style="color:#EDDD3D;">0.720514</span><span style="color:#DDDDDD;">&#41;</span>
or_nil: <span style="color:#EDDD3D;">0.260000</span> <span style="color:#EDDD3D;">0.000000</span> <span style="color:#EDDD3D;">0.260000</span> <span style="color:#DDDDDD;">&#40;</span> <span style="color:#EDDD3D;">0.256742</span><span style="color:#DDDDDD;">&#41;</span>
&nbsp;
With some option values passed
&nbsp;
user <span style="color:#DD7522;">system</span> total real
delete: <span style="color:#EDDD3D;">0.250000</span> <span style="color:#EDDD3D;">0.000000</span> <span style="color:#EDDD3D;">0.250000</span> <span style="color:#DDDDDD;">&#40;</span> <span style="color:#EDDD3D;">0.260502</span><span style="color:#DDDDDD;">&#41;</span>
merge: <span style="color:#EDDD3D;">0.810000</span> <span style="color:#EDDD3D;">0.010000</span> <span style="color:#EDDD3D;">0.820000</span> <span style="color:#DDDDDD;">&#40;</span> <span style="color:#EDDD3D;">0.818434</span><span style="color:#DDDDDD;">&#41;</span>
or_nil: <span style="color:#EDDD3D;">0.290000</span> <span style="color:#EDDD3D;">0.000000</span> <span style="color:#EDDD3D;">0.290000</span> <span style="color:#DDDDDD;">&#40;</span> <span style="color:#EDDD3D;">0.294220</span><span style="color:#DDDDDD;">&#41;</span>
&nbsp;
With all option values passed
&nbsp;
user <span style="color:#DD7522;">system</span> total real
delete: <span style="color:#EDDD3D;">0.320000</span> <span style="color:#EDDD3D;">0.000000</span> <span style="color:#EDDD3D;">0.320000</span> <span style="color:#DDDDDD;">&#40;</span> <span style="color:#EDDD3D;">0.319335</span><span style="color:#DDDDDD;">&#41;</span>
merge: <span style="color:#EDDD3D;">0.890000</span> <span style="color:#EDDD3D;">0.010000</span> <span style="color:#EDDD3D;">0.900000</span> <span style="color:#DDDDDD;">&#40;</span> <span style="color:#EDDD3D;">0.896330</span><span style="color:#DDDDDD;">&#41;</span>
or_nil: <span style="color:#EDDD3D;">0.330000</span> <span style="color:#EDDD3D;">0.000000</span> <span style="color:#EDDD3D;">0.330000</span> <span style="color:#DDDDDD;">&#40;</span> <span style="color:#EDDD3D;">0.336673</span><span style="color:#DDDDDD;">&#41;</span></pre></div></div>

<blockquote><p>And here&#8217;s JRuby:</p></blockquote>

<div class="wp_syntax"><div class="code"><pre class="ruby">With no option values passed
&nbsp;
user <span style="color:#DD7522;">system</span> total real
delete: <span style="color:#EDDD3D;">0.133000</span> <span style="color:#EDDD3D;">0.000000</span> <span style="color:#EDDD3D;">0.133000</span> <span style="color:#DDDDDD;">&#40;</span> <span style="color:#EDDD3D;">0.133000</span><span style="color:#DDDDDD;">&#41;</span>
merge: <span style="color:#EDDD3D;">0.318000</span> <span style="color:#EDDD3D;">0.000000</span> <span style="color:#EDDD3D;">0.318000</span> <span style="color:#DDDDDD;">&#40;</span> <span style="color:#EDDD3D;">0.319000</span><span style="color:#DDDDDD;">&#41;</span>
or_nil: <span style="color:#EDDD3D;">0.474000</span> <span style="color:#EDDD3D;">0.000000</span> <span style="color:#EDDD3D;">0.474000</span> <span style="color:#DDDDDD;">&#40;</span> <span style="color:#EDDD3D;">0.474000</span><span style="color:#DDDDDD;">&#41;</span>
&nbsp;
With some option values passed
&nbsp;
user <span style="color:#DD7522;">system</span> total real
delete: <span style="color:#EDDD3D;">0.170000</span> <span style="color:#EDDD3D;">0.000000</span> <span style="color:#EDDD3D;">0.170000</span> <span style="color:#DDDDDD;">&#40;</span> <span style="color:#EDDD3D;">0.169000</span><span style="color:#DDDDDD;">&#41;</span>
merge: <span style="color:#EDDD3D;">0.295000</span> <span style="color:#EDDD3D;">0.000000</span> <span style="color:#EDDD3D;">0.295000</span> <span style="color:#DDDDDD;">&#40;</span> <span style="color:#EDDD3D;">0.295000</span><span style="color:#DDDDDD;">&#41;</span>
or_nil: <span style="color:#EDDD3D;">0.145000</span> <span style="color:#EDDD3D;">0.000000</span> <span style="color:#EDDD3D;">0.145000</span> <span style="color:#DDDDDD;">&#40;</span> <span style="color:#EDDD3D;">0.146000</span><span style="color:#DDDDDD;">&#41;</span>
&nbsp;
With all option values passed
&nbsp;
user <span style="color:#DD7522;">system</span> total real
delete: <span style="color:#EDDD3D;">0.154000</span> <span style="color:#EDDD3D;">0.000000</span> <span style="color:#EDDD3D;">0.154000</span> <span style="color:#DDDDDD;">&#40;</span> <span style="color:#EDDD3D;">0.154000</span><span style="color:#DDDDDD;">&#41;</span>
merge: <span style="color:#EDDD3D;">0.289000</span> <span style="color:#EDDD3D;">0.000000</span> <span style="color:#EDDD3D;">0.289000</span> <span style="color:#DDDDDD;">&#40;</span> <span style="color:#EDDD3D;">0.288000</span><span style="color:#DDDDDD;">&#41;</span>
or_nil: <span style="color:#EDDD3D;">0.101000</span> <span style="color:#EDDD3D;">0.000000</span> <span style="color:#EDDD3D;">0.101000</span> <span style="color:#DDDDDD;">&#40;</span> <span style="color:#EDDD3D;">0.100000</span><span style="color:#DDDDDD;">&#41;</span></pre></div></div>

<blockquote><p>Looks like something&#8217;s artificially slowing down the &#8220;or_nil&#8221; case in the first scenario, but the rest of the numbers look pretty solid.</p></blockquote>
<p>Interesting results all around.  I&#8217;m not going to lose sleep over the milliseconds I&#8217;m saving/losing with various approaches, so I&#8217;ll likely use the ops = ops[:foo] || &#8216;default&#8217; approach for readability.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryandonovan.com/ruby/2008/02/06/responses-to-benchmarks/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ruby: benchmarking ways to pass options to a method</title>
		<link>http://www.bryandonovan.com/ruby/2008/02/05/ruby-benchmarking-ways-to-pass-options-to-a-method/</link>
		<comments>http://www.bryandonovan.com/ruby/2008/02/05/ruby-benchmarking-ways-to-pass-options-to-a-method/#comments</comments>
		<pubDate>Tue, 05 Feb 2008 19:40:06 +0000</pubDate>
		<dc:creator>Bryan</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[ruby rails benchmarking optimization]]></category>

		<guid isPermaLink="false">http://www.bryandonovan.com/ruby/?p=5</guid>
		<description><![CDATA[(reposting from my Sun blog)
I&#8217;ve wondered before what the fastest way is to pass a hash of options to a method in Ruby.. so today I benchmarked a few methods I&#8217;ve used in the past.
I&#8217;ve seen three main ways of passing an options hash to a method and extracting the options or use default values [...]]]></description>
			<content:encoded><![CDATA[<p>(reposting from my <a href="http://blogs.sun.com/bdonovan/entry/ruby_benchmarking_ways_to_pass" title="sun blog">Sun blog</a>)</p>
<p>I&#8217;ve wondered before what the fastest way is to pass a hash of options to a method in Ruby.. so today I benchmarked a few methods I&#8217;ve used in the past.</p>
<p>I&#8217;ve seen three main ways of passing an options hash to a method and extracting the options or use default values if they weren&#8217;t passed in:</p>
<ul>
<li>Merge the options with a hash of defaults, then assign values to local variables (or just use the options hash directly within the method)</li>
<li>Use something like <span style="font-family: monospace">var = options[:var] || &#8216;default&#8217; </span></li>
<li>Use the delete method on the hash, e.g., <span style="font-family: monospace">var = options.delete(:var) || &#8216;default&#8217;</span></li>
</ul>
<p>From what I can tell, using <span style="font-family: monospace">delete</span> is the fastest:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby"><span style="color:#DD7522;">require</span> <span style="color:#669933;">'benchmark'</span>
&nbsp;
<span style="color:#DD7522;">def</span> ops_delete<span style="color:#DDDDDD;">&#40;</span>ops=<span style="color:#DDDDDD;">&#123;</span><span style="color:#DDDDDD;">&#125;</span><span style="color:#DDDDDD;">&#41;</span>
  a = ops.<span style="color:#F3C55F;">delete</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#5098C2;">:a</span><span style="color:#DDDDDD;">&#41;</span> || <span style="color:#EDDD3D;">11</span>
  b = ops.<span style="color:#F3C55F;">delete</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#5098C2;">:b</span><span style="color:#DDDDDD;">&#41;</span> || <span style="color:#EDDD3D;">22</span>
  c = ops.<span style="color:#F3C55F;">delete</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#5098C2;">:c</span><span style="color:#DDDDDD;">&#41;</span> || <span style="color:#EDDD3D;">33</span>
  d = ops.<span style="color:#F3C55F;">delete</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#5098C2;">:d</span><span style="color:#DDDDDD;">&#41;</span> || <span style="color:#EDDD3D;">44</span>
<span style="color:#DD7522;">end</span>
&nbsp;
<span style="color:#DD7522;">def</span> ops_merge<span style="color:#DDDDDD;">&#40;</span>ops=<span style="color:#DDDDDD;">&#123;</span><span style="color:#DDDDDD;">&#125;</span><span style="color:#DDDDDD;">&#41;</span>
  ops = <span style="color:#DDDDDD;">&#123;</span>:a =&gt; <span style="color:#EDDD3D;">11</span>, <span style="color:#5098C2;">:b</span> =&gt; <span style="color:#EDDD3D;">22</span>, <span style="color:#5098C2;">:c</span> =&gt; <span style="color:#EDDD3D;">33</span>, <span style="color:#5098C2;">:d</span> =&gt; <span style="color:#EDDD3D;">44</span><span style="color:#DDDDDD;">&#125;</span>.<span style="color:#F3C55F;">merge</span><span style="color:#DDDDDD;">&#40;</span>ops<span style="color:#DDDDDD;">&#41;</span>
  a = ops<span style="color:#DDDDDD;">&#91;</span><span style="color:#5098C2;">:a</span><span style="color:#DDDDDD;">&#93;</span>
  b = ops<span style="color:#DDDDDD;">&#91;</span><span style="color:#5098C2;">:b</span><span style="color:#DDDDDD;">&#93;</span>
  c = ops<span style="color:#DDDDDD;">&#91;</span><span style="color:#5098C2;">:c</span><span style="color:#DDDDDD;">&#93;</span>
  d = ops<span style="color:#DDDDDD;">&#91;</span><span style="color:#5098C2;">:d</span><span style="color:#DDDDDD;">&#93;</span>
<span style="color:#DD7522;">end</span>
&nbsp;
<span style="color:#DD7522;">def</span> ops_or<span style="color:#DDDDDD;">&#40;</span>ops=<span style="color:#DDDDDD;">&#123;</span><span style="color:#DDDDDD;">&#125;</span><span style="color:#DDDDDD;">&#41;</span>
  a = ops<span style="color:#DDDDDD;">&#91;</span><span style="color:#5098C2;">:a</span><span style="color:#DDDDDD;">&#93;</span> || <span style="color:#EDDD3D;">11</span>
  b = ops<span style="color:#DDDDDD;">&#91;</span><span style="color:#5098C2;">:b</span><span style="color:#DDDDDD;">&#93;</span> || <span style="color:#EDDD3D;">22</span>
  c = ops<span style="color:#DDDDDD;">&#91;</span><span style="color:#5098C2;">:c</span><span style="color:#DDDDDD;">&#93;</span> || <span style="color:#EDDD3D;">33</span>
  d = ops<span style="color:#DDDDDD;">&#91;</span><span style="color:#5098C2;">:d</span><span style="color:#DDDDDD;">&#93;</span> || <span style="color:#EDDD3D;">44</span>
<span style="color:#DD7522;">end</span>
&nbsp;
&nbsp;
n = <span style="color:#EDDD3D;">100000</span>
<span style="color:#DD7522;">puts</span> <span style="color:#669933;">&quot;With no option values passed&quot;</span>
<span style="color:#DD7522;">Benchmark</span>.<span style="color:#F3C55F;">bmbm</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#EDDD3D;">7</span><span style="color:#DDDDDD;">&#41;</span> <span style="color:#DD7522;">do</span> |x|
  x.<span style="color:#F3C55F;">report</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#669933;">&quot;delete:&quot;</span><span style="color:#DDDDDD;">&#41;</span> <span style="color:#DDDDDD;">&#123;</span> n.<span style="color:#F3C55F;">times</span> <span style="color:#DD7522;">do</span> ops_delete; <span style="color:#DD7522;">end</span> <span style="color:#DDDDDD;">&#125;</span>
  x.<span style="color:#F3C55F;">report</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#669933;">&quot;merge:&quot;</span><span style="color:#DDDDDD;">&#41;</span>  <span style="color:#DDDDDD;">&#123;</span> n.<span style="color:#F3C55F;">times</span> <span style="color:#DD7522;">do</span> ops_merge;  <span style="color:#DD7522;">end</span> <span style="color:#DDDDDD;">&#125;</span>
  x.<span style="color:#F3C55F;">report</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#669933;">&quot;ops_or:&quot;</span><span style="color:#DDDDDD;">&#41;</span> <span style="color:#DDDDDD;">&#123;</span> n.<span style="color:#F3C55F;">times</span> <span style="color:#DD7522;">do</span> ops_or;     <span style="color:#DD7522;">end</span> <span style="color:#DDDDDD;">&#125;</span>
<span style="color:#DD7522;">end</span>
&nbsp;
<span style="color:#DD7522;">puts</span>
<span style="color:#DD7522;">puts</span> <span style="color:#669933;">&quot;With some option values passed&quot;</span>
<span style="color:#DD7522;">Benchmark</span>.<span style="color:#F3C55F;">bmbm</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#EDDD3D;">7</span><span style="color:#DDDDDD;">&#41;</span> <span style="color:#DD7522;">do</span> |x|
  x.<span style="color:#F3C55F;">report</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#669933;">&quot;delete:&quot;</span><span style="color:#DDDDDD;">&#41;</span> <span style="color:#DDDDDD;">&#123;</span> n.<span style="color:#F3C55F;">times</span> <span style="color:#DD7522;">do</span> ops_delete<span style="color:#DDDDDD;">&#40;</span><span style="color:#5098C2;">:a</span> =&gt; <span style="color:#EDDD3D;">5</span>, <span style="color:#5098C2;">:c</span> =&gt; <span style="color:#EDDD3D;">2</span><span style="color:#DDDDDD;">&#41;</span>; <span style="color:#DD7522;">end</span> <span style="color:#DDDDDD;">&#125;</span>
  x.<span style="color:#F3C55F;">report</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#669933;">&quot;merge:&quot;</span><span style="color:#DDDDDD;">&#41;</span>  <span style="color:#DDDDDD;">&#123;</span> n.<span style="color:#F3C55F;">times</span> <span style="color:#DD7522;">do</span> ops_merge<span style="color:#DDDDDD;">&#40;</span><span style="color:#5098C2;">:a</span> =&gt; <span style="color:#EDDD3D;">5</span>, <span style="color:#5098C2;">:c</span> =&gt; <span style="color:#EDDD3D;">2</span><span style="color:#DDDDDD;">&#41;</span>;  <span style="color:#DD7522;">end</span> <span style="color:#DDDDDD;">&#125;</span>
  x.<span style="color:#F3C55F;">report</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#669933;">&quot;ops_or:&quot;</span><span style="color:#DDDDDD;">&#41;</span> <span style="color:#DDDDDD;">&#123;</span> n.<span style="color:#F3C55F;">times</span> <span style="color:#DD7522;">do</span> ops_or<span style="color:#DDDDDD;">&#40;</span><span style="color:#5098C2;">:a</span> =&gt; <span style="color:#EDDD3D;">5</span>, <span style="color:#5098C2;">:c</span> =&gt; <span style="color:#EDDD3D;">2</span><span style="color:#DDDDDD;">&#41;</span>;     <span style="color:#DD7522;">end</span> <span style="color:#DDDDDD;">&#125;</span>
<span style="color:#DD7522;">end</span>
&nbsp;
<span style="color:#DD7522;">puts</span>
<span style="color:#DD7522;">puts</span> <span style="color:#669933;">&quot;With all option values passed&quot;</span>
<span style="color:#DD7522;">Benchmark</span>.<span style="color:#F3C55F;">bmbm</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#EDDD3D;">7</span><span style="color:#DDDDDD;">&#41;</span> <span style="color:#DD7522;">do</span> |x|
  x.<span style="color:#F3C55F;">report</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#669933;">&quot;delete:&quot;</span><span style="color:#DDDDDD;">&#41;</span> <span style="color:#DDDDDD;">&#123;</span> n.<span style="color:#F3C55F;">times</span> <span style="color:#DD7522;">do</span> ops_delete<span style="color:#DDDDDD;">&#40;</span><span style="color:#5098C2;">:a</span> =&gt; <span style="color:#EDDD3D;">5</span>, <span style="color:#5098C2;">:b</span> =&gt; <span style="color:#EDDD3D;">1</span>, <span style="color:#5098C2;">:c</span> =&gt; <span style="color:#EDDD3D;">2</span>, <span style="color:#5098C2;">:d</span> =&gt; <span style="color:#EDDD3D;">4</span><span style="color:#DDDDDD;">&#41;</span>; <span style="color:#DD7522;">end</span> <span style="color:#DDDDDD;">&#125;</span>
  x.<span style="color:#F3C55F;">report</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#669933;">&quot;merge:&quot;</span><span style="color:#DDDDDD;">&#41;</span>  <span style="color:#DDDDDD;">&#123;</span> n.<span style="color:#F3C55F;">times</span> <span style="color:#DD7522;">do</span> ops_merge<span style="color:#DDDDDD;">&#40;</span><span style="color:#5098C2;">:a</span> =&gt; <span style="color:#EDDD3D;">5</span>, <span style="color:#5098C2;">:b</span> =&gt; <span style="color:#EDDD3D;">1</span>, <span style="color:#5098C2;">:c</span> =&gt; <span style="color:#EDDD3D;">2</span>, <span style="color:#5098C2;">:d</span> =&gt; <span style="color:#EDDD3D;">4</span><span style="color:#DDDDDD;">&#41;</span>;  <span style="color:#DD7522;">end</span> <span style="color:#DDDDDD;">&#125;</span>
  x.<span style="color:#F3C55F;">report</span><span style="color:#DDDDDD;">&#40;</span><span style="color:#669933;">&quot;ops_or:&quot;</span><span style="color:#DDDDDD;">&#41;</span> <span style="color:#DDDDDD;">&#123;</span> n.<span style="color:#F3C55F;">times</span> <span style="color:#DD7522;">do</span> ops_or<span style="color:#DDDDDD;">&#40;</span><span style="color:#5098C2;">:a</span> =&gt; <span style="color:#EDDD3D;">5</span>, <span style="color:#5098C2;">:b</span> =&gt; <span style="color:#EDDD3D;">1</span>, <span style="color:#5098C2;">:c</span> =&gt; <span style="color:#EDDD3D;">2</span>, <span style="color:#5098C2;">:d</span> =&gt; <span style="color:#EDDD3D;">4</span><span style="color:#DDDDDD;">&#41;</span>;     <span style="color:#DD7522;">end</span> <span style="color:#DDDDDD;">&#125;</span>
<span style="color:#DD7522;">end</span></pre></div></div>

<p>Results (rehearsals omitted):</p>

<div class="wp_syntax"><div class="code"><pre class="ruby">With no option values passed
              user     <span style="color:#DD7522;">system</span>      total        real
delete:   <span style="color:#EDDD3D;">0.210000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.210000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.209877</span><span style="color:#DDDDDD;">&#41;</span>
merge:    <span style="color:#EDDD3D;">0.720000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.720000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.750394</span><span style="color:#DDDDDD;">&#41;</span>
ops_or:   <span style="color:#EDDD3D;">0.260000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.260000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.258416</span><span style="color:#DDDDDD;">&#41;</span>
&nbsp;
With some option values passed
              user     <span style="color:#DD7522;">system</span>      total        real
delete:   <span style="color:#EDDD3D;">0.250000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.250000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.255536</span><span style="color:#DDDDDD;">&#41;</span>
merge:    <span style="color:#EDDD3D;">0.830000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.830000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.831358</span><span style="color:#DDDDDD;">&#41;</span>
ops_or:   <span style="color:#EDDD3D;">0.310000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.310000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.314737</span><span style="color:#DDDDDD;">&#41;</span>
&nbsp;
With all option values passed
              user     <span style="color:#DD7522;">system</span>      total        real
delete:   <span style="color:#EDDD3D;">0.310000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.310000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.306889</span><span style="color:#DDDDDD;">&#41;</span>
merge:    <span style="color:#EDDD3D;">0.900000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.900000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.905261</span><span style="color:#DDDDDD;">&#41;</span>
ops_or:   <span style="color:#EDDD3D;">0.340000</span>   <span style="color:#EDDD3D;">0.000000</span>   <span style="color:#EDDD3D;">0.340000</span> <span style="color:#DDDDDD;">&#40;</span>  <span style="color:#EDDD3D;">0.348061</span><span style="color:#DDDDDD;">&#41;</span></pre></div></div>

<p>This was done in Ruby 1.8.4 on a 2GHz MacBook Intel Core Duo with 1GB 667 MHz DDR2 SDRAM.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryandonovan.com/ruby/2008/02/05/ruby-benchmarking-ways-to-pass-options-to-a-method/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
