1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Slim の変換結果をちょこっと確認するスクリプト

Last updated at Posted at 2019-12-19

はじめに

この記事は @eggc さんの以下の記事に触発されて書いたもの。

slim ちょっと試したいときには slimrb を使う - Qiita

要するに,テンプレートエンジン Slim で,「こう書いたらこうなる?」というのをコマンドラインでサクッと確かめるには,slim gem によって導入される slimrb というコマンドを使えばよい,ということ。

この方法は,とにかくシンプルで,二三度やってみれば覚えられるから,「ええと,どうやるんだっけ?」と悩む必要がない1

ただ,これだとややこしい Slim コードを少しずつ修正しながら結果を確認するのが面倒くさい。
試行錯誤をもっと楽にしたい,というのが本記事の趣旨。

スクリプトで変換する

slim のほか,listen というディレクトリー監視の gem が必要なので

gem install slim listen

で入れておく。

そして以下のスクリプトを走らせる。

require "listen"
require "slim"

this_file = File.expand_path(__FILE__)

Slim::Engine.set_options pretty: true

Listen.to(__dir__) do |(m, *_),|
  next unless m == this_file
  IO.read(this_file) =~ /^__END__$/
  puts Slim::Template.new{$'}.render, "---"
end.start
sleep

__END__
- 3.times
  div わん

__END__ の下に Slim コードが書かれている。

これだけでは何も起きないが,試しにこの Slim コードを変更してみよう。改行を足すだけでもいい。
変更して保存すると,変換した結果の HTML と区切り線 --- がターミナルに表示される。
変更して保存するたびに表示される。

Slim コードは別ファイルにしてもいいのだが,全部を 1 ファイルにまとめてみた。

なお,Slim の変換のモードとして,

Slim::Engine.set_options pretty: true

のように,改行・インデントが入る形式を指定している。
改行・インデントを入れない形式にしたければ,この行をコメントアウトすればいい(こういう変更を行った場合はスクリプトを一度終了して再度動かすこと)。

コードの解説

ファイルの変更を監視するため,listen を使う。

Listen.to は,引数に監視ディレクトリーのパスを与えておくと,そこでファイルの変更・追加・削除があった場合に,それらのファイルのパスをブロックパラメーターとしてブロックを評価してくれる。

ブロックパラメーターは順に,①変更ファイルのパスの配列,②追加ファイルのパスの配列,③削除ファイルのパスの配列。
なんで配列なのかというと,一定時間おきにチェックして,前回チェックとの差分を見るわけなので,一般には複数のファイルが変更・追加・削除されうるから。

監視を始めるには Listen.to の返り値に対し,start してやらなければならない。

ブロックパラメーターが |(m, *_),| と変な形をしているけど,これは第一ブロックパラメーター以外を捨てる,ということと,第一ブロックパラメーターについては,配列の先頭のみを m に当てて,残りを _ で受けて捨てることを意味している。

そして,スクリプトファイル自身をテキストデータとして取得し,正規表現 /^__END__$/ にマッチする箇所を探して,そこ以降のテキストを $' で取り出している。

Slim コードを HTML に変換するには,Slim::Template.new のブロックに Slim コードを与え,render すればいい。

なお,スクリプト末の sleep が無いと,スクリプトは一瞬で終わってしまう。

  1. コマンド名が思い出せなければ gem spec slim で slim gem の情報を表示し,executables のところを見れば slimrb と出ている。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?