いくつかハマったので、メモがてら・・・。
動かした embulk は・・・0.8.11 だったと思います(調べたら直しておきます)。
include のパス
include で設定するパスは、最初に読み込む liquid ファイルからの相対パスになります。
読み込んだ先の liquid ファイルで、さらに include しても、最初に読み込んだファイルからの相対パスになります。
しかも、パスにカレントディレクトリを表す「.」や、親ディレクトリを表す「..」が使えません。
なので、最初に読み込む liquid ファイルが、一番上にディレクトリにゴチャッと溜まることに・・・。
env の罠
embulk は実行時に引数を渡すことができないので、環境変数を使うことになります。
で、どの liquid ファイルで使用するかわからないので、全部最初に読み込む liquid ファイルで指定してたんですけど、
{% include 'child', args = env.ARGS %}
こんな感じで直接 include 先のファイルに渡すことができないみたいです。
一度、assign すると渡せます。
{% assign args = env.ARGS %}
{% include 'child', args = args %}
これウソでした。
もうちょっと調査して修正します。
include での渡し方
include で変数を渡すには、「:」で指定するか、「=」で指定することができます。
でも、これも謎の罠があって・・・
# parent.yml.liquid
{% include 'child', args = 'ar' %}
# _child.yml.liquid
{% assing args = args | append: 'gs' %}
{% include 'grandchild1', args: args %} # 'ar' が渡される
{% include 'grandchild2', args = args %} # 'args' が渡される
おわかりいただけたでしょうか?
append した内容が反映されるかどうかの差異があるようです。
これウソでした。
もうちょっと調査して修正します。
文字列に「'」と「"」を混在させたい
片方だったら、'aaa"aaa' というような感じで書けば良いのですけど、両方使いたい場合は、append するか、replace で適当な文字をあとで置き換えるかする必要があるようです。
エスケープなんてなかった(たぶん)。