本を読む

読書やコンピュータなどに関するメモ

Bash on Railsを作る(5) テンプレートエンジン

 今回は、テンプレートエンジン「eBash」です。Ruby on Railsで使われるERB/eRubyのパロディで、やはりpure bashで作りました。

テンプレートの仕様

 仕様はeRubyのサブセット(のつもり)です。テキスト中に<%~%>があると、それをbashのコマンドとして解釈します。もしコマンドが標準出力に出力すれば、内容がその場所に入ります。また、テキスト中に<%=~%>があると、それをbashの変数として解釈し、その場所に入れます。

テンプレートの例

 第3回で解説した、データベースの全件表示を、eBashのテンプレートにしてみます。

<html>
<head>
<title>members</title>
</head>
<body>
<h1>members</h1>

<table border="1">
<tr>
<% for column in $members_columns; do %>
  <th><%=column%></th>
<% done %>
</tr>

<% for person in $members_list; do %>
  <% members.bless person %>
  <tr>
    <td><%=person_name%></td>
    <td><%=person_mailaddress%></td>
    <td><%=person_comment%></td>
  </tr>
<% done %>
</table>

<br />

</body>
</html>

テンプレートを使う

 このテンプレートを使ってみます。

 まず、script/consoleを起動し、テーブルを読み出します。

% script/console
console:1> SHar::base.extend members
console:2> members.find members_list :all

 続いて、テンプレートファイルからテンプレートのオブジェクトを作ります。ebashのクラスメソッドnewを以下のように呼ぶと、ebashクラスのオブジェクトtmplが作られます。

console:3> ebash.new tmpl 'app/views/members/list.ebash'

 このtmplオブジェクトのresultメソッドを呼ぶと、結果が出ます。

console:4> tmpl.result
<html>
<head>
<title>members</title>
</head>
<body>
<h1>members</h1>

<table border="1">
<tr>

<th>name</th>

<th>mailaddress</th>

<th>comment</th>

</tr>



<tr>
<td>emasaka</td>
<td>emasaka@example.jp</td>
<td></td>
</tr>


<tr>
<td>oreore</td>
<td>oreore@example.jp</td>
<td>Hello!</td>
</tr>

</table>

<br />

</body>
</html>

 おしまい。

console:5> exit
exit
%

 これをブラウザで表示するとこうなります。

eBashの処理結果

まとめ

 pure bashでERB/eRubyふうのテンプレートエンジンを作ってみました。O/Rマッパー(もどき)と組み合わせると、それらしくなりましたね。でも先は長いので、ぼちぼちいきます。

注意:Bash on Railsは、実用性を無視したパロディソフトです。誤解のないようお願いします。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/349-6db1036b

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad