Seasons.NET

ちょっとした技術ブログです

はじめてのRubyへのすすめ

id:fkmさんがRubyを始めたみたいなので、
ちょっとカスタマイズ。
forで回すよりは、timesで回した方がコードとしては、すんなり読めるし、
式展開を使うと楽だと思う。

 1 
 2 def puts_contents(num , count)
 3   puts "<table border=\"1\">"
 4   count.times{ |index| print "<tr><td><a href=\"#{num}-#{index+1}.cpp\">#{num}-#{index+1}.cpp</a></td></tr>\n" }
 5   puts "</table>"
 6 end
 7 
 8 def print_table(n, item)
 9   puts "<table border=\"1\">"
10   for i in 1..item
11     printf("<tr><td><a href=\"%s-%d.cpp\">%s-%d.cpp</a></td></tr>\n", n, i, n, i)
12   end
13   puts "</table>"
14 end
15 
16 def puts_header
17 puts <<EOH
18 <html lang="ja">
19  <head>
20   <meta http-equiv="Content-type" content="text/html;charset=euc-jp"> 
21   <title>プログラムファイルリスト</title>
22  </head>
23  <body>
24 EOH
25 end
26 
27 def puts_eod
28 puts <<EOF
29  </body>
30  </html>
31 EOF
32 end
33 
34 # 
35 # exp)
36 #
37 # if __FILE__ == $0
38 #   old_main
39 # end
40 #
41 # #ruby XX.rb > log.old.html
42 #
43 def old_main
44   puts_header
45   print_table("01", 25)
46   print_table("02", 18)
47   puts_eod
48 end
49 
50 # 
51 # exp)
52 #
53 # if __FILE__ == $0
54 #   new_main
55 # end
56 #
57 # #ruby XX.rb > log.new.html
58 #
59 def new_main
60   puts_header
61   puts_contents("01", 25)
62   puts_contents("02", 18)
63   puts_eod
64 end
65 
66 # >>>>>>>>> if you use unit test 
67 require "test/unit"
68 class OutputhtmlTest < Test::Unit::TestCase
69 
70   def test_main
71     oldresult = open( "log.old.html" , "r" ).readlines
72     newresult = open( "log.new.html" , "r" ).readlines
73     assert_equal( oldresult , newresult )
74   end
75 
76 end
77 # <<<<<<<<< if you exec unit test 
78 
79 # >>>>>>>>> if you exec main transaction
80 if $0 == __FILE__
81   #new_main
82   #old_main
83 end
84 # <<<<<<<<< if you exec main transaction
85