概要
tilt は複数のテンプレートファイルを同じインタフェースで扱うことができる便利ライブラリです
今回は erb を使って簡単な操作方法を紹介します
環境
- macOS 11.1
- Ruby 2.7.2p137
- tilt 2.0.10
インストール
bundle init
vim Gemfile
gem "tile"
bundle install
Getting Started
とりあえず動かしてみます
vim sample.erb
<%= @message %>
vim test.rb
require 'erb'
require 'tilt'
@message = "hello"
sample = Tilt.new('sample.erb')
output = sample.render(self)
puts output
bundle exec ruby test.rb
=> hello
テンプレート側でインスタンス変数を参照する場合は上記のようになります
Ruby スクリプト側でもインスタンス変数を宣言して render する際にインスタンス変数が存在しているクラスのオブジェクトを渡す必要があります
クラス内で使用する
render する際に self や Object.new を渡すケースは少ないのでクラス内で使用する場合は以下のようにします
vim test.rb
require 'erb'
require 'tilt'
@message = "hello"
class MyClass
def initialize
@sample = Tilt.new('sample.erb')
@message = "hello in MyClass"
end
def render
output = @sample.render(self)
puts output
end
end
cls = MyClass.new
cls.render
bundle exec ruby test.rb
=>hello in MyClass
ハッシュを渡す
テンプレートにハッシュを渡すこともできます
参照する場合はハッシュのキーを使って参照します
vim sample.erb
<%= message %>
vim test.rb
require 'erb'
require 'tilt'
h = {'message': 'hello'}
sample = Tilt.new('sample.erb')
output = sample.render(self, h)
puts output
bundle exec ruby test.rb
=> hello
オブジェクトを渡す
テンプレート側で渡されたオブジェクトのメンバを参照してみます
vim sample.erb
<%= hello %>
vim test.rb
require 'erb'
require 'tilt'
class Message
def initialize
@hello = 'hello'
end
attr_accessor :hello
end
msg = Message.new
sample = Tilt.new('sample.erb')
output = sample.render(msg)
puts output
bundle exec ruby test.rb
=> hello
オブジェクトを渡しているので参照する側はメンバやメソッドを直接参照する感じになります
ブロックを渡す
ブロックを渡してテンプレート側でコールすることもできます
テンプレート側は yield
でブロックを受け取りましょう
vim sample.erb
<%= yield %>
vim test.rb
require 'erb'
require 'tilt'
class Message
def initialize
@msg = 'hello'
end
def hello
Proc.new {
@msg + "!!"
}
end
end
msg = Message.new
sample = Tilt.new('sample.erb')
output = sample.render(&msg.hello)
puts output
bundle exec ruby test.rb
=> hello!!
0 件のコメント:
コメントを投稿