(ruby)(WEBrick)(ブラウザをインターフェイスにする rubyアプリケーション を 割と真面目に考えてみる その2)

前回の記事 → http://d.hatena.ne.jp/morakana/20100811/1281539898
この記事の続き → (続きを書くことがあればここに 続きの記事へのリンクを貼ります)


 前回に考えてみたものを利用して 実際にTwiterアプリケーションとして作っていく上で
不便に思った事などを考慮して再び テンプレートを作ってみました
基本的な概念は変わってませんが ファイル構成などは若干変わっていますので
今回も 実際のファイルと見比べながら 読んでみて下さい
こちらからダウンロードできます → ダウンロード

 前回は 「servlet_****」となっていたファイルですが
どうしても ファイル名が冗長になりがちなので 「servlet」の部分は削除しました

 では 今回追加されているファイルを見ていきましょう
「index.html」 は 「http://127.0.0.1:1234/」 に アクセスした場合でも
自動的にトップページ 「http://127.0.0.1:1234/top_page」 を表示させるためのものです

 「httpSrv_lib.rb」 は 「httpSrv.rb」 でやっていた 関数やクラスの定義を分割したものです
ファイル数は増えますが 「httpSrv.rb」を 見やすくするためにあえて分割してみました

「get_関数」 は 仕様の変更を行いました 引数は オプション部分のみになりました
そしてオプション部分には「http://127.0.0.1:1234/_?cmd=」よりあとの文字列を書くこととしました

 そして 新しく定義されている 「ReadFileクラス」についてです
これは HTMLを出力するクラス たとえば「_TopPage.rb」の 「do_GET関数」内で
出力したいHTMLを書いていると そのHTMLを変更するごとに webサーバの再起動が必要になります
HTMLの内容も固まり もうほとんど手直しする必要が無くなったのなら
直接「do_GET関数」の中に書いてしまったほうが 効率が良いのは 言うまでもありませんが
内容を検討中のHTMLだと何度も何度も書き換え その度に webサーバを再起動させる必要があるので
それはそれで 余計なストレスが掛かってしまいます
こういう時に重宝される手段は いわゆる 「eval関数」ですね
ただ ファイルの読み込み部分を何度も書くのも非効率なので この「ReadFileクラス」の出番です
第一引数にファイル名を指定して newすると その時点で ファイルの内容を読み込ます
あとは「ReadFile#read関数」で内容を取得できます
このインスタンスの初期化後に対象ファイルの内容が変更された場合は
「ReadFile#read関数」実行時に再度ファイルを読み直し その内容を返してきます
つまり ファイルの更新が無い間は 再読み込みは行われません

 では 実際に 「ReadFileクラス」を使った例です、 「_TopPage.rb」を見てください
「ReadFile.new('_TopPage-body.rb')」として インスタンスを作り グローバル変数に代入してます
何故 グローバルにする必要があるかというと 「TopPageクラス」の中から見えないからですね
冗長にはなりますが 変数名が被らないように 「$top_page_body」のようにした方が良いかもしれませんね
あとは 「ReadFile#read関数」を呼び出すだけでファイルの内容を取得できます
ここで 読み込み対象となっている「_TopPage-body.rb」にはHTMLを構築している所が書かれています
この部分を書き換えれば webサーバを再起動させること無く HTMLの内容を変更させる事が出来ます