キモブロ

Please spy check please, Fucking retard

Mustache使ってみる

今更だけど触ったのでログ。logic-lessとうたってるので、ロジックを極力書けないようにしたテンプレートエンジンって感じなのかな。とりあえず使ってみる。
http://mustache.github.com/


まず、gem install mustache した後にirbで実験

irb(main):001:0> require 'mustache'
=> true
irb(main):002:0> Mustache.render("Hello world")
=> "Hello world"
irb(main):003:0> Mustache.render("Hello world {{unko}}", :unko => "this is unko")
=> "Hello world this is unko"
irb(main):004:0> Mustache.render("Hello world {{arg1}} {{arg2}}", :arg1 => "!", :arg2 => "?")
=> "Hello world ! ?"

以上が、もっとも簡単な利用例かな
次は、クラスを使ったやり方をヤッテみる

class Simple < Mustache
  def name
    "kimoto"
  end

  def age
    3
  end
end

puts Simple.render "test de gozaru by {{name}} {{age}} sai"

出力結果は以下

test de gozaru by kimoto 3 sai


条件分岐

buf = <<EOT
{{#in_ca}}
true no toki ha koko kimasu
{{/in_ca}}
EOT

# 文字列が表示される
puts Mustache.render(buf, :in_ca => true)

# 文字列が表示されない
puts Mustache.render(buf, :in_ca => false)

Rubyでいうifが

{{#variable}}
  True!
{{/variable}}

でunlessが

{{^variable}}
  False!
{{/variable}}

これか

dict-style viewのテスト
まぁこんな感じでハッシュみたいな感じでも使えますよ的な感じか

view = Mustache.new
view[:name] = 'kimoto'
view[:value] = 100
puts view.render("hello {{name}} {{value}}yen please")


ビューファイル自動探索機能
テンプレート文字列が指定されてないときは、カレントディレクトリからKlass.mustacheってファイル名のファイルを探してくれるらしい、のテスト。

require 'mustache'
class Simple < Mustache
  def name
    "simple san"
  end
end

puts Simple.render

上記を実行すると、Simple.mustacheが探索される


READMEはこのへんで終わってるので勝手に続けて、配列要素表示するやつ

template = <<EOT
<ul>
  {{# users}}
    <li>{{ name }}</li>
  {{/ users}}
</ul>
EOT

puts Mustache.render template, {:users => [{:name => '1san'}, {:name => '2san'}]}

普通に配列要素を単にひとつずつ表示したいときに、それぞれの要素自体を参照するにはどうすりゃいいんだと思ったら、.っていう文字を使えばいいのか

template = <<EOT
<ul>
  {{# ary}}
    <li>{{.}}</li>
  {{/ ary}}
</ul>
EOT

puts Mustache.render template, :ary => [1,2,3,4,5]

このへんで飽きた