This article will include many usefull examples. Let's enjoy Ruby! 
HTTP Client
Here is am example shows how to write HTTP client with Ruby.
require 'net/http'
def fetch(loc, port, url)
z=nil
h=Net::HTTP.new(loc,port)
begin
resp, data = h.get(url,z)
puts "Code = #{resp.code} #{resp.message}"
resp.each {|key, val| printf "%-14s = %-40.40s\n", key, val}
p data
rescue Net::ProtoFatalError => detail
head = detail.data
head.each {|key,val| puts "#{key} #{val}"}
if head.code=="404"
puts "File not Found"
elsif head.code=="401"
print "Authorization Required\n User name?"
gets
uname=$_.chomp
print "Password?"
gets
pwd=$_.chomp
unpwd=uname + ":" + pwd
puts unpwd
hval=[unpwd].pack("m")
z={'Authorization' => 'Basic ' + hval}
retry
end
rescue SystemCallError
puts "Can't connect"
end
end

fetch('www.google.com', 80, '/')
Send email
Send email with Ruby:
1 require 'net/smtp'
2 SMTP_HOST = "192.168.60.99"
3
4 def send(from, to, subject, msg)
5 mail = "To: #{to}\r\n" +
6 "From: #{from}\r\n" +
7 "Subject: #{subject}\r\n" +
8 "\r\n" +
9 msg
10
11 Net::SMTP.start(SMTP_HOST) do |smtp|
12 smtp.send_mail(mail, from, to)
13 end
14 end
15
16 from = "blake@192.168.60.99"
17 to = ["blake@192.168.60.99"]
18 send(from, to, "test", "Just a test!\ntest")
Notice:
1. 'mail' is the email body, it use "\r\n" to separate the mail header and mail context. So if you only want to send context without header, you should write: "mail = "\r\n" + msg". Otherwise your email will lost the context.
Calculate the total line number of files in one folder
This is one small tools to get the total file line number of on folder.
1
POST_FIX = %w{java jsp html xml properties}
2
EXCLUDE_DIR = %w{CVS}
3
$displayStr = ""
4
$fileReg = ""
5
$dirReg = "\\.|\\.\\.|"
6
7
def sumLine(fileName)
8
file = open fileName
9
begin
10
while file.gets()
11
end
12
ensure
13
file.close
14
end
15
$.
16
end
17
18
def iteDir(name, level=0)
19
lines = 0
20
dir = Dir.open name
21
rex = /\. + "java" +$|\.jsp$|\.html$/
22
begin
23
dir.each do |fileName|
24
fileName = dir.path + '/' + fileName
25
if File.ftype(fileName) =~ /directory/
26
if not fileName =~ Regexp.new($dirReg)
27
lines += iteDir(fileName, level+1)
28
else
29
next
30
end
31
elsif fileName =~ Regexp.new($fileReg)
32
lines += sumLine(fileName)
33
end
34
end
35
ensure
36
dir.close
37
end
38
str = ""
39
for i in 0..(level-1)
40
str += "\t|"
41
end
42
if level != 0
43
str += "---"
44
end
45
$displayStr = "#{str}#{name}\t#{lines} lines\n#{$displayStr}"
46
lines
47
end
48
49
POST_FIX.each do |postfix|
50
$fileReg += "\.#{postfix}$|"
51
end
52
$fileReg = $fileReg.chop
53
54
EXCLUDE_DIR.each do |excludeDir|
55
$dirReg += "^#{excludeDir}$|"
56
end
57
$dirReg = $dirReg.chop
58
59
print "Total #{iteDir("E:/_MyWorkSpace/IDEA_Proj")} lines\n"
60
print $displayStr
Keystone:
1. Ruby I/O access. Dir and File
2. Regexp & String -> Regexp
3. Some kinds of variables
4. Array operation
Technorati Tags: Ruby
