質問のより長く、別の言い回しは、「任意のデータ構造(ハッシュ、配列、整数、浮動小数点数、文字列など)の形状をテストするためのRubyライブラリまたはアプローチは何ですか?」です。
まず、簡単な例を示します。
hash_1 = {
k1: 1.0,
k2: 42,
k3: {
k4: "100.00",
k5: "dollars"
}
}
次に、それを検証したいと思います。これは、次のような形状/スキーマ/テンプレートと比較することを意味します。
shape_a = {
k1: Float,
k2: Integer,
k3: Hash
}
または、おそらく、より具体的な形状:
shape_b = {
k1: Float,
k2: Integer,
k3: {
k4: String,
k5: String
}
}
考えられるAPIの1つは次のようになります。
require '_____________'
hash_1.schema = shape_a
hash_1.valid? # => true
hash_1.schema = shape_b
hash_1.valid? # => true
これらは単なる例であり、私は他のアプローチを受け入れています。
約3年前、私は自分のかゆみを掻くためにschema_hashを作成しました。私はそれを更新する予定ですが、最初に私は代替案とより良いアプローチの感覚を得たいと思いました。
この質問の動機はMongoのユースケースにありますが、質問は必ずしもMongo固有のものではありません。
冒頭で述べたように、ハッシュ、配列、プリミティブなど、任意のデータ構造をネストされた組み合わせで検証する機能を確認または構築したいと思います。
「Mongoのスキーマは必要ないのに、なぜ気にするのですか?」
- 上で述べたように、私はMongoのユースケースだけを考えているわけではありません
- ただし、Mongoのコンテキストでも、特定の形状をとるためにデータ構造を必要としない場合でも、形状またはパターンに対してデータ構造をテストし、それに応じて動作することは有用です。
「カスタム検証を書いてみませんか?」
私が前のプロジェクトに取り組んだとき、これはまさに私が始めたところです。ネストされたハッシュの検証を繰り返し作成するのは面倒です。何が簡単になるかを考え始め、上で共有したものと同様の構文を思いつきました。
そこには何がありますか?何を試してみればいいですか?
とはいえ、他の人が何をしているのか気になります。「黄金の道」はありますか?たとえば、埋め込みドキュメントやMongoidに関連付けられたvalidates_associatedなど、さまざまなアプローチを試していますが、ハッシュが1レベル以上深くネストされている場合、これらのアプローチはやり過ぎのように見えます。
検証のためにRubyToolboxで検証を探しましたが(しゃれを意図したもの)、探しているものが見つかりませんでした。私がそこにいる間、私は「検証」と呼ばれる新しいカテゴリーを提案しました。
私が求めていることは、「検証」トピック領域にはあまり当てはまらず、「データ構造」や「トラバーサル」などの他の領域には当てはまる可能性があります。もしそうなら、私を正しい方向に向けてください。