Jammit を使用してRailsアプリケーション用にアセットをパッケージ化し、いくつかのグループのそれぞれに含めたいアセットファイルがいくつかあるたとえば、 Sammy とそのプラグインをmobile
とscreen
の両方のJSパッケージに含めたいです。
私はこれを試しました:
sammy: &SAMMY
- public/javascripts/vendor/sammy.js
- public/javascripts/vendor/sammy*.js
mobile:
<<: *SAMMY
- public/javascripts/something_else.js
この:
mobile:
- *SAMMY
しかしどちらも、Jammitが理解できないネストされた配列にSammy JSファイルを配置します。配列の要素を別の配列に直接含めるための構文はありますか?
[〜#〜] nb [〜#〜]:この場合、SAMMY
配列には2つの要素しかないことがわかりますなので、各パッケージにエイリアスと参照の両方を与えることは悪くありません。この場合は問題ありませんが、特定の読み込み順序を持つ要素が5つまたは10個ある場合、すぐにメンテナンスできなくなります。
あなたの例は有効なYAML(チェックするのに便利な場所は YPaste )ですが、マージが何をするかは定義されていません。 spec ごとに、マージキーは値を持つことができます。
YAMLレベルでシーケンスをマージする方法はありません。
ただし、これはコードで実行できます。 2番目のアイデアのYAMLを使用する:
mobile:
- *SAMMY
ネストされたシーケンスを取得します-それらをフラット化してください!このようなネストされたシーケンスのマッピングがあると仮定します。
data = YAML::load(File.open('test.yaml'))
data.each_pair { |key, value| value.flatten! }
(もちろん、より複雑なYAMLファイルがあり、すべてのシーケンスをフラット化したくない場合(またはすべてのシーケンスではない場合)は、フィルタリングを行う必要があります。)
私が知っている最も近い解決策はこれです:
sammy:
- &SAMMY1
public/javascripts/vendor/sammy.js
- &SAMMY2
public/javascripts/vendor/sammy*.js
mobile:
- *SAMMY1
- *SAMMY2
- public/javascripts/something_else.js
または、すでに提案したように、コードスニペットでネストされたリストをフラット化します。
注: yaml-online-parser によると、最初の提案は<<の有効な使用ではありません(2つのディクショナリのキーをマージするために使用されます。アンカーは別のディクショナリをポイントする必要があります)。
mobile
をsammy
と等しくしたい場合は、次のようにします。
mobile: *SAMMY
ただし、mobile
にsammy
の要素に加えて他の要素を含める場合は、私の知る限り、YAMLでそれを行う方法はありません。
提案されているように、少なくともRubyでは、リストをフラット化する必要がある場合、「!flatten」タイプ指定子をモバイルに追加し、Arrayを拡張するクラスを実装し、yaml_tagを追加して、コーダーseqをフラット化することは簡単ですinit_with。