Ruby Tips: Difference between revisions
mNo edit summary |
|||
(13 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
== Shuffle a word == | |||
The same technique to shuffle an array of numbers can be used to shuffle words. This is great if you want to scramble words, as in creating anagram puzzles. | |||
<syntaxhighlight lang="ruby"> | |||
'anagram'.split(//).shuffle.join | |||
=> "gnaarma" | |||
</syntaxhighlight> | |||
== Shuffle a list of numbers == | |||
<geshi lang="ruby"> | |||
(1..14).to_a.sort {rand <=> 0.5} | |||
=> [14, 8, 1, 9, 3, 10, 5, 11, 7, 12, 4, 13, 2, 6] | |||
# or | |||
(1..14).to_a.shuffle | |||
=> [2, 5, 8, 12, 4, 3, 6, 13, 7, 11, 10, 1, 9, 14] | |||
</geshi> | |||
== Rename files == | |||
<geshi lang="bash"> | |||
for f in `ls`; do mv -u $f $(ruby -e "puts '$f'.gsub('14','13')"); done | |||
</geshi> | |||
== Check CLASSPATH == | |||
<geshi lang="ruby"> | |||
#!/bin/env ruby | |||
# | |||
# Checks to make sure all the entries on the classpath are valid | |||
# We only want to emit color codes if we're outputting to a terminal. If this is getting piped into grep or less, we'll ignore these | |||
red=STDOUT.isatty ? "\e[1;31m" :"" | |||
normal=STDOUT.isatty ? "\e[0;0m" : "" | |||
cp = ENV['CLASSPATH'] | |||
if cp == nil then | |||
STDERR.puts "No CLASSPATH set" | |||
exit 1 | |||
else | |||
# We'll assume a Windows CP. We could do something ticky, but we have to be very tricky, because we're probably in Cygwin | |||
cp.split(';').each do |file| | |||
if !File.readable?(file) then | |||
STDERR.puts "Warning: Classpath file #{red}#{file}#{normal} can't be read" | |||
end | |||
end | |||
end | |||
</geshi> | |||
== nextPrime == | |||
Short script to return the next prime number. | |||
<geshi lang="ruby"> | |||
#!/bin/env ruby | |||
def isPrime(n) | |||
prime = true | |||
3.step(Math::sqrt(n), 2) do |i| | |||
if (n % i == 0) then | |||
prime = false | |||
break | |||
end | |||
end | |||
if (( n%2 !=0 && prime && n > 2) || n == 2) then | |||
return true | |||
else | |||
return false | |||
end | |||
end | |||
i = ARGV[0].to_i | |||
while !isPrime(i) | |||
i += 1 | |||
end | |||
puts i | |||
</geshi> | |||
== [[Colorize Glimpse]] == | |||
== Tab Completion in IRb == | |||
Add this to your .irbrc. | |||
<geshi lang="ruby"> | |||
require 'irb/completion' | |||
ARGV.concat [ "--readline", "--prompt-mode", "simple" ] | |||
</geshi> | |||
Thanks [[http://whytheluckystiff.net/clog/ruby/tabCompletionInIRb.html why]]. | |||
== [[Ruby Patch to Zip]] == | |||
A script to take an Eclipse generated patch file, and zip every file which is referenced in the patch. | |||
== Ruby gems on Cygwin == | == Ruby gems on Cygwin == | ||
aka how to fix ''ruby: no such file to load -- ubygem (LoadError)'' or ''/usr/bin/ruby: no such file to load -- ubygems (LoadError)'' | aka how to fix ''ruby: no such file to load -- ubygem (LoadError)'' or ''/usr/bin/ruby: no such file to load -- ubygems (LoadError)'' | ||
Line 9: | Line 107: | ||
$ ruby setup.rb | $ ruby setup.rb | ||
</geshi> | </geshi> | ||
== [[Ruby detab]] == | == [[Ruby detab]] == | ||
Line 39: | Line 133: | ||
&lt;a href=&quot;foo&quot;&gt; | &lt;a href=&quot;foo&quot;&gt; | ||
</pre> | </pre> | ||
[[Category:Ruby|Tips]] |
Latest revision as of 23:12, 10 December 2011
Shuffle a word
The same technique to shuffle an array of numbers can be used to shuffle words. This is great if you want to scramble words, as in creating anagram puzzles.
'anagram'.split(//).shuffle.join
=> "gnaarma"
Shuffle a list of numbers
<geshi lang="ruby"> (1..14).to_a.sort {rand <=> 0.5} => [14, 8, 1, 9, 3, 10, 5, 11, 7, 12, 4, 13, 2, 6]
- or
(1..14).to_a.shuffle => [2, 5, 8, 12, 4, 3, 6, 13, 7, 11, 10, 1, 9, 14] </geshi>
Rename files
<geshi lang="bash"> for f in `ls`; do mv -u $f $(ruby -e "puts '$f'.gsub('14','13')"); done </geshi>
Check CLASSPATH
<geshi lang="ruby">
- !/bin/env ruby
- Checks to make sure all the entries on the classpath are valid
- We only want to emit color codes if we're outputting to a terminal. If this is getting piped into grep or less, we'll ignore these
red=STDOUT.isatty ? "\e[1;31m" :"" normal=STDOUT.isatty ? "\e[0;0m" : ""
cp = ENV['CLASSPATH']
if cp == nil then
STDERR.puts "No CLASSPATH set" exit 1
else
# We'll assume a Windows CP. We could do something ticky, but we have to be very tricky, because we're probably in Cygwin cp.split(';').each do |file| if !File.readable?(file) then STDERR.puts "Warning: Classpath file #{red}#{file}#{normal} can't be read" end end
end </geshi>
nextPrime
Short script to return the next prime number. <geshi lang="ruby">
- !/bin/env ruby
def isPrime(n)
prime = true 3.step(Math::sqrt(n), 2) do |i| if (n % i == 0) then prime = false break end end if (( n%2 !=0 && prime && n > 2) || n == 2) then return true else return false end
end
i = ARGV[0].to_i
while !isPrime(i)
i += 1
end
puts i </geshi>
Colorize Glimpse
Tab Completion in IRb
Add this to your .irbrc.
<geshi lang="ruby">
require 'irb/completion' ARGV.concat [ "--readline", "--prompt-mode", "simple" ]
</geshi>
Thanks [why].
Ruby Patch to Zip
A script to take an Eclipse generated patch file, and zip every file which is referenced in the patch.
Ruby gems on Cygwin
aka how to fix ruby: no such file to load -- ubygem (LoadError) or /usr/bin/ruby: no such file to load -- ubygems (LoadError) <geshi lang="bash"> $ unset RUBYOPT $ cd /tmp/ $ wget http://rubyforge.org/frs/download.php/20989/rubygems-0.9.4.tgz $ tar -zxf rubygems-0.9.4.tgz $ cd rubygems-0.9.4 $ ruby setup.rb </geshi>
Ruby detab
A script for removing tabs from source files
Ruby Sybase Solaris
Error Messages
irb
Setup tab completion and history here: http://wiki.rubygarden.org/Ruby/page/show/Irb/TipsAndTricks
Ruby Sybase Install
Escape invalid XML characters.
This is useful for running stuff through before posting it to the wiki.
echo "<a href=\"foo\">" | ruby -pe 'gsub!(/\&/, "&"); gsub!(/"/, """); gsub!(/</, "<"); gsub!(/>/, ">"); ' <a href="foo">