ウェブ-HACKS 「とりあえずやってみよう!」ブログでタグ「ERB」が付けられているもの
以前にもブログで書いたRubyでHTMLファイル作成ですが、さらに改良しExcelの1行を1つのHTMLファイルに変換するプログラムを書きました。さらに、前回同様HTMLテンプレート機能も使用しています。Excelデータはタブ区切りテキストにします。
※プログラムはクリエイティブコモンズです。
YAMLも使ってみました。詳細は以下を参照。
config.yamlは以下の通り。
data.txtにタブ区切りテキストです。1行目のheader行の項目名をテンプレートファイル(template.rhtml)に設定すると項目が書く行の設定値でHTML生成します。また、1行目のid項目は必須でその項目値がHTMLファイル名になります。
※プログラムはクリエイティブコモンズです。
#!/usr/bin/ruby -Ks
require 'erb'
require 'yaml'
include ERB::Util
$KCODE = 's'
class CreateHtml
def initialize
@config = YAML.load_file("config.yaml")
@erb = ERB.new(File.read(@config[:template]), nil, "-")
end
def generate
objs = input
for obj in objs do
output(obj)
end
end
def input
objs = Array.new
count = 0
open(@config[:data]).each{|input|
if count == 0
@headers = input.split
count = 1
next
end
h = Hash.new
arr = input.split
@headers.size.times{|i|
h.store(@headers[i], arr[i])
}
objs.push(h)
}
return objs
end
def output(o)
open(@config[:output]+"/"+o['id']+".html", "w"){ |output|
output.write(@erb.result(binding()))
}
end
end
obj = CreateHtml.new
obj.generate
YAMLも使ってみました。詳細は以下を参照。
config.yamlは以下の通り。
:template: template.rhtml :data: data.txt :output: output
data.txtにタブ区切りテキストです。1行目のheader行の項目名をテンプレートファイル(template.rhtml)に設定すると項目が書く行の設定値でHTML生成します。また、1行目のid項目は必須でその項目値がHTMLファイル名になります。
Rubyで静的HTMLファイル吐き出しのプログラムを作成したいなぁ思い、PerlのHTML::TemplateのようなものがRubyにもないか探してみました。
以下サイトにRuby版のHTML::Templateがあり使用したいと思ったのですが、少し使い勝手がわるいようです。
そのためerbにより作成することにしました。以下がテスト用でつくったサンプルコードです。
■メインプログラム
■テンプレートファイル
コマンドプロンプトより以下を実行してくれればOK
もうちょっとデータの持ち方だけ考えればもっと使いやすくなりそうです。
今度は外部ファイルから静的HTML吐き出しをするプログラムを書いてみます。
追記
外部ファイルを読み込んで静的HTMLファイル吐き出しするプログラムを書きました
【参考サイト】
以下サイトにRuby版のHTML::Templateがあり使用したいと思ったのですが、少し使い勝手がわるいようです。
そのためerbにより作成することにしました。以下がテスト用でつくったサンプルコードです。
■メインプログラム
#!/usr/bin/ruby -Ks require 'erb' include ERB::Util $KCODE = 's' filename = ARGV[0] erb = ERB.new(File.read(filename), nil, "-") # hash create. h = Hash.new title = "title_key" title_value = "title_val" h.store(title, title_value) detail = "detail_key" detail_value = "detail_val" h.store(detail, detail_value) # list create. list = Array.new list.push(h) print erb.result(binding())
■テンプレートファイル
<dl> <%- i = 0 -%> <%- for item in list -%> <dt><%=h item['title_key'] %></dt> <dd><%=h item['detail_key'] %></dd> <%- i += 1 -%> <%- end -%> </dl>
コマンドプロンプトより以下を実行してくれればOK
>ruby create_html.rb sample.rhtml
- title_val
- detail_val
もうちょっとデータの持ち方だけ考えればもっと使いやすくなりそうです。
今度は外部ファイルから静的HTML吐き出しをするプログラムを書いてみます。
追記
外部ファイルを読み込んで静的HTMLファイル吐き出しするプログラムを書きました
【参考サイト】

