image

  • フォト Amazonギフト券
    ※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません

検索

最近のトラックバック

無料ブログはココログ

« 人間合格 を観た | トップページ | ピックアップ:mvn archetype:create"だけで良くなった, 企業内で「RSSフィード」を活用する, etc... »

2008-03-16

ant + ruby + ERB でテキストファイル生成

可変部を含むテキストファイルを生成する例を作ってみた。
(実は xfy/xvcd, java 用のファイルを生成するための事前の準備実験です)

$ ls
build.xml  config.yaml  sample01.rb  template.txt

こんな風に実行する。
$ ant clean     // 生成ファイルを削除する
$ ant           // ファイルを生成

$ cat out .txt  // 生成したファイルの内容
# Created: 2008-03-16 08:36:03
foo {
  a = AA
  b = BB
  id = ID
  <AA>xxx/</AA>
}
#--- End of File ---

日付けが埋め込まれている。AA, BB, ID という部分も実は可変になっている。

以下に 生成テキストのテンプレート、ruby プログラム、設定ファイル、ant の build ファイルを示す。
まずは、テンプレートファイル。<%=*%> の部分が可変部だ。
$ cat template.txt
# Created: <%= Time.new.strftime('%Y-%m-%d %H:%M:%S')%>
foo {
  a = <%=a%>
  b = <%=b%>
  id = <%=_id%>
  <<%=a%>>xxx/</<%=a%>>
}
#--- End of File ---

次は変数値の設定ファイル。
$ cat config.yaml

a: AA
b: BB
_id: ID

_id は 本当は id としたいところだが、ruby の id メソッドと名前がぶつかるので _id としている。
(ここで示す例において、変数名が ruby のメソッド名と衝突する場合は_ を付けるなど、利用する側で衝突を避けるようにすることが必要。)

次が ruby スクリプト。
method_missing  を利用することで、テンプレートファイル中には
<$=変数名=> と書くだけで、それが変数値に置換されるようにしている。
(スクリプト先頭部に記してある blog 記事のアイデアを参考にした)

$ cat sample01.rb
# See http://jarp.does.notwork.org/diary/200408b.html#20040820
#          YAMLでパラメータを設定して、ERBで展開する方法を摸索。

require 'yaml'
require 'erb'
require 'pp'

module MyTemplate

  @conf = YAML.load_file('config.yaml')

  def self.run(template)
    ERB.new(template).result(binding)    
  end

  def self.method_missing(symbol, *p)
    v = @conf[symbol.to_s]
    raise "unknown symbol: '#{symbol}' #{p}"  if v == nil
    v
  end
end

# run:  ruby sample01 template.txt
template = ARGV.shift

File.open(template) { |ft|
  puts MyTemplate.run(ft.read)
}

この ruby スクリプトは、もちろん jruby でも動作する。
最後にこれらを ant で利用するようにまとめた。
$ cat build.xml
<?xml version="1.0" encoding="UTF-8" ?>

<project name="antsample" default="generate">

  <property name="dest" value="out.txt"/>

  <target name="clean">
    <delete file="${dest}"/>
  </target>

  <target name="generate" depends="clean">
    <apply executable="ruby"
           output="${dest}"
           logError="true"
           ignoremissing="false"
           failonerror="true">
      <srcfile/>
      <filelist files="sample01.rb"/>
      <arg value="template.txt"/>
    </apply>
  </target>

</project>

朱雀門の画像
2008031601

« 人間合格 を観た | トップページ | ピックアップ:mvn archetype:create"だけで良くなった, 企業内で「RSSフィード」を活用する, etc... »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: ant + ruby + ERB でテキストファイル生成:

« 人間合格 を観た | トップページ | ピックアップ:mvn archetype:create"だけで良くなった, 企業内で「RSSフィード」を活用する, etc... »

mokuji

2013年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

google

  • twitter
  • __
  • _
    Googleボットチェッカー

合わせて読む

  • 合わせて読む
    フィードメーター - katoy: cocolog あわせて読みたい

リンク