« Newer Snippets
Older Snippets »
Showing 21-40 of 70 total

Changed File Analysis

//Search through a directory looking for modified files - uses one-way hash function. Run once to initalize files, then run at a later date for analysis.

#
#   A ruby script to detect changed/added/deleted files
#     using one-way hash function - MD5 used, but could be changed
#
#    Written by:  Studlee2 at gmail dot com
#
# Usage: changed.rb 
#      Output files will be dumped into 
#
# MUST BE ABLE TO READ AND WRITE FILES
# Must have Digest::base installed

require 'digest/md5'

#initialize all hashes, regexp, and path array
oldfile_hash = Hash.new()
newfile_hash = Hash.new()
valid = /(.*)\s{5}(\w{32})/
#This array will store each directory to traverse
dir_array = Array.new()
dir_array[0] = ARGV.shift or raise "Missing path to traverse"

#Ensure the path is correct for file output
file_report = "#{dir_array[0]}\\file_report.txt"
file_output = "#{dir_array[0]}\\changed.files"
oldfile_output = "#{dir_array[0]}\\old_changed.files"

#Determine if the script has been run on the path before, if so change the file name
  if File.exists?(file_output)
    File.rename( file_output, oldfile_output)       #archive the file to make room for a new one
    File.open(oldfile_output, 'r+b') do |infile|   #open old_file to compare to new_file
      #read in the old files and md5 sums for each line in the file
      while (old_line = valid.match(infile.gets))
       oldfile_hash[old_line[1]] = old_line[2]
      end
    end
end

    #initialize the files to be used to write to
    report = File.new(file_report, 'wb')
    changed_files = File.new(file_output, 'wb')

  #Go through the directory and compute MD5 Hash until there aren't anymore items in directory array
  begin
    p = dir_array.shift   #remove one item from directory array 
    Dir.chdir(p)            #change to new directory to search
    #for each file in the dir, compute md5 sum and add to new hash
    Dir.foreach(p) do |filename|
      next if filename == '.' or filename == '..'   #go to next folder if '.' or '..'
      unless File::directory?(filename)                    #if not a folder, then process file
        file = File.open(filename, 'rb')
        newfile_hash[filename] = Digest::MD5.new(File.open(filename, 'rb').read).hexdigest
        file.close unless file.closed?
      else
        dir_array << p + "\\" + filename      #if nat a file, put the directories into array for later
      end
    end
  end while !dir_array.empty?
#write files found to changed.files
newfile_hash.each do |file, md5|
  changed_files.write "#{file}     #{md5}\n"
end
#remove files that are the same from hash tables
newfile_hash.keys.select {|file| newfile_hash[file] == oldfile_hash[file] }.each do |file|
  newfile_hash.delete(file)
  oldfile_hash.delete(file)
end
#write files that have been changed or added, then remove from has table
newfile_hash.each do |file, md5|
  report.write "#{oldfile_hash[file] ? "Changed" : "Added"} file: #{file} #{md5}\n"
  oldfile_hash.delete(file)
end
#write files that are left over the the oldfile_hash table - these are files that weren't found in the 
oldfile_hash.each do |file, md5|
  report.write "Deleted/Moved file: #{file} #{md5}\n"
end

Currency Converter

// A simple ruby script to convert currency

#
#   A simple ruby script to convert currency
#     can be edited to check stocks, highs, lows, etc.
#
#    Written by:  Studlee2 at gmail dot com
#
# Usage: money.rb 
# Where:  , -- ISO Currency codes
#
# MUST BE CONNECTED TO THE INTERNET
# Must have ruby-finance installed
require 'finance/currency'

#Take arguments in from command line
c = ARGV

#Ensure that usage is proper
valid = /^([\+-]?\d*(?:\.\d*)?)(\S+)\s(\S+)/
if exchange = valid.match(c)
amount = exchange[1]
from_code = exchange[2]
to_code = exchange[3]

#Let Finance::Currency do its magic
puts Finance::Currency::convert(to_code.to_s, from_code.to_s, amount)
else
#if usage is invalid - inform the user
  puts '-----USAGE IS-----'
  puts ' '
  puts ', -- ISO Currency codes'
end

Decrypt a File *Blowfish*

// A simple ruby script to decrypt a file

#
#   A simple ruby script to decrypt a file
#     can be edited to decrypt directories also
#
#    Written by:  Studlee2 at gmail dot com
#
#    Using the blowfish algorithm
#         several algorithms exist, just substitute for 'blowfish'
#         make sure it matches the encryption algorithm
require 'crypt/blowfish'

begin
#take in the file name to decrypt as an argument
  filename = ARGV.shift
  puts "Decrypting #{filename}"
  p = "Decrypted_#{filename}"
#User specifies the original key from 1-56 bytes (or guesses)
  print 'Enter your encryption key: '
  kee = gets
#initialize the decryption method using the user input key  
  blowfish = Crypt::Blowfish.new(kee)
  blowfish.decrypt_file(filename.to_str, p)
#decrypt the file  
  puts 'Decryption SUCCESS!'
rescue
#if the script busts for any reason this will catch it
  puts "\n\n\nSorry the decryption was unsuccessful"
  puts "USAGE: ruby decryption.rb <span class="escape">\n\n\n</span></span><span class="punct">"</span>
  <span class="keyword">raise</span>
<span class="keyword">end</span>
</pre>
            </div>
            <div class="post-metadata">
              to <a href="/tag/ruby" class="tag">ruby</a> by <a href="/user/studlee2">studlee2</a> on Jul 08, 2006 <b></b>
            </div>
          </div>
        </div>
<a name="post554" id="post554"></a>
        <div id="post554">
          <div class="post">
            <h3 class="post-title"><a href="/posts/show/554">Encrypt a File *Blowfish*</a></h3>
            <div class="post-body">
              // A simple ruby script to encrypt a file<br>
              <br>
              <pre>
<span class="comment">#</span>
<span class="comment">#   A simple ruby script to encrypt a file</span>
<span class="comment">#     can be edited to encrypt directories also</span>
<span class="comment">#</span>
<span class="comment">#    Written by:  Studlee2 at gmail dot com</span>
<span class="comment">#</span>
<span class="comment">#    Using the blowfish algorithm</span>
<span class="comment">#        several algorithms exist, just substitute for 'blowfish'</span>
<span class="comment">#</span>
<span class="ident">require</span> <span class="punct">'</span><span class="string">crypt/blowfish</span><span class="punct">'</span>

<span class="keyword">begin</span>
<span class="comment">#take in the file name to encrypt as an argument</span>
  <span class="ident">filename</span> <span class="punct">=</span> <span class="constant">ARGV</span><span class="punct">.</span><span class="ident">shift</span>
  <span class="ident">puts</span> <span class="ident">filename</span>
  <span class="ident">c</span> <span class="punct">=</span> <span class="punct">"</span><span class="string">Encrypted_<span class="expr">#{filename}</span></span><span class="punct">"</span>
<span class="comment">#User specifies a key from 1-56 bytes (Don't forget this or your stuff is history)</span>
  <span class="ident">print</span> <span class="punct">'</span><span class="string">Enter your encryption key (1-56 bytes): </span><span class="punct">'</span>
  <span class="ident">kee</span> <span class="punct">=</span> <span class="ident">gets</span>
<span class="comment">#initialize the encryption method using the user input key</span>
  <span class="ident">blowfish</span> <span class="punct">=</span> <span class="constant">Crypt</span><span class="punct">::</span><span class="constant">Blowfish</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">kee</span><span class="punct">)</span>
  <span class="ident">blowfish</span><span class="punct">.</span><span class="ident">encrypt_file</span><span class="punct">(</span><span class="ident">filename</span><span class="punct">.</span><span class="ident">to_str</span><span class="punct">,</span> <span class="ident">c</span><span class="punct">)</span>
<span class="comment">#encrypt the file</span>
  <span class="ident">puts</span> <span class="punct">'</span><span class="string">Encryption SUCCESS!</span><span class="punct">'</span>
<span class="keyword">rescue</span>
<span class="comment">#if the script busts for any reason this will catch it</span>
  <span class="ident">puts</span> <span class="punct">"</span><span class="string"><span class="escape">\n\n\n</span>Sorry the encryption was unsuccessful</span><span class="punct">"</span>
  <span class="ident">puts</span> <span class="punct">"</span><span class="string">USAGE: ruby encryption.rb <plaintext file><span class="escape">\n\n\n</span></span><span class="punct">"</span>
  <span class="keyword">raise</span>
<span class="keyword">end</span>
</pre>
            </div>
            <div class="post-metadata">
              to <a href="/tag/ruby" class="tag">ruby</a> by <a href="/user/studlee2">studlee2</a> on Jul 08, 2006 <b></b>
            </div>
          </div>
        </div>
<a name="post553" id="post553"></a>
        <div id="post553">
          <div class="post">
            <h3 class="post-title"><a href="/posts/show/553">Simple Temperature Converter</a></h3>
            <div class="post-body">
              // Temperature Converter<br>
              <br>
              <pre>
<span class="comment">#</span>
<span class="comment">#   A simple ruby script to convert temperatures</span>
<span class="comment">#    Written by:  Studlee2 at gmail dot com</span>
<span class="comment">#</span>

<span class="ident">puts</span> <span class="punct">"</span><span class="string">Enter a temprature: </span><span class="punct">"</span>
<span class="ident">t</span> <span class="punct">=</span> <span class="ident">gets</span>
<span class="comment">#regexp to make sure the entry is valid</span>
<span class="ident">valid</span> <span class="punct">=</span> <span class="punct">/</span><span class="regex">^([<span class="escape">\+</span>-]?)(<span class="escape">\d</span>+)([CcFf]?)</span><span class="punct">/</span>
<span class="ident">degree</span> <span class="punct">=</span> <span class="ident">valid</span><span class="punct">.</span><span class="ident">match</span><span class="punct">(</span><span class="ident">t</span><span class="punct">)</span>
<span class="comment">#determines if you input celsius or farenheit</span>
<span class="keyword">if</span> <span class="punct">(</span><span class="ident">degree</span><span class="punct">[</span><span class="number">3</span><span class="punct">]</span> <span class="punct">==</span> <span class="punct">"</span><span class="string">c</span><span class="punct">"</span> <span class="punct">||</span> <span class="ident">degree</span><span class="punct">[</span><span class="number">3</span><span class="punct">]</span> <span class="punct">==</span> <span class="punct">"</span><span class="string">C</span><span class="punct">")</span>
  <span class="ident">puts</span> <span class="punct">"</span><span class="string">Converting from Celsius to Farenheit</span><span class="punct">"</span>
  <span class="ident">puts</span> <span class="punct">"</span><span class="string"><span class="expr">#{degree[0]}</span> to <span class="expr">#{((9.0/5.0) * degree[2].to_f + 32.0).to_i}</span> F</span><span class="punct">"</span>
<span class="keyword">elsif</span> <span class="punct">(</span><span class="ident">degree</span><span class="punct">[</span><span class="number">3</span><span class="punct">]</span> <span class="punct">==</span> <span class="punct">"</span><span class="string">f</span><span class="punct">"</span> <span class="punct">||</span> <span class="ident">degree</span><span class="punct">[</span><span class="number">3</span><span class="punct">]</span> <span class="punct">==</span> <span class="punct">"</span><span class="string">F</span><span class="punct">")</span>
  <span class="ident">puts</span> <span class="punct">"</span><span class="string">Converting from Farenheit to Celsius</span><span class="punct">"</span>
  <span class="ident">puts</span> <span class="punct">"</span><span class="string"><span class="expr">#{degree[0]}</span> to <span class="expr">#{((5.0/9.0) * (degree[2].to_f - 32.0)).to_i}</span> C</span><span class="punct">"</span>
<span class="comment">#Displays the usage if you didn't enter anything correctly</span>
<span class="keyword">else</span> 
  <span class="ident">puts</span> <span class="punct">"</span><span class="string">Usage is: [+|-]<deg>[C|F]</span><span class="punct">"</span>
<span class="keyword">end</span>

</pre>
            </div>
            <div class="post-metadata">
              to <a href="/tag/ruby" class="tag">ruby</a> by <a href="/user/studlee2">studlee2</a> on Jul 08, 2006 <b></b>
            </div>
          </div>
        </div>
<a name="post548" id="post548"></a>
        <div id="post548">
          <div class="post">
            <h3 class="post-title"><a href="/posts/show/548">update a working copy and all externals in parallel</a></h3>
            <div class="post-body">
              If you have an app in subversion with many externals, it may take a bit too long to update it, as updates happen one after another.<br>
              <br>
              This bit of script updates the app and each external in parallel, making it oh so much faster.<br>
              <br>
              <br>
              <pre>
<span class="comment">#!/usr/local/bin/ruby</span>

<span class="ident">puts</span><span class="punct">(</span>
  <span class="punct">(</span> `<span class="ident">svn</span> <span class="ident">pl</span> <span class="punct">-</span><span class="constant">R`</span><span class="punct">.</span><span class="ident">scan</span><span class="punct">(/</span><span class="regex"><span class="escape">\S</span>.*'(.*)':<span class="escape">\n</span>((?:  .*<span class="escape">\n</span>)+)</span><span class="punct">/)\</span>
    <span class="punct">.</span><span class="ident">inject</span><span class="punct">({})</span> <span class="punct">{</span> <span class="punct">|</span><span class="ident">h</span><span class="punct">,</span> <span class="punct">(</span><span class="ident">d</span><span class="punct">,</span> <span class="ident">p</span><span class="punct">)|</span> <span class="ident">h</span><span class="punct">[</span><span class="ident">d</span><span class="punct">]</span> <span class="punct">=</span> <span class="ident">p</span><span class="punct">.</span><span class="ident">strip</span><span class="punct">.</span><span class="ident">split</span><span class="punct">(/</span><span class="regex"><span class="escape">\s</span>+</span><span class="punct">/);</span> <span class="ident">h</span> <span class="punct">}\</span>
    <span class="punct">.</span><span class="ident">select</span> <span class="punct">{</span> <span class="punct">|</span><span class="ident">d</span><span class="punct">,</span> <span class="ident">ps</span><span class="punct">|</span> <span class="ident">ps</span><span class="punct">.</span><span class="ident">include?</span> <span class="punct">'</span><span class="string">svn:externals</span><span class="punct">'</span> <span class="punct">}\</span>
    <span class="punct">.</span><span class="ident">map</span> <span class="punct">{</span> <span class="punct">|</span><span class="ident">xd</span><span class="punct">,</span> <span class="ident">ps</span><span class="punct">|</span> <span class="punct">[</span><span class="ident">xd</span><span class="punct">,</span> `<span class="ident">svn</span> <span class="ident">pg</span> <span class="ident">svn</span><span class="symbol">:externals</span> <span class="comment">#{xd}`] }\</span>
    <span class="punct">.</span><span class="ident">map</span> <span class="punct">{</span> <span class="punct">|</span><span class="ident">xd</span><span class="punct">,</span> <span class="ident">exts</span><span class="punct">|</span> <span class="ident">exts</span><span class="punct">.</span><span class="ident">strip</span><span class="punct">.</span><span class="ident">split</span><span class="punct">(/</span><span class="regex"><span class="escape">\s</span>*<span class="escape">\n</span></span><span class="punct">/).</span><span class="ident">map</span> <span class="punct">{</span> <span class="punct">|</span><span class="ident">l</span><span class="punct">|</span> <span class="ident">xd</span> <span class="punct">+</span> <span class="punct">'</span><span class="string">/</span><span class="punct">'</span> <span class="punct">+</span> <span class="ident">l</span><span class="punct">.</span><span class="ident">split</span><span class="punct">(/</span><span class="regex"><span class="escape">\s</span>+</span><span class="punct">/).</span><span class="ident">first</span> <span class="punct">}</span> <span class="punct">}\</span>
    <span class="punct">.</span><span class="ident">inject</span> <span class="punct">{</span> <span class="punct">|</span><span class="ident">a</span><span class="punct">,</span> <span class="ident">b</span><span class="punct">|</span> <span class="ident">a</span> <span class="punct">+</span> <span class="ident">b</span> <span class="punct">}\</span>
    <span class="punct">.</span><span class="ident">map</span> <span class="punct">{</span> <span class="punct">|</span><span class="ident">d</span><span class="punct">|</span> <span class="punct">"</span><span class="string">cd <span class="expr">#{d}</span> && svn up 2>&1</span><span class="punct">"</span> <span class="punct">}</span> \
    <span class="punct"><<</span> <span class="punct">'</span><span class="string">svn up . --ignore-externals 2>&1</span><span class="punct">'</span>
  <span class="punct">)\</span>
  <span class="punct">.</span><span class="ident">map</span> <span class="punct">{</span> <span class="punct">|</span><span class="ident">cmd</span><span class="punct">|</span> <span class="punct">[</span><span class="ident">cmd</span><span class="punct">,</span> <span class="constant">Thread</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">{</span> `<span class="comment">#{cmd}` }] }\</span>
  <span class="punct">.</span><span class="ident">map</span> <span class="punct">{</span> <span class="punct">|</span><span class="ident">cmd</span><span class="punct">,</span> <span class="ident">thread</span><span class="punct">|</span> <span class="punct">"</span><span class="string"><span class="expr">#{cmd}</span><span class="escape">\n</span><span class="expr">#{thread.value}</span></span><span class="punct">"</span> <span class="punct">}.</span><span class="ident">join</span><span class="punct">("</span><span class="string"><span class="escape">\n</span></span><span class="punct">")</span>
<span class="punct">)</span>
</pre>
<br>
              <br>
              (note: if you add an external or change an external property in another way, you'll need to run the standard svn up once)
            </div>
            <div class="post-metadata">
              to <a href="/tag/ruby" class="tag">ruby</a> <a href="/tag/shell" class="tag">shell</a> <a href="/tag/svn" class="tag">svn</a> <a href="/tag/subversion" class="tag">subversion</a> by <a href="/user/cch">cch</a> on Jul 04, 2006 <b></b>
            </div>
          </div>
        </div>
<a name="post547" id="post547"></a>
        <div id="post547">
          <div class="post">
            <h3 class="post-title"><a href="/posts/show/547">Rake task that adds all unversioned files to the repository</a></h3>
            <div class="post-body">
              <pre>
<span class="ident">task</span> <span class="symbol">:add_all_to_svn</span> <span class="keyword">do</span>
  `<span class="ident">svn</span> <span class="ident">status</span> <span class="punct">--</span><span class="ident">show</span><span class="punct">-</span><span class="ident">updates`</span><span class="punct">.</span><span class="ident">each</span> <span class="punct">{</span> <span class="punct">|</span><span class="ident">l</span><span class="punct">|</span>
    <span class="ident">l</span> <span class="punct">=</span> <span class="ident">l</span><span class="punct">.</span><span class="ident">split</span>
    <span class="ident">system</span><span class="punct">("</span><span class="string">svn add <span class="expr">#{l.last}</span></span><span class="punct">")</span> <span class="keyword">if</span> <span class="ident">l</span><span class="punct">.</span><span class="ident">first</span> <span class="punct">==</span> <span class="punct">"</span><span class="string">?</span><span class="punct">"</span> <span class="comment"># File is not under version control</span>
  <span class="punct">}</span>
<span class="keyword">end</span>
</pre>
            </div>
            <div class="post-metadata">
              to <a href="/tag/ruby" class="tag">ruby</a> <a href="/tag/svn" class="tag">svn</a> <a href="/tag/rake" class="tag">rake</a> by <a href="/user/simanyay">simanyay</a> on Jul 03, 2006 <b><a href="/posts/show/547#comments" class="has-comments">3 Comments</a></b>
            </div>
          </div>
        </div>
<a name="post522" id="post522"></a>
        <div id="post522">
          <div class="post">
            <h3 class="post-title"><a href="/posts/show/522">Test helper for colorfull logging</a></h3>
            <div class="post-body">
              Helper methods defined in this test_helper.rb make test.log colorfull and allow to easy find specific test cases and failures. To log test names use following template for test method:<br>
              <br>
              <pre>
<span class="keyword">def </span><span class="method">test_creates_entry</span>
  <span class="ident">log_test_name</span>
  <span class="comment"># Rest of your test code goes here</span>
  <span class="comment"># ...</span>
<span class="keyword">end</span>
</pre>
<br>
              <br>
              test/test_helper.rb<br>
              <br>
              <pre>
<span class="constant">ENV</span><span class="punct">["</span><span class="string">RAILS_ENV</span><span class="punct">"]</span> <span class="punct">=</span> <span class="punct">"</span><span class="string">test</span><span class="punct">"</span>
<span class="ident">require</span> <span class="constant">File</span><span class="punct">.</span><span class="ident">expand_path</span><span class="punct">(</span><span class="constant">File</span><span class="punct">.</span><span class="ident">dirname</span><span class="punct">(</span><span class="constant">__FILE__</span><span class="punct">)</span> <span class="punct">+</span> <span class="punct">"</span><span class="string">/../config/environment</span><span class="punct">")</span>
<span class="ident">require</span> <span class="punct">'</span><span class="string">test_help</span><span class="punct">'</span>

<span class="keyword">module </span><span class="module">Test::Unit::Assertions</span>
  <span class="keyword">def </span><span class="method">assert_block</span><span class="punct">(</span><span class="ident">message</span><span class="punct">="</span><span class="string">assert_block failed.</span><span class="punct">")</span> <span class="comment"># :yields:</span>
    <span class="ident">_wrap_assertion</span> <span class="keyword">do</span>
      <span class="keyword">if</span> <span class="punct">(!</span> <span class="keyword">yield</span><span class="punct">)</span>
        <span class="ident">logger</span><span class="punct">.</span><span class="ident">debug</span><span class="punct">("</span><span class="string"><span class="escape">\e</span>[0;41mFailure:<span class="escape">\e</span>[m <span class="expr">#{message}</span></span><span class="punct">")</span>
        <span class="keyword">raise</span> <span class="constant">Test</span><span class="punct">::</span><span class="constant">Unit</span><span class="punct">::</span><span class="constant">AssertionFailedError</span><span class="punct">.</span><span class="ident">new</span><span class="punct">(</span><span class="ident">message</span><span class="punct">.</span><span class="ident">to_s</span><span class="punct">)</span>
      <span class="keyword">else</span>
        <span class="ident">logger</span><span class="punct">.</span><span class="ident">debug</span><span class="punct">("</span><span class="string"><span class="escape">\e</span>[0;32mSuccess<span class="escape">\e</span>[m</span><span class="punct">")</span>
      <span class="keyword">end</span>
    <span class="keyword">end</span>
  <span class="keyword">end</span>
<span class="keyword">end</span>

<span class="keyword">class </span><span class="class">Test::Unit::TestCase</span>
  <span class="comment"># Transactional fixtures accelerate your tests by wrapping each test method</span>
  <span class="comment"># in a transaction that's rolled back on completion.  This ensures that the</span>
  <span class="comment"># test database remains unchanged so your fixtures don't have to be reloaded</span>
  <span class="comment"># between every test method.  Fewer database queries means faster tests.</span>
  <span class="comment">#</span>
  <span class="comment"># Read Mike Clark's excellent walkthrough at</span>
  <span class="comment">#   http://clarkware.com/cgi/blosxom/2005/10/24#Rails10FastTesting</span>
  <span class="comment">#</span>
  <span class="comment"># Every Active Record database supports transactions except MyISAM tables</span>
  <span class="comment"># in MySQL.  Turn off transactional fixtures in this case; however, if you</span>
  <span class="comment"># don't care one way or the other, switching from MyISAM to InnoDB tables</span>
  <span class="comment"># is recommended.</span>
  <span class="constant">self</span><span class="punct">.</span><span class="ident">use_transactional_fixtures</span> <span class="punct">=</span> <span class="constant">true</span>

  <span class="comment"># Instantiated fixtures are slow, but give you @david where otherwise you</span>
  <span class="comment"># would need people(:david).  If you don't want to migrate your existing</span>
  <span class="comment"># test cases which use the @david style and don't mind the speed hit (each</span>
  <span class="comment"># instantiated fixtures translates to a database query per test method),</span>
  <span class="comment"># then set this back to true.</span>
  <span class="constant">self</span><span class="punct">.</span><span class="ident">use_instantiated_fixtures</span>  <span class="punct">=</span> <span class="constant">false</span>

  <span class="keyword">def </span><span class="method">logger</span>
    <span class="constant">RAILS_DEFAULT_LOGGER</span>
  <span class="keyword">end</span>

  <span class="keyword">def </span><span class="method">log_test_name</span><span class="punct">(</span><span class="ident">test_name</span><span class="punct">=</span><span class="constant">nil</span><span class="punct">)</span>
    <span class="ident">test_name</span> <span class="punct">=</span> <span class="ident">caller</span><span class="punct">[</span><span class="number">0</span><span class="punct">].</span><span class="ident">match</span><span class="punct">(/</span><span class="regex">`(test_[a-z_]+)'$</span><span class="punct">/)</span> <span class="keyword">unless</span> <span class="ident">test_name</span>
    <span class="ident">logger</span><span class="punct">.</span><span class="ident">debug</span> <span class="punct">"</span><span class="string"><span class="escape">\n\e</span>[1m<span class="expr">#{self.class}</span>::<span class="escape">\e</span>[0;31m<span class="expr">#{test_name}</span><span class="escape">\e</span>[m<span class="escape">\n</span></span><span class="punct">"</span>
  <span class="keyword">end</span>
<span class="keyword">end</span>

<span class="keyword">class </span><span class="class">ActionController::Integration::Session</span>
  <span class="keyword">def </span><span class="method">logger</span>
    <span class="constant">RAILS_DEFAULT_LOGGER</span>
  <span class="keyword">end</span>

  <span class="keyword">def </span><span class="method">log_step_name</span><span class="punct">(</span><span class="ident">step_name</span><span class="punct">=</span><span class="constant">nil</span><span class="punct">)</span>
    <span class="ident">step_name</span> <span class="punct">=</span> <span class="ident">caller</span><span class="punct">[</span><span class="number">0</span><span class="punct">].</span><span class="ident">match</span><span class="punct">(/</span><span class="regex">`(test_[a-z_]+)'$</span><span class="punct">/)</span> <span class="keyword">unless</span> <span class="ident">step_name</span>
    <span class="ident">logger</span><span class="punct">.</span><span class="ident">debug</span> <span class="punct">"</span><span class="string"><span class="escape">\n\e</span>[1m<span class="expr">#{step_name}</span><span class="escape">\e</span>[m</span><span class="punct">"</span>
  <span class="keyword">end</span>
<span class="keyword">end</span>
</pre>
            </div>
            <div class="post-metadata">
              to <a href="/tag/ruby" class="tag">ruby</a> <a href="/tag/rails" class="tag">rails</a> <a href="/tag/logging" class="tag">logging</a> <a href="/tag/test" class="tag">test</a> by <a href="/user/Bragi">Bragi</a> on Jun 23, 2006 <b></b>
            </div>
          </div>
        </div>
<a name="post516" id="post516"></a>
        <div id="post516">
          <div class="post">
            <h3 class="post-title"><a href="/posts/show/516">Copy and rename files with wildcards (globs)</a></h3>
            <div class="post-body">
              To copy files jgarner_* to Alias_*:<br>
              <br>
              <pre>
<span class="constant">Dir</span><span class="punct">.</span><span class="ident">glob</span><span class="punct">("</span><span class="string">jgarner_*</span><span class="punct">")</span> <span class="punct">{</span> <span class="punct">|</span><span class="ident">name</span><span class="punct">|</span> `<span class="ident">cp</span> <span class="comment">#{name} #{name.sub(/jgarner_/, "Alias_")}`}</span>

<span class="keyword">or</span>

<span class="ident">ruby</span> <span class="punct">-</span><span class="ident">e</span> <span class="punct">'</span><span class="string">Dir.glob("jgarner_*") { |name| `cp #{name} #{name.sub(/jgarner_/, "Alias_")}`}</span><span class="punct">'</span>

</pre>
<br>
            </div>
            <div class="post-metadata">
              to <a href="/tag/ruby" class="tag">ruby</a> <a href="/tag/rename" class="tag">rename</a> <a href="/tag/glob" class="tag">glob</a> <a href="/tag/copy" class="tag">copy</a> <a href="/tag/Dir" class="tag">Dir</a> by <a href="/user/johnatl">johnatl</a> on Jun 19, 2006 <b><a href="/posts/show/516#comments" class="has-comments">1 Comments</a></b>
            </div>
          </div>
        </div>
<a name="post509" id="post509"></a>
        <div id="post509">
          <div class="post">
            <h3 class="post-title"><a href="/posts/show/509">Copy files matching a regular expression to a new name</a></h3>
            <div class="post-body">
              // copy similar files to a new name given a regular expression in ruby<br>
              <br>
              <pre>
<span class="keyword">for</span> <span class="ident">i</span> <span class="keyword">in</span> `<span class="ident">ls</span> <span class="punct">*</span><span class="ident">_1</span><span class="punct">.</span><span class="ident">png`</span><span class="punct">;</span> <span class="keyword">do</span> <span class="ident">echo</span> <span class="global">$i</span><span class="punct">;</span> <span class="ident">cp</span> <span class="global">$i</span> `<span class="ident">echo</span> <span class="global">$i</span><span class="punct">|</span><span class="ident">ruby</span> <span class="punct">-</span><span class="ident">pe</span> <span class="punct">'</span><span class="string">$_.sub!(/_1/, "_0")</span><span class="punct">'`;</span> <span class="ident">done</span>
</pre>
            </div>
            <div class="post-metadata">
              to <a href="/tag/ruby" class="tag">ruby</a> <a href="/tag/script" class="tag">script</a> <a href="/tag/file" class="tag">file</a> <a href="/tag/rename" class="tag">rename</a> by <a href="/user/sjspig">sjspig</a> on Jun 11, 2006 <b></b>
            </div>
          </div>
        </div>
<a name="post508" id="post508"></a>
        <div id="post508">
          <div class="post">
            <h3 class="post-title"><a href="/posts/show/508">Dynamic time based finder for ActiveRecord</a></h3>
            <div class="post-body">
              I think it's pretty nice. Get all records within a railsified period of time (7.days.ago, 12.months.ago). I can do cool things like Workout.within_12_days or Workout.within_12_hours. Further conditions can be given as a hash, and will be transposed onto the end of the :conditions.<br>
              <br>
              <pre>
<span class="constant">Workout</span><span class="punct">.</span><span class="ident">within_n_units</span><span class="punct">(</span><span class="symbol">:user_id</span> <span class="punct">=></span> <span class="number">12</span><span class="punct">)</span> <span class="comment">#-> Workout.find(:all, :conditions => 'created_at > n.units.ago and user_id = 12')</span>
</pre>
<br>
              <br>
              <pre>
<span class="keyword">class </span><span class="class">Workout</span> <span class="punct"><</span> <span class="constant">ActiveRecord</span><span class="punct">::</span><span class="constant">Base</span>
  <span class="keyword">class </span><span class="punct"><<</span> <span class="constant">self</span>
    <span class="keyword">def </span><span class="method">within_n_temporal_units</span><span class="punct">(</span><span class="ident">number</span><span class="punct">,</span> <span class="ident">units</span><span class="punct">,</span> <span class="ident">further_conds</span><span class="punct">={})</span>
      <span class="ident">conds</span> <span class="punct">=</span> <span class="punct">"</span><span class="string">created_at > '<span class="expr">#{eval("#{number}.#{units}.ago").to_s(:db)}</span>'</span><span class="punct">"</span>
      <span class="ident">further_conds</span><span class="punct">.</span><span class="ident">each</span> <span class="punct">{|</span><span class="ident">key</span><span class="punct">,</span> <span class="ident">val</span><span class="punct">|</span> <span class="ident">conds</span> <span class="punct"><<</span> <span class="punct">"</span><span class="string"> and <span class="expr">#{key}</span> = <span class="expr">#{val}</span></span><span class="punct">"}</span>
      <span class="constant">Workout</span><span class="punct">.</span><span class="ident">find</span><span class="punct">(</span><span class="symbol">:all</span><span class="punct">,</span> <span class="symbol">:conditions</span> <span class="punct">=></span> <span class="ident">conds</span><span class="punct">)</span>
    <span class="keyword">end</span>
    
    <span class="keyword">def </span><span class="method">method_missing</span><span class="punct">(</span><span class="ident">name</span><span class="punct">,</span> <span class="punct">*</span><span class="ident">args</span><span class="punct">)</span>
      <span class="keyword">return</span> <span class="ident">within_n_temporal_units</span><span class="punct">(</span><span class="global">$~</span><span class="punct">[</span><span class="number">1</span><span class="punct">],</span> <span class="global">$~</span><span class="punct">[</span><span class="number">2</span><span class="punct">],</span> <span class="ident">args</span><span class="punct">[</span><span class="number">0</span><span class="punct">]</span> <span class="punct">||</span> <span class="punct">{})</span> <span class="keyword">if</span> <span class="ident">name</span><span class="punct">.</span><span class="ident">to_s</span> <span class="punct">=~</span> <span class="punct">/</span><span class="regex">within_(<span class="escape">\d</span>+)_(<span class="escape">\w</span>+)</span><span class="punct">/</span>
      <span class="keyword">raise</span> <span class="constant">NoMethodError</span><span class="punct">,</span> <span class="punct">"</span><span class="string">undefined method `<span class="expr">#{name}</span>' for <span class="expr">#{self}</span>:Class</span><span class="punct">"</span>
    <span class="keyword">end</span>
  <span class="keyword">end</span>
<span class="keyword">end</span>
</pre>
            </div>
            <div class="post-metadata">
              to <a href="/tag/ruby" class="tag">ruby</a> <a href="/tag/rails" class="tag">rails</a> <a href="/tag/dynamic" class="tag">dynamic</a> <a href="/tag/finder" class="tag">finder</a> <a href="/tag/method_missing" class="tag">method_missing</a> by <a href="/user/kjell">kjell</a> on Jun 10, 2006 <b></b>
            </div>
          </div>
        </div>
<a name="post501" id="post501"></a>
        <div id="post501">
          <div class="post">
            <h3 class="post-title"><a href="/posts/show/501">ruby stored procedures</a></h3>
            <div class="post-body">
              There are alot of reasons to use stored procedures. One of the most compelling reasons is that a system has already been built with stored procedures and interfacing with it cannot be by raw SQL. This situation is mainly caused by DBA’s whose job it is to control the flow of information into and out of the database. In “enterprise” situations this is the norm.<br>
              <br>
              <br>
              <pre>
  <span class="attribute">@connection</span> <span class="punct">=</span> <span class="constant">OCI8</span><span class="punct">.</span><span class="ident">new</span><span class="punct">("</span><span class="string">db_user</span><span class="punct">",</span> <span class="punct">"</span><span class="string">db_password</span><span class="punct">",</span> <span class="punct">"</span><span class="string">db_name</span><span class="punct">")</span>

  <span class="ident">plsql</span> <span class="punct">=</span> <span class="attribute">@connection</span><span class="punct">.</span><span class="ident">parse</span><span class="punct">("</span><span class="string">BEGIN P_MYPROCEDURE.my_method(:out); END;</span><span class="punct">")</span>
  <span class="ident">plsql</span><span class="punct">.</span><span class="ident">bind_param</span><span class="punct">('</span><span class="string">:out</span><span class="punct">',</span> <span class="constant">OCI8</span><span class="punct">::</span><span class="constant">Cursor</span><span class="punct">)</span> 
  <span class="ident">plsql</span><span class="punct">.</span><span class="ident">exec</span>

  <span class="ident">cursor</span> <span class="punct">=</span> <span class="ident">plsql</span><span class="punct">['</span><span class="string">:out</span><span class="punct">']</span>
  <span class="ident">plsql</span><span class="punct">.</span><span class="ident">close</span>

  <span class="ident">x</span> <span class="punct">=</span> <span class="punct">'</span><span class="string"></span><span class="punct">'</span>
  <span class="keyword">while</span> <span class="ident">r</span> <span class="punct">=</span> <span class="ident">cursor</span><span class="punct">.</span><span class="ident">fetch</span><span class="punct">()</span>
    <span class="ident">x</span> <span class="punct">=</span> <span class="ident">x</span> <span class="punct">+</span> <span class="ident">r</span><span class="punct">.</span><span class="ident">join</span><span class="punct">('</span><span class="string">, </span><span class="punct">')</span> <span class="punct">+</span> <span class="punct">'</span><span class="string"><br></span><span class="punct">'</span>
  <span class="keyword">end</span>

  <span class="attribute">@out</span> <span class="punct">=</span> <span class="ident">x</span>

  <span class="attribute">@connection</span><span class="punct">.</span><span class="ident">logout</span>
</pre>
<br>
              <br>
              This code assumes you are using Rails 1.1 as an engine and that you have setup the database.yml for Oracle (10g in this post). The OCI8 object instantiated on the first line is in the OCI8 library which is loaded by Rails, specified in database.yml.<br>
              <br>
              Interfacing with Oracle and its stored procedures pretty much requires some knowledge about Oracle which has some very specific concepts that something like MySQL does not.<br>
              <br>
              First, to pass local variables to the stored procedure’s “in” and “out” variables, you must explicitly “bind” them.<br>
              <br>
              Second is the notion of “cursor”.<br>
              <br>
              Author: hksintl on http://blog.hksintl.com/
            </div>
            <div class="post-metadata">
              to <a href="/tag/ruby" class="tag">ruby</a> <a href="/tag/rails" class="tag">rails</a> <a href="/tag/oracle" class="tag">oracle</a> <a href="/tag/stored_procedures" class="tag">stored_procedures</a> by <a href="/user/xtrim">xtrim</a> on Jun 02, 2006 <b><a href="/posts/show/501#comments" class="has-comments">4 Comments</a></b>
            </div>
          </div>
        </div>
<a name="post485" id="post485"></a>
        <div id="post485">
          <div class="post">
            <h3 class="post-title"><a href="/posts/show/485">Modify acts_as_urlnameable to un-accentuate unicode chars</a></h3>
            <div class="post-body">
              The acts as urlnameable plugin (used to create permalinks) removes accentuated chars by default.<br>
              <br>
              Change the urlnameify method in lib/acts_as_urlnameable.rb:74<br>
              <br>
              <pre>
<span class="keyword">def </span><span class="method">urlnameify</span><span class="punct">(</span><span class="ident">text</span><span class="punct">)</span>
  <span class="ident">t</span> <span class="punct">=</span> <span class="constant">Iconv</span><span class="punct">.</span><span class="ident">new</span><span class="punct">('</span><span class="string">ASCII//TRANSLIT</span><span class="punct">',</span> <span class="punct">'</span><span class="string">utf-8</span><span class="punct">').</span><span class="ident">iconv</span><span class="punct">(</span><span class="ident">text</span><span class="punct">)</span>
  <span class="ident">t</span> <span class="punct">=</span> <span class="ident">t</span><span class="punct">.</span><span class="ident">downcase</span><span class="punct">.</span><span class="ident">strip</span><span class="punct">.</span><span class="ident">gsub</span><span class="punct">(/</span><span class="regex">[^-_<span class="escape">\s</span>[:alnum:]]</span><span class="punct">/,</span> <span class="punct">'</span><span class="string"></span><span class="punct">').</span><span class="ident">squeeze</span><span class="punct">('</span><span class="string"> </span><span class="punct">').</span><span class="ident">tr</span><span class="punct">('</span><span class="string"> </span><span class="punct">',</span> <span class="punct">'</span><span class="string">-</span><span class="punct">')</span>
  <span class="punct">(</span><span class="ident">t</span><span class="punct">.</span><span class="ident">blank?</span><span class="punct">)</span> <span class="punct">?</span> <span class="punct">'</span><span class="string">-</span><span class="punct">'</span> <span class="punct">:</span> <span class="ident">t</span>
<span class="keyword">end</span>
</pre>
            </div>
            <div class="post-metadata">
              to <a href="/tag/ruby" class="tag">ruby</a> <a href="/tag/rails" class="tag">rails</a> <a href="/tag/iconv" class="tag">iconv</a> by <a href="/user/androse">androse</a> on May 20, 2006 <b></b>
            </div>
          </div>
        </div>
<a name="post482" id="post482"></a>
        <div id="post482">
          <div class="post">
            <h3 class="post-title"><a href="/posts/show/482">DRY up empty controller actions</a></h3>
            <div class="post-body">
              Ever create Rails views that don't user the controller at all just to take advantage of an application layout?<br>
              If you have, you may have a lot of code that looks like this:<br>
              <br>
              <br>
              <pre>
<span class="keyword">class </span><span class="class">HelpController</span> <span class="punct"><</span> <span class="constant">ApplicationController</span>
  <span class="keyword">def </span><span class="method">index</span>
  <span class="keyword">end</span>

  <span class="keyword">def </span><span class="method">tutorial</span>
  <span class="keyword">end</span>

  <span class="keyword">def </span><span class="method">faq</span>
  <span class="keyword">end</span>
<span class="keyword">end</span>
</pre>
<br>
              <br>
              Well, there's a simple way to make this a lot cleaner...<br>
              <br>
              <br>
              <pre>
<span class="keyword">class </span><span class="class">ApplicationController</span> <span class="punct"><</span> <span class="constant">ActionController</span><span class="punct">::</span><span class="constant">Base</span>
  <span class="keyword">def </span><span class="method">self.simple_action</span><span class="punct">(*</span><span class="ident">actions</span><span class="punct">)</span>
    <span class="ident">actions</span><span class="punct">.</span><span class="ident">each</span> <span class="punct">{|</span><span class="ident">action</span><span class="punct">|</span> <span class="ident">class_eval</span><span class="punct">("</span><span class="string">def <span class="expr">#{action}</span>; end</span><span class="punct">")}</span>
  <span class="keyword">end</span>
<span class="keyword">end</span>
</pre>
<br>
              Now your controller can look like this instead...<br>
              <br>
              <pre>
<span class="keyword">class </span><span class="class">HelpController</span> <span class="punct"><</span> <span class="constant">ApplicationController</span>
  <span class="ident">simple_action</span> <span class="symbol">:index</span><span class="punct">,</span> <span class="symbol">:tutorial</span><span class="punct">,</span> <span class="symbol">:faq</span>
<span class="keyword">end</span>
</pre>
<br>
            </div>
            <div class="post-metadata">
              to <a href="/tag/ruby" class="tag">ruby</a> <a href="/tag/rails" class="tag">rails</a> <a href="/tag/recipe" class="tag">recipe</a> by <a href="/user/xmlblog">xmlblog</a> on May 19, 2006 <b></b>
            </div>
          </div>
        </div>
<a name="post481" id="post481"></a>
        <div id="post481">
          <div class="post">
            <h3 class="post-title"><a href="/posts/show/481">Recursively add file extensions in OSX using Magic and your own filetypes</a></h3>
            <div class="post-body">
              ExtensionAdder v.1<br>
              <br>
              ExtensionAdder is an OSX ruby script that recursively traverses a folder, adding extensions to approprate files. The script uses the Magic file, but you can extend the behavior by adding your own shell scripts (see the "includes" folder) to grep into files that Magic only classifies as "data".<br>
              <br>
              At this time you have to explicitly state which file types you want to add extensions to.<br>
              <br>
              Download it here<br>
              <br>
              <br>
              Sandon Jurowski<br>
              jurowski@wisc.edu
            </div>
            <div class="post-metadata">
              to <a href="/tag/ruby" class="tag">ruby</a> <a href="/tag/ExtensionAdder" class="tag">ExtensionAdder</a> <a href="/tag/extensions" class="tag">extensions</a> by <a href="/user/jurowski">jurowski</a> on May 18, 2006 <b></b>
            </div>
          </div>
        </div>
<a name="post480" id="post480"></a>
        <div id="post480">
          <div class="post">
            <h3 class="post-title"><a href="/posts/show/480">Make a subversion release</a></h3>
            <div class="post-body">
              Ruby script to make a release from SVN trunk.<br>
              <br>
              Assumes a repository structure of:<br>
              <br>
              /path/to/Trunk<br>
              /path/to/Releases/YYYY-MM-DD--XX<br>
              <br>
              Should be easy enough to modify to suit your needs. Comments welcome :)<br>
              <br>
              Example usage:<br>
              <pre>
<span class="ident">vi</span> <span class="punct">/</span><span class="ident">usr</span><span class="punct">/</span><span class="ident">local</span><span class="punct">/</span><span class="ident">bin</span><span class="punct">/</span><span class="ident">release</span> <span class="punct">(</span><span class="keyword">and</span> <span class="ident">dump</span> <span class="ident">snippet</span> <span class="ident">into</span> <span class="ident">it</span><span class="punct">)</span>
<span class="ident">chmod</span> <span class="punct">+</span><span class="ident">x</span> <span class="punct">/</span><span class="ident">usr</span><span class="punct">/</span><span class="ident">local</span><span class="punct">/</span><span class="ident">bin</span><span class="punct">/</span><span class="ident">release</span>
<span class="ident">cd</span> <span class="punct">/</span><span class="ident">path</span><span class="punct">/</span><span class="ident">to</span><span class="punct">/</span><span class="ident">checked</span><span class="punct">-</span><span class="ident">out</span><span class="punct">-</span><span class="ident">trunk</span>
<span class="ident">release</span>
</pre>
<br>
              <br>
              <pre>
<span class="comment">#!/usr/bin/ruby</span>

<span class="ident">today</span> <span class="punct">=</span> <span class="constant">Time</span><span class="punct">.</span><span class="ident">now</span><span class="punct">.</span><span class="ident">strftime</span><span class="punct">('</span><span class="string">%Y-%m-%d</span><span class="punct">')</span>

<span class="keyword">if</span> `<span class="ident">svn</span> <span class="ident">info`</span><span class="punct">.</span><span class="ident">to_a</span><span class="punct">[</span><span class="number">1</span><span class="punct">]</span> <span class="punct">!~</span> <span class="punct">/</span><span class="regex">^URL: (.*)<span class="escape">\/</span>Trunk$</span><span class="punct">/</span>
        <span class="ident">puts</span> <span class="punct">"</span><span class="string">Repository invalid. Must be in Trunk.</span><span class="punct">"</span>
        <span class="ident">exit</span>
<span class="keyword">end</span>

<span class="ident">repo_url</span> <span class="punct">=</span> <span class="global">$1</span>

<span class="ident">repo</span> <span class="punct">=</span> <span class="ident">repo_url</span><span class="punct">.</span><span class="ident">split</span><span class="punct">('</span><span class="string">/</span><span class="punct">').</span><span class="ident">last</span>

<span class="ident">release_url</span> <span class="punct">=</span> <span class="ident">repo_url</span> <span class="punct">+</span> <span class="punct">"</span><span class="string">/Releases</span><span class="punct">"</span>

<span class="keyword">if</span> `<span class="ident">svn</span> <span class="ident">ls</span> <span class="comment">#{release_url}`.to_a.last =~ /#{today}--(\d+)/</span>
        <span class="ident">num</span> <span class="punct">=</span> <span class="global">$1</span><span class="punct">.</span><span class="ident">to_i</span> <span class="punct">+</span> <span class="number">1</span>
<span class="keyword">else</span>
        <span class="ident">num</span> <span class="punct">=</span> <span class="number">1</span>
<span class="keyword">end</span>

<span class="ident">release</span> <span class="punct">=</span> <span class="punct">"</span><span class="string"><span class="expr">#{today}</span>--<span class="expr">#{num}</span></span><span class="punct">"</span>

<span class="ident">cmd</span> <span class="punct">=</span> <span class="punct">"</span><span class="string">svn copy <span class="expr">#{repo_url}</span>/Trunk <span class="expr">#{release_url}</span>/<span class="expr">#{release}</span> -m 'copy <span class="expr">#{repo}</span> trunk to release <span class="expr">#{release}</span>'</span><span class="punct">"</span>
<span class="ident">puts</span> <span class="ident">cmd</span>
<span class="ident">puts</span>

<span class="ident">print</span> <span class="punct">"</span><span class="string">Execute command? </span><span class="punct">"</span>

<span class="keyword">if</span> <span class="ident">gets</span><span class="punct">.</span><span class="ident">chomp</span><span class="punct">.</span><span class="ident">upcase</span> <span class="punct">!=</span> <span class="punct">'</span><span class="string">Y</span><span class="punct">'</span>
        <span class="ident">puts</span> <span class="punct">"</span><span class="string">Nothing done.</span><span class="punct">"</span>
        <span class="ident">exit</span>
<span class="keyword">end</span>

`<span class="comment">#{cmd}`</span>
<span class="ident">puts</span> <span class="punct">"</span><span class="string">Copied as <span class="expr">#{release}</span>.</span><span class="punct">"</span>
<span class="ident">puts</span> <span class="punct">"</span><span class="string">Execute on the remote machine:</span><span class="punct">"</span>
<span class="ident">puts</span> <span class="punct">"</span><span class="string">svn switch <span class="expr">#{release_url}</span>/<span class="expr">#{release}</span></span><span class="punct">"</span>
</pre>
            </div>
            <div class="post-metadata">
              to <a href="/tag/ruby" class="tag">ruby</a> <a href="/tag/svn" class="tag">svn</a> <a href="/tag/subversion" class="tag">subversion</a> <a href="/tag/release" class="tag">release</a> <a href="/tag/trunk" class="tag">trunk</a> <a href="/tag/repo" class="tag">repo</a> <a href="/tag/repository" class="tag">repository</a> by <a href="/user/Seven.net.nz">Seven.net.nz</a> on May 18, 2006 <b></b>
            </div>
          </div>
        </div>
<a name="post459" id="post459"></a>
        <div id="post459">
          <div class="post">
            <h3 class="post-title"><a href="/posts/show/459">Replacing all shebangs in a rails app</a></h3>
            <div class="post-body">
              <pre>
<span class="ident">perl</span> <span class="punct">-</span><span class="ident">pi</span> <span class="punct">-</span><span class="ident">e</span> <span class="punct">'</span><span class="string">s|^#!/.*|#!/usr/bin/env ruby|;</span><span class="punct">'</span> <span class="ident">script</span><span class="punct">/*</span> <span class="ident">script</span><span class="punct">/*/</span><span class="regex">* public</span><span class="punct">/</span><span class="ident">dispatch</span><span class="punct">.*</span>
</pre>
            </div>
            <div class="post-metadata">
              to <a href="/tag/ruby" class="tag">ruby</a> <a href="/tag/rails" class="tag">rails</a> <a href="/tag/perl" class="tag">perl</a> <a href="/tag/regex" class="tag">regex</a> <a href="/tag/shell" class="tag">shell</a> <a href="/tag/shebang" class="tag">shebang</a> by <a href="/user/cch">cch</a> on May 08, 2006 <b></b>
            </div>
          </div>
        </div>
<a name="post451" id="post451"></a>
        <div id="post451">
          <div class="post">
            <h3 class="post-title"><a href="/posts/show/451">Camel case a string ( removing accents )</a></h3>
            <div class="post-body">
              # input str = " j'ai écris l'œuvre de ma vie "<br>
              # output str :"JAiEcrisLOeuvreDeMaVie"<br>
              <br>
              <pre>
<span class="ident">accents</span> <span class="punct">=</span> <span class="punct">{</span> <span class="punct">['</span><span class="string">á</span><span class="punct">','</span><span class="string">à</span><span class="punct">','</span><span class="string">â</span><span class="punct">','</span><span class="string">ä</span><span class="punct">','</span><span class="string">ã</span><span class="punct">','</span><span class="string">Ã</span><span class="punct">','</span><span class="string">Ä</span><span class="punct">','</span><span class="string">Â</span><span class="punct">','</span><span class="string">À</span><span class="punct">']</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">a</span><span class="punct">',</span>
  <span class="punct">['</span><span class="string">é</span><span class="punct">','</span><span class="string">è</span><span class="punct">','</span><span class="string">ê</span><span class="punct">','</span><span class="string">ë</span><span class="punct">','</span><span class="string">Ë</span><span class="punct">','</span><span class="string">É</span><span class="punct">','</span><span class="string">È</span><span class="punct">','</span><span class="string">Ê</span><span class="punct">']</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">e</span><span class="punct">',</span>
  <span class="punct">['</span><span class="string">í</span><span class="punct">','</span><span class="string">ì</span><span class="punct">','</span><span class="string">î</span><span class="punct">','</span><span class="string">ï</span><span class="punct">','</span><span class="string">I</span><span class="punct">','</span><span class="string">Î</span><span class="punct">','</span><span class="string">Ì</span><span class="punct">']</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">i</span><span class="punct">',</span>
  <span class="punct">['</span><span class="string">ó</span><span class="punct">','</span><span class="string">ò</span><span class="punct">','</span><span class="string">ô</span><span class="punct">','</span><span class="string">ö</span><span class="punct">','</span><span class="string">õ</span><span class="punct">','</span><span class="string">Õ</span><span class="punct">','</span><span class="string">Ö</span><span class="punct">','</span><span class="string">Ô</span><span class="punct">','</span><span class="string">Ò</span><span class="punct">']</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">o</span><span class="punct">',</span>
  <span class="punct">['</span><span class="string">œ</span><span class="punct">']</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">oe</span><span class="punct">',</span>
  <span class="punct">['</span><span class="string">ß</span><span class="punct">']</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">ss</span><span class="punct">',</span>
  <span class="punct">['</span><span class="string">ú</span><span class="punct">','</span><span class="string">ù</span><span class="punct">','</span><span class="string">û</span><span class="punct">','</span><span class="string">ü</span><span class="punct">','</span><span class="string">U</span><span class="punct">','</span><span class="string">Û</span><span class="punct">','</span><span class="string">Ù</span><span class="punct">']</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">u</span><span class="punct">'</span>
  <span class="punct">}</span>
<span class="ident">accents</span><span class="punct">.</span><span class="ident">each</span> <span class="keyword">do</span> <span class="punct">|</span><span class="ident">ac</span><span class="punct">,</span><span class="ident">rep</span><span class="punct">|</span>
  <span class="ident">ac</span><span class="punct">.</span><span class="ident">each</span> <span class="keyword">do</span> <span class="punct">|</span><span class="ident">s</span><span class="punct">|</span>
    <span class="ident">str</span><span class="punct">.</span><span class="ident">gsub!</span><span class="punct">(</span><span class="ident">s</span><span class="punct">,</span> <span class="ident">rep</span><span class="punct">)</span>
  <span class="keyword">end</span>
<span class="keyword">end</span>
<span class="ident">str</span><span class="punct">.</span><span class="ident">gsub!</span><span class="punct">(/</span><span class="regex">[^a-zA-Z_<span class="escape">\-</span> ]</span><span class="punct">/,"</span><span class="string"> </span><span class="punct">")</span>
<span class="ident">str</span> <span class="punct">=</span> <span class="punct">"</span><span class="string"> </span><span class="punct">"</span> <span class="punct">+</span> <span class="ident">str</span><span class="punct">.</span><span class="ident">split</span><span class="punct">.</span><span class="ident">join</span><span class="punct">("</span><span class="string"> </span><span class="punct">")</span>
<span class="ident">str</span><span class="punct">.</span><span class="ident">gsub!</span><span class="punct">(/</span><span class="regex"> (.)</span><span class="punct">/)</span> <span class="punct">{</span> <span class="global">$1</span><span class="punct">.</span><span class="ident">upcase</span> <span class="punct">}</span>
</pre>
            </div>
            <div class="post-metadata">
              to <a href="/tag/ruby" class="tag">ruby</a> <a href="/tag/string" class="tag">string</a> by <a href="/user/Gazoduc">Gazoduc</a> on May 04, 2006 <b></b>
            </div>
          </div>
        </div>
<a name="post447" id="post447"></a>
        <div id="post447">
          <div class="post">
            <h3 class="post-title"><a href="/posts/show/447">Convert numbers to words</a></h3>
            <div class="post-body">
              Ugly code. <strike>But it works.</strike> If you have something better, then post it.<br>
              <br>
              This code is probably (definitely :-) buggy, so if you want to get real work done, just use the Linguistics gem instead.<br>
              <br>
              <pre>
<span class="keyword">class </span><span class="class">Number</span>
  
  <span class="keyword">def </span><span class="method">self.to_words</span><span class="punct">(</span><span class="ident">number</span><span class="punct">)</span>
    <span class="constant">Number</span><span class="punct">.</span><span class="ident">new</span><span class="punct">.</span><span class="ident">to_s</span><span class="punct">(</span><span class="ident">number</span><span class="punct">)</span>
  <span class="keyword">end</span>
  
  <span class="keyword">def </span><span class="method">self.commify</span><span class="punct">(</span><span class="ident">number</span><span class="punct">)</span>
    <span class="punct">(</span><span class="ident">s</span><span class="punct">=</span><span class="ident">number</span><span class="punct">.</span><span class="ident">to_s</span><span class="punct">;</span><span class="ident">x</span><span class="punct">=</span><span class="ident">s</span><span class="punct">.</span><span class="ident">length</span><span class="punct">;</span><span class="ident">s</span><span class="punct">).</span><span class="ident">rjust</span><span class="punct">(</span><span class="ident">x</span><span class="punct">+(</span><span class="number">3</span><span class="punct">-(</span><span class="ident">x</span><span class="punct">%</span><span class="number">3</span><span class="punct">))).</span><span class="ident">gsub</span><span class="punct">(/</span><span class="regex">(<span class="escape">\d</span>)(?=<span class="escape">\d</span>{3}+(<span class="escape">\.\d</span>*)?$)</span><span class="punct">/,'</span><span class="string">\1,</span><span class="punct">')</span>
  <span class="keyword">end</span>
    
  <span class="keyword">def </span><span class="method">initialize</span>
    <span class="attribute">@unit</span> <span class="punct">=</span> <span class="punct">%w[</span><span class="string">zero one two three four five six seven eight nine</span><span class="punct">]</span>
    <span class="attribute">@teen</span> <span class="punct">=</span> <span class="punct">%w[</span><span class="string">ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen</span><span class="punct">]</span>
    <span class="attribute">@tens</span> <span class="punct">=</span> <span class="punct">%w[</span><span class="string">zero ten twenty thirty fourty fifty sixty seventy eighty ninety</span><span class="punct">]</span>
    <span class="attribute">@qtys</span> <span class="punct">=</span> <span class="punct">%w[</span><span class="string">hundred thousand million billion trillion quadrillion quintillion</span><span class="punct">]</span>
    <span class="attribute">@zero</span> <span class="punct">=</span> <span class="punct">["</span><span class="string">zero</span><span class="punct">"]</span>
    <span class="attribute">@hundred</span> <span class="punct">=</span> <span class="punct">"</span><span class="string">hundred</span><span class="punct">"</span>
    <span class="attribute">@sepr</span> <span class="punct">=</span> <span class="punct">"</span><span class="string">and</span><span class="punct">"</span>
  <span class="keyword">end</span>
    
  <span class="keyword">def </span><span class="method">to_s</span><span class="punct">(</span><span class="ident">number</span><span class="punct">)</span>
    <span class="ident">out</span> <span class="punct">=</span> <span class="ident">quantify</span><span class="punct">(</span><span class="ident">number</span><span class="punct">).</span><span class="ident">flatten</span>
    <span class="keyword">for</span> <span class="ident">x</span> <span class="keyword">in</span> <span class="number">0</span> <span class="punct">..</span> <span class="ident">out</span><span class="punct">.</span><span class="ident">length</span> <span class="punct">-</span> <span class="number">1</span>
      <span class="ident">out</span><span class="punct">[</span><span class="ident">x</span><span class="punct">]</span> <span class="punct">=</span> <span class="constant">nil</span> <span class="keyword">if</span> <span class="ident">out</span><span class="punct">[</span><span class="ident">x</span><span class="punct">]</span> <span class="punct">==</span> <span class="attribute">@sepr</span> <span class="punct">&&</span> <span class="ident">out</span><span class="punct">[</span><span class="ident">x</span><span class="punct">+</span><span class="number">1</span><span class="punct">]</span> <span class="punct">==</span> <span class="attribute">@sepr</span>
    <span class="keyword">end</span>
    <span class="ident">out</span><span class="punct">.</span><span class="ident">compact!</span>
    <span class="ident">out</span> <span class="punct">=</span> <span class="attribute">@zero</span> <span class="keyword">if</span> <span class="ident">out</span><span class="punct">.</span><span class="ident">length</span> <span class="punct">==</span> <span class="number">1</span> <span class="punct">&&</span> <span class="ident">out</span><span class="punct">[</span><span class="number">0</span><span class="punct">]</span> <span class="punct">==</span> <span class="attribute">@sepr</span>
    <span class="ident">out</span><span class="punct">.</span><span class="ident">pop</span> <span class="keyword">while</span> <span class="ident">out</span><span class="punct">.</span><span class="ident">last</span> <span class="punct">==</span> <span class="attribute">@sepr</span>
    <span class="ident">out</span><span class="punct">.</span><span class="ident">shift</span> <span class="keyword">while</span> <span class="ident">out</span><span class="punct">.</span><span class="ident">first</span> <span class="punct">==</span> <span class="attribute">@sepr</span>    
    <span class="ident">out</span><span class="punct">.</span><span class="ident">join</span><span class="punct">('</span><span class="string"> </span><span class="punct">').</span><span class="ident">gsub</span><span class="punct">(/</span><span class="regex"> ,</span><span class="punct">/,'</span><span class="string">,</span><span class="punct">')</span>
  <span class="keyword">end</span>
        
  <span class="ident">private</span> 
  
  <span class="keyword">def </span><span class="method">padded_groups</span><span class="punct">(</span><span class="ident">v</span><span class="punct">)</span>
    <span class="ident">out</span> <span class="punct">=</span> <span class="punct">[]</span>
    <span class="ident">padded</span> <span class="punct">=</span> <span class="punct">(</span><span class="ident">s</span><span class="punct">=</span><span class="ident">v</span><span class="punct">.</span><span class="ident">to_s</span><span class="punct">;</span><span class="ident">x</span><span class="punct">=</span><span class="ident">s</span><span class="punct">.</span><span class="ident">length</span><span class="punct">;</span><span class="ident">s</span><span class="punct">).</span><span class="ident">rjust</span><span class="punct">(</span><span class="ident">x</span><span class="punct">+(</span><span class="number">3</span><span class="punct">-(</span><span class="ident">x</span><span class="punct">%</span><span class="number">3</span><span class="punct">))).</span><span class="ident">gsub</span><span class="punct">(/</span><span class="regex"></span><span class="punct">/,'</span><span class="string">0</span><span class="punct">')</span>
    <span class="ident">padded</span><span class="punct">.</span><span class="ident">scan</span><span class="punct">(/</span><span class="regex">.{3}</span><span class="punct">/)</span>
  <span class="keyword">end</span>
  
  <span class="keyword">def </span><span class="method">wordify</span><span class="punct">(</span><span class="ident">v</span><span class="punct">)</span>
    <span class="ident">out</span> <span class="punct">=</span> <span class="punct">[]</span>
    <span class="ident">zero</span> <span class="punct">=</span> <span class="punct">'</span><span class="string">0</span><span class="punct">'[</span><span class="number">0</span><span class="punct">]</span>
    <span class="ident">h</span><span class="punct">,</span> <span class="ident">t</span><span class="punct">,</span> <span class="ident">u</span> <span class="punct">=</span> <span class="ident">v</span><span class="punct">[</span><span class="number">0</span><span class="punct">]</span> <span class="punct">-</span> <span class="ident">zero</span><span class="punct">,</span> <span class="ident">v</span><span class="punct">[</span><span class="number">1</span><span class="punct">]</span> <span class="punct">-</span> <span class="ident">zero</span><span class="punct">,</span> <span class="ident">v</span><span class="punct">[</span><span class="number">2</span><span class="punct">]</span> <span class="punct">-</span> <span class="ident">zero</span>
    <span class="keyword">if</span> <span class="ident">h</span> <span class="punct">!=</span> <span class="number">0</span>
      <span class="ident">out</span> <span class="punct"><<</span> <span class="attribute">@unit</span><span class="punct">[</span><span class="ident">h</span><span class="punct">]</span>
      <span class="ident">out</span> <span class="punct"><<</span> <span class="attribute">@hundred</span>
    <span class="keyword">end</span>
    <span class="ident">out</span> <span class="punct"><<</span> <span class="attribute">@sepr</span> <span class="keyword">if</span> <span class="ident">h</span> <span class="punct">!=</span> <span class="number">0</span> <span class="punct">&&</span> <span class="punct">(</span><span class="ident">t</span> <span class="punct">!=</span> <span class="number">0</span> <span class="punct">||</span> <span class="ident">u</span> <span class="punct">!=</span> <span class="number">0</span><span class="punct">)</span>
    <span class="ident">out</span> <span class="punct"><<</span> <span class="attribute">@sepr</span> <span class="keyword">if</span> <span class="ident">h</span> <span class="punct">==</span> <span class="number">0</span> <span class="punct">&&</span> <span class="ident">t</span> <span class="punct">==</span> <span class="number">0</span> <span class="punct">&&</span> <span class="ident">u</span> <span class="punct">!=</span> <span class="number">0</span>
    <span class="keyword">if</span> <span class="ident">t</span> <span class="punct">==</span> <span class="number">1</span>
      <span class="ident">out</span> <span class="punct"><<</span> <span class="attribute">@teen</span><span class="punct">[</span><span class="ident">u</span><span class="punct">]</span>
    <span class="keyword">else</span>
      <span class="ident">out</span> <span class="punct"><<</span> <span class="attribute">@tens</span><span class="punct">[</span><span class="ident">t</span><span class="punct">]</span> <span class="keyword">if</span> <span class="ident">t</span> <span class="punct">!=</span> <span class="number">0</span>
      <span class="ident">out</span> <span class="punct"><<</span> <span class="attribute">@unit</span><span class="punct">[</span><span class="ident">u</span><span class="punct">]</span> <span class="keyword">if</span> <span class="ident">u</span> <span class="punct">!=</span> <span class="number">0</span>
    <span class="keyword">end</span>
    <span class="keyword">return</span> <span class="ident">out</span>
  <span class="keyword">end</span>
  
  <span class="keyword">def </span><span class="method">quantify</span><span class="punct">(</span><span class="ident">v</span><span class="punct">)</span>
    <span class="ident">v</span> <span class="punct">=</span> <span class="ident">padded_groups</span><span class="punct">(</span><span class="ident">v</span><span class="punct">).</span><span class="ident">reverse</span>
    <span class="ident">pos</span> <span class="punct">=</span> <span class="ident">v</span><span class="punct">.</span><span class="ident">length</span> <span class="punct">-</span> <span class="number">1</span>
    <span class="ident">out</span> <span class="punct">=</span> <span class="punct">[]</span>
    <span class="keyword">while</span> <span class="ident">pos</span> <span class="punct">>=</span> <span class="number">0</span>
      <span class="ident">word</span> <span class="punct">=</span> <span class="ident">wordify</span><span class="punct">(</span><span class="ident">v</span><span class="punct">[</span><span class="ident">pos</span><span class="punct">])</span>
      <span class="keyword">if</span> <span class="ident">word</span><span class="punct">[</span><span class="number">0</span><span class="punct">]</span> <span class="punct">!=</span> <span class="constant">nil</span>
        <span class="ident">out</span> <span class="punct"><<</span> <span class="ident">word</span>
        <span class="ident">out</span> <span class="punct"><<</span> <span class="attribute">@qtys</span><span class="punct">[</span><span class="ident">pos</span><span class="punct">]</span> <span class="keyword">if</span> <span class="ident">pos</span> <span class="punct">!=</span> <span class="number">0</span>                
      <span class="keyword">else</span>
        <span class="ident">out</span> <span class="punct"><<</span> <span class="attribute">@sepr</span>
      <span class="keyword">end</span>
      <span class="ident">pos</span> <span class="punct">-=</span> <span class="number">1</span>
    <span class="keyword">end</span>
    <span class="keyword">return</span> <span class="ident">out</span>
  <span class="keyword">end</span>

<span class="keyword">end</span>

<span class="comment"># for number in [</span>
<span class="comment">#     0, </span>
<span class="comment">#     1, </span>
<span class="comment">#     3, </span>
<span class="comment">#     11, </span>
<span class="comment">#     100,</span>
<span class="comment">#     1000, </span>
<span class="comment">#     1001, </span>
<span class="comment">#     1100, </span>
<span class="comment">#     1101, </span>
<span class="comment">#     1_000_001, </span>
<span class="comment">#     8_000_000_000, </span>
<span class="comment">#     8_000_000_001, </span>
<span class="comment">#     4_567_890_923, </span>
<span class="comment">#     6_804_567_890_903, </span>
<span class="comment">#     5_006_804_567_890_903</span>
<span class="comment">#   ]</span>
<span class="comment">#   print "#{Number.commify(number)}: #{Number.to_words(number)}\n"</span>
<span class="comment"># end</span>
</pre>
            </div>
            <div class="post-metadata">
              to <a href="/tag/ruby" class="tag">ruby</a> by <a href="/user/incognito">incognito</a> on Apr 30, 2006 <b><a href="/posts/show/447#comments" class="has-comments">3 Comments</a></b>
            </div>
          </div>
        </div>
<a name="post389" id="post389"></a>
        <div id="post389">
          <div class="post">
            <h3 class="post-title"><a href="/posts/show/389">Substitute for the :spacer_template option to rail's "render" method</a></h3>
            <div class="post-body">
              when working with the :collection option, it seems silly to have to have an entire file just for a spacer, which would probably just be something like "<hr />" for most, so this is a great substitute for
              <pre><span class="punct"><%=</span><span class="string"> render :partial </span><span class="punct">=></span> <span class="punct">"</span><span class="string">thing</span><span class="punct">",</span> <span class="symbol">:collection</span> <span class="punct">=></span> <span class="attribute">@coll</span><span class="punct">,</span> <span class="symbol">:spacer_template</span> <span class="punct">=></span> <span class="punct">"</span><span class="string">filename_to_file_with_hr_inside_it</span><span class="punct">"</span> <span class="punct">%></span><span class="string"></span></pre>
<br>
              <br>
              New version with code embedded:<br>
              <pre>
  <span class="punct"><%=</span><span class="string"> @coll.map { |item| render :partial </span><span class="punct">=></span> <span class="punct">"</span><span class="string">thing</span><span class="punct">",</span> <span class="symbol">:locals</span> <span class="punct">=></span> <span class="punct">{</span><span class="symbol">:thing</span> <span class="punct">=></span> <span class="ident">item</span><span class="punct">}</span> <span class="punct">}.</span><span class="ident">join</span><span class="punct">("</span><span class="string"><hr /></span><span class="punct">")</span> <span class="punct">%></span><span class="string"><span class="normal">
</span></span></pre>
            </div>
            <div class="post-metadata">
              to <a href="/tag/ruby" class="tag">ruby</a> <a href="/tag/rails" class="tag">rails</a> <a href="/tag/erb" class="tag">erb</a> by <a href="/user/jenna">jenna</a> on Apr 12, 2006 <b><a href="/posts/show/389#comments" class="has-comments">1 Comments</a></b>
            </div>
          </div>
        </div>
      </div>
      <div class="box grey paginator" style="text-align: center; color: #fff">
        <div style="float: left">
          <a href="/tags/ruby?page=1">« Newer Snippets</a>
        </div>
        <div style="float: right">
          <a href="/tags/ruby?page=3">Older Snippets »</a>
        </div>Showing 21-40 of 70 total<br>
        <div style="margin-top: 8px;">
          <form action="#">
            <select style="width: 250px" onchange="JumpToIt(this)">
              <option value="#post559">
                Changed File Analysis
              </option>
              <option value="#post556">
                Currency Converter
              </option>
              <option value="#post555">
                Decrypt a File *Blowfish*
              </option>
              <option value="#post554">
                Encrypt a File *Blowfish*
              </option>
              <option value="#post553">
                Simple Temperature Converter
              </option>
              <option value="#post548">
                update a working copy and all externals in parallel
              </option>
              <option value="#post547">
                Rake task that adds all unversioned files to the repository
              </option>
              <option value="#post522">
                Test helper for colorfull logging
              </option>
              <option value="#post516">
                Copy and rename files with wildcards (globs)
              </option>
              <option value="#post509">
                Copy files matching a regular expression to a new name
              </option>
              <option value="#post508">
                Dynamic time based finder for ActiveRecord
              </option>
              <option value="#post501">
                ruby stored procedures
              </option>
              <option value="#post485">
                Modify acts_as_urlnameable to un-accentuate unicode chars
              </option>
              <option value="#post482">
                DRY up empty controller actions
              </option>
              <option value="#post481">
                Recursively add file extensions in OSX using Magic and your own filetypes
              </option>
              <option value="#post480">
                Make a subversion release
              </option>
              <option value="#post459">
                Replacing all shebangs in a rails app
              </option>
              <option value="#post451">
                Camel case a string ( removing accents )
              </option>
              <option value="#post447">
                Convert numbers to words
              </option>
              <option value="#post389">
                Substitute for the :spacer_template option to rail's "render" method
              </option>
            </select>
          </form>
        </div>
      </div>
    </div>
<br style="clear: both">
    <div id="footer">
      <p>Snippets (<a href="#">source code soon to be available</a>) developed by Peter Cooper and powered by Ruby On Rails</p>
    </div>
  </div>
</body>
</html>