背景:我正在解决一个问题,我需要一个外部审计程序才能理解和“应用”Rails 路由。编写此外部程序的一种选择可能是解析 的输出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
什么?什么决定哪个令牌将是“左”,哪个令牌将是“右” - 这看起来有点像二叉树,但为什么第一个标记(即第一个
/
)是“最里面的”(或叶节点)?它不应该是“最外层”(或根节点)吗? - 在执行路由匹配时,什么是遍历此数据结构的有效方法?