<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: ruby code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Wed, 20 Aug 2008 20:37:13 GMT</pubDate>
    <description>DZone Snippets: ruby code</description>
    <item>
      <title>Collapse ranges in arrays</title>
      <link>http://snippets.dzone.com/posts/show/4099</link>
      <description>Takes an Array and turns consecutive integers into Range objects.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class Array&lt;br /&gt;    def collapse_ranges&lt;br /&gt;        return self if self.length &lt;= 2&lt;br /&gt;        self.uniq!&lt;br /&gt;        self.sort! rescue nil&lt;br /&gt;        temp_array, return_array = [], []&lt;br /&gt;        self.each_with_index do |item, i|&lt;br /&gt;            if item.respond_to?(:next)&lt;br /&gt;                temp_array.push item&lt;br /&gt;                if item.next != self[i + 1]&lt;br /&gt;                    return_array.concat 3 &lt;= temp_array.length ?&lt;br /&gt;                        [temp_array.first..temp_array.last] :&lt;br /&gt;                         temp_array&lt;br /&gt;                    temp_array.clear&lt;br /&gt;                end&lt;br /&gt;            else&lt;br /&gt;                return_array.concat 3 &lt;= temp_array.length ?&lt;br /&gt;                    [temp_array.first..temp_array.last] :&lt;br /&gt;                     temp_array&lt;br /&gt;                temp_array.clear&lt;br /&gt;                return_array.push item&lt;br /&gt;            end&lt;br /&gt;        end&lt;br /&gt;        return return_array&lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&gt;&gt; [1, 3, 4, 5, 7, 8].collapse_ranges.join(', ')&lt;br /&gt;=&gt; 1, 3..5, 7, 8&lt;br /&gt;&gt;&gt; %w(a c d e g i j).collapse_ranges.join(', ')&lt;br /&gt;=&gt; a, c..e, g, i, j&lt;br /&gt;&gt;&gt; [1, 2.5, 3, 4, 5].collapse_ranges.join(', ')&lt;br /&gt;=&gt; 1, 2.5, 3..5&lt;br /&gt;&gt;&gt; [1, 2, 3, 4, {:test =&gt; 'value'}, 5].collapse_ranges.join(', ')&lt;br /&gt;=&gt; 1..4, testvalue, 5&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 03 Jun 2007 17:59:53 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4099</guid>
      <author>sporkyy (Todd Sayre)</author>
    </item>
    <item>
      <title>Find missing array items</title>
      <link>http://snippets.dzone.com/posts/show/3322</link>
      <description>This works fine for integers and letters.  It should work for anything though, so long as Ruby can form an range from the first and last array items.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class Array&lt;br /&gt;    def missing_items&lt;br /&gt;        return [] if self.length &lt;= 1&lt;br /&gt;        self.uniq!&lt;br /&gt;        self.sort! rescue nil&lt;br /&gt;        begin&lt;br /&gt;            (self.first..self.last).to_a - self&lt;br /&gt;        rescue&lt;br /&gt;            []&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&gt;&gt; [1, 3, 4, 10].missing_items.join(', ')&lt;br /&gt;=&gt; 2, 5, 6, 7, 8, 9&lt;br /&gt;&gt;&gt; [1, 2, 7, 7.5, 8.2].missing_items.join(', ')&lt;br /&gt;=&gt; 3, 4, 5, 6, 8&lt;br /&gt;&gt;&gt; %w(a b c f g j).missing_items.join(', ')&lt;br /&gt;=&gt; d, e, h, i&lt;br /&gt;&gt;&gt; [2.5, {:test =&gt; 'value'}].missing_items.join(', ')&lt;br /&gt;=&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 18 Jan 2007 08:15:54 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3322</guid>
      <author>sporkyy (Todd Sayre)</author>
    </item>
    <item>
      <title>Array percentages of the maximum</title>
      <link>http://snippets.dzone.com/posts/show/3204</link>
      <description>Returns an array whose elements are the percentage of each element compared to the maximum element in the array.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&gt;&gt; [25, 150, 200, 5, 75, 125].percentages_of_maximum&lt;br /&gt;=&gt; [12, 75, 100, 2, 37, 62]&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;If you're using Rails, stick this in your "environment.rb" script in the "config" directory:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;class Array&lt;br /&gt;    def percentages_of_maximum&lt;br /&gt;        self.collect{ |i| ((i.to_f / self.sort.last.to_f) * 100).to_i }&lt;br /&gt;    end&lt;br /&gt;end&lt;/code&gt;</description>
      <pubDate>Tue, 26 Dec 2006 07:16:14 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3204</guid>
      <author>sporkyy (Todd Sayre)</author>
    </item>
    <item>
      <title>Gmail Date Format Helper</title>
      <link>http://snippets.dzone.com/posts/show/2580</link>
      <description>I needed a short and intuitive way of showing dates, so rather than just making something up I decided to steal Google's short date format from Gmail.  I'm sure they did usability studies and whatnot.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.merge!(&lt;br /&gt;  :gmail =&gt; lambda { |date|&lt;br /&gt;    Time.now.beginning_of_day &lt;= date ?&lt;br /&gt;    "#{date.strftime('%I').to_i}:#{date.strftime('%M')} #{date.strftime('%p').downcase}" :&lt;br /&gt;    Time.now.beginning_of_year &lt;= date ?&lt;br /&gt;    "#{date.strftime('%b')} #{date.day}" :&lt;br /&gt;    "#{date.month}/#{date.day}/#{date.strftime('%y')}"&lt;br /&gt;  }&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!(&lt;br /&gt;  :gmail =&gt; lambda { |date|&lt;br /&gt;    Time.now.beginning_of_day &lt;= date ?&lt;br /&gt;    "#{date.strftime('%I').to_i}:#{date.strftime('%M')} #{date.strftime('%p').downcase}" :&lt;br /&gt;    Time.now.beginning_of_year &lt;= date ?&lt;br /&gt;    "#{date.strftime('%b')} #{date.day}" :&lt;br /&gt;    "#{date.month}/#{date.day}/#{date.strftime('%y')}"&lt;br /&gt;  }&lt;br /&gt;)&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Put this code in your "environmen.rb" file in your "RAILS_ROOT/config" directory or make a new Ruby script file containing it in your "RAILS_ROOT/config/initializers" directory.</description>
      <pubDate>Mon, 11 Sep 2006 05:47:42 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2580</guid>
      <author>sporkyy (Todd Sayre)</author>
    </item>
    <item>
      <title>Float to HTML fraction entity</title>
      <link>http://snippets.dzone.com/posts/show/2323</link>
      <description>Uses HTML entities to display pretty fractional values for applicable floating point numbers.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class Float&lt;br /&gt;    def html_fraction&lt;br /&gt;        self.to_s.&lt;br /&gt;            sub(/(.+)\.0$/,     '\1'        ).  # Zero decimal&lt;br /&gt;            sub(/(-?\d+)\.25$/, '\1&amp;frac14;').  # One quarter&lt;br /&gt;            sub(/(-?\d+)\.5$/,  '\1&amp;frac12;').  # One half&lt;br /&gt;            sub(/(-?\d+)\.75$/, '\1&amp;frac34;').  # Three quarters&lt;br /&gt;            sub(/^(-?)0(&amp;.+)/,  '\1\2'      )   # Strip leading zeroes&lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And it works something like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&gt;&gt; (0.1).html_fraction&lt;br /&gt;=&gt; 0.1&lt;br /&gt;&gt;&gt; (0.25).html_fraction&lt;br /&gt;=&gt; &amp;frac14;&lt;br /&gt;&gt;&gt; (0.50).html_fraction&lt;br /&gt;=&gt; &amp;frac12;&lt;br /&gt;&gt;&gt; (0.75).html_fraction&lt;br /&gt;=&gt; &amp;frac34;&lt;br /&gt;&gt;&gt; (1.0).html_fraction&lt;br /&gt;=&gt; 1.0&lt;br /&gt;&gt;&gt; (2.25).html_fraction&lt;br /&gt;=&gt; 2&amp;frac14;&lt;br /&gt;&gt;&gt; (3.5).html_fraction&lt;br /&gt;=&gt; 3&amp;frac12;&lt;br /&gt;&gt;&gt; (4.75).html_fraction&lt;br /&gt;=&gt; 4&amp;frac34;&lt;br /&gt;&gt;&gt; (5.85).html_fraction&lt;br /&gt;=&gt; 5.85&lt;br /&gt;&gt;&gt; (-1.5).html_fraction&lt;br /&gt;=&gt; -1&amp;frac12;&lt;br /&gt;&gt;&gt; (-1.6).html_fraction&lt;br /&gt;=&gt; -1.6;&lt;br /&gt;&gt;&gt; (-0.25).html_fraction&lt;br /&gt;=&gt; -&amp;frac14;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 24 Jul 2006 21:14:06 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2323</guid>
      <author>sporkyy (Todd Sayre)</author>
    </item>
  </channel>
</rss>
