コンテキスト: Rails ルートを理解して「適用」できるようにするために、外部監査プログラムが必要な問題を解決しています。この外部プログラムを作成するための 1 つのオプションは、 の出力を解析することでしたrake routes
。しかし、そうすると、これらのルートを解析して構造化されたオブジェクトに変換するコードが不必要に複製されてしまいJourney::Route
ます。
したがって、私の計画はRails.application.routes
、外部プログラムが理解できる一般的な形式 (YAML または JSON) に出力し、このデータに基づいてルーターを構築できるようにすることです。
質問:このコンテキストを考慮して、オブジェクトJourney::Path::Paternet#spec
内で発生し、たまたますべてのアクションの中心となる属性の構造を理解しようとしています。Journey::Route
たとえば、次のルート - /posts/:id
- 次の「スペック」に変換されます -
#<Journey::Nodes::Cat:0x00007ff193327ee0
@left=
#<Journey::Nodes::Cat:0x00007ff193308630
@left=
#<Journey::Nodes::Cat:0x00007ff1933087e8
@left=
#<Journey::Nodes::Cat:0x00007ff193308bf8
@left=#<Journey::Nodes::Slash:0x00007ff193308d38 @left="/", @memo=nil>,
@memo=nil,
@right=#<Journey::Nodes::Literal:0x00007ff193308c48 @left="posts", @memo=nil>>,
@memo=nil,
@right=#<Journey::Nodes::Slash:0x00007ff193308a40 @left="/", @memo=nil>>,
@memo=nil,
@right=#<Journey::Nodes::Symbol:0x00007ff1933086d0 @left=":id", @memo=nil, @regexp=/[^\.\/\?]+/>>,
@memo=nil,
@right=
#<Journey::Nodes::Group:0x00007ff193309c10
@left=
#<Journey::Nodes::Cat:0x00007ff193308220
@left=#<Journey::Nodes::Dot:0x00007ff1933084f0 @left=".", @memo=nil>,
@memo=nil,
@right=#<Journey::Nodes::Symbol:0x00007ff193308338 @left=":format", @memo=nil, @regexp=/[^\.\/\?]+/>>,
@memo=nil>>
- オブジェクトの左/右属性とは
Journey::Nodes::Cat
? どのトークンが「左」になり、どのトークンが「右」になるかを決定するもの - これは疑わしく二分木のように見えますが、なぜ一番最初のトークン (つまり最初の
/
) が「最も内側」 (または葉ノード) なのですか? 「最も外側」(またはルートノード)ではないでしょうか? - ルート マッチングを実行しながら、このデータ構造をたどる効率的な方法は何ですか?