読者です 読者をやめる 読者になる 読者になる

今日は$formatと--dataオプションの取り扱いに細かな調整を加えた

github.com

今日は$formatと–dataオプションの取り扱いに細かな調整を加えた。具体的には以下の様な感じ。

  • $formatの対象を文字列だけから拡張した
  • --data でファイル名だけではなく json referenceを取れるようにした

$formatの対象を文字列だけから拡張した

今までは$formatが受け入れるのは文字列だけだった。

one:
  $format: "{prefix}1"
  prefix: no.
no.1

これをdictまたはlistを受け取れるようにした。例えばlistの場合。

items:
  $format:
    - "{prefix}1"
    - "{prefix}2"
    - "{prefix}3"
  prefix: no.
items:
- no.1
- no.2
- no.3

あるいはdictの場合。

items:
  $format:
    one: "{prefix}1"
    two: "{prefix}2"
    three:  "{prefix}3"
  prefix: no.
items:
  one: no.1
  two: no.2
  three: no.3

--data でファイル名だけではなく json referenceを取れるようにした

--data でファイル名だけではなく json referenceを取れるようにした。これにより、細かな設定毎にファイルを分ける必要がなくなった。 また、 --data は複数取れるので、互いに独立な設定を適宜組み合わせる感じのmixinのようなことも出来るようになった。

mixinのようなことというのはこういう感じ。例えば以下のようなconfig.yamlがあるとする。これが --data の対象になる。

version:
  dev:
    prefix: dev
  staging:
    prefix: staging
infra:
  local:
    host: localhost
  cloud:
    host: example.com

ここでversion用の設定とinfra用の設定はそれぞれ独立している。dev-local, dev-cloud, staging-local, staging-cloud の4種類の可能性が存在。 これを適宜組み合わせて作ることが出来る。

例えば、それを確認するために、以下のようなmain.yamlを作る。

# これはdebug用のyaml `--data` の値を確認できるようにするだけのもの
$get: data

それぞれ4つのバリエーションが試せるようになった。

$ zenmai main.yaml --data "config.yaml#/version/dev" --data "config.yaml#/infra/local"
prefix: dev
host: localhost
$ zenmai main.yaml --data "config.yaml#/version/dev" --data "config.yaml#/infra/cloud"
prefix: dev
host: example.com
$ zenmai main.yaml --data "config.yaml#/version/staging" --data "config.yaml#/infra/local"
prefix: staging
host: localhost
$ zenmai main.yaml --data "config.yaml#/version/staging" --data "config.yaml#/infra/cloud"
prefix: staging
host: example.com

今週

今週は大きな機能拡張ではなくこういう感じの細かな調整に時間を使う予定(たぶんきっと)