只今Ruby勉強中

プログラミングRuby―達人プログラマーガイド

うさぎさんと一緒にRubyの勉強をしているオレの記録。

間違ってる所とかいっぱいあると思いますけど、誰でもコメント出来るので気軽に教えて下さい。

普段は 鷹の島 って所で書いてます。

現在のハマリポイント - yield, succ?, Proc & 後で

2006-09-06 (Wed)

WEB 23:53  WEB - 只今Ruby勉強中 を含むブックマーク

うさぎ本: p171-172

キタコレ、ウェブですよ、WEB。

CGI クラスでエスケープも簡単だよって。

irb(main):001:0> require 'cgi'
=> true
irb(main):002:0> CGI.escape('Hot entry(>_<)')
=> "Hot+entry%28%3E_%3C%29"
irb(main):003:0> CGI.escapeHTML('Hot entry(>_<)')
=> "Hot entry(&gt;_&lt;)"
irb(main):004:0> x = CGI.escapeHTML('Hot entry(>_<)')
=> "Hot entry(&gt;_&lt;)"
irb(main):005:0> x.unescapeHTML()
NoMethodError: undefined method `unescapeHTML' for "Hot entry(&gt;_&lt;)":String
        from (irb):5
irb(main):006:0> CGI.unescapeHTML(x)
=> "Hot entry(>_<)"

String クラスに追加しちゃってもヨクネ?

パラメータ 00:00  パラメータ - 只今Ruby勉強中 を含むブックマーク

うさぎ本: p173

CGI.pm と似たようなもんだよね。

irb(main):001:0> require 'cgi'
=> true
irb(main):002:0> cgi = CGI.new
(offline mode: enter name=value pairs on standard input)
iamparams=ehehe&hogehoge=fuga
=> #<CGI:0x4063ac28 @multipart=false, @output_cookies=nil, @output_hidden=nil, @params={"hogehoge"=>["fuga"], "iamparams"=>["ehehe"]}, @cookies={}>
irb(main):003:0> cgi.params
=> {"hogehoge"=>["fuga"], "iamparams"=>["ehehe"]}
irb(main):004:0> cgi['fuga']
=> ""
irb(main):005:0> cgi['hogehoge']
=> "fuga"
irb(main):006:0>

こんな感じか。cookies 用にインスタンス変数らしきモノが用意されてるのが見える…。

HTML生成 00:07  HTML生成 - 只今Ruby勉強中 を含むブックマーク

うさぎ本: p174

CGI クラスには HTML のコードを生成するメソッドも沢山組み込まれているらしい。

irb(main):001:0> require 'cgi'
=> true
irb(main):002:0> cgi = CGI.new
(offline mode: enter name=value pairs on standard input)
=> #<CGI:0x4063ac28 @multipart=false, @output_cookies=nil, @output_hidden=nil, @params={}, @cookies={}>
irb(main):003:0> cgi.out{
irb(main):004:1* cgi.html{
irb(main):005:2* cgi.head{ "\n"+cgi.title{"This is a Test"} } +
irb(main):006:2* cgi.body{ "\n"+
irb(main):007:3* cgi.form{"\n"+
irb(main):008:4* cgi.hr +
irb(main):009:4* cgi.h1{ "A Form: "} + "\n" +
irb(main):010:4* cgi.textarea("get_text") + "\n"+
irb(main):011:4* cgi.br +
irb(main):012:4* cgi.submit
irb(main):013:4> }
irb(main):014:3> }
irb(main):015:2> }
irb(main):016:1> }
NoMethodError: undefined method `html' for #<CGI:0x4063ac28>
        from (irb):4
        from /usr/lib/ruby/1.8/cgi.rb:705:in `out'
        from (irb):3

…萎えた orz

あー、new する時に HTML 生成メソッドの追加を指定しないと駄目なのね。

irb(main):029:0>  cgi = CGI.new('html3')
(offline mode: enter name=value pairs on standard input)
=> #<CGI:0x4060d6ec @multipart=false, @output_cookies=nil, @output_hidden=nil, @params={}, @cookies={}>
irb(main):030:0>
irb(main):031:0* cgi.out{
irb(main):032:1*    cgi.html{
irb(main):033:2*       cgi.head{ "\n"+cgi.title{"This is a Test"} } +
irb(main):034:2*          cgi.body{ "\n"+
irb(main):035:3*             cgi.form{ "\n"+
irb(main):036:4*                cgi.hr +
irb(main):037:4*                   cgi.h1{ "A Form: " } + "\n" +
irb(main):038:4*                   cgi.textarea("get_text") + "\n"+
irb(main):039:4*                   cgi.br +
irb(main):040:4*                   cgi.submit
irb(main):041:4>             }
irb(main):042:3>          }
irb(main):043:2>    }
irb(main):044:1> }
Content-Type: text/html
Content-Length: 302

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML><HEAD>
<TITLE>This is a Test</TITLE></HEAD><BODY>
<FORM METHOD="post" ENCTYPE="application/x-www-form-urlencoded">
<HR><H1>A Form: </H1>
<TEXTAREA NAME="get_text" ROWS="10" COLS="70"></TEXTAREA>
<BR><INPUT TYPE="submit"></FORM></BODY></HTML>=> nil

vim で加工したからインデントが綺麗になった。:-)

でもさ

CGI.pm の時も思ったけど、何で HTML タグ生成用のメソッドを一緒にしちゃうんだろう。テンプレートエンジン使うからイラネっつの。

paironpairon2009/06/28 22:21undefined method `html' の検索でやってきました。
役に立ちました。 ども

トラックバック - http://rubyist.g.hatena.ne.jp/gaba/20060906