查看旅程路由器(这是Rails 4.0路由器)的自述,它相当空。我想知道路由器在概念上是如何工作的,如果这个"抽象"语法抓住了路由器作为迷你编程语言的想法:
ROUTE := GET|POST|PUT|DELETE path
path := (static_path) | (dynamic_path)
那么,Rails 4.0路由器是如何工作的呢?
如果你想了解Rails路由,最好的起点是edge指南中的Rails routing from the Outside In。
在那之后,你会有更多的运气去看ActionDispatch::Routing
的文档。
注意:以下内容与《Journey》v1.0.4相关,在撰写本文时为最新版本。
Journey本身是Rails 3.2中引入的Rails路由引擎。在发布说明中,只有一句话描述了它:"多亏了新的Journey引擎,路线识别速度也快了很多。"当然,这并不是很多关于Journey的具体信息,但Rails并没有描述每个实现细节;那要花很长时间!Journey的gemspec也这样描述自己:"Journey是一个路由器。它路由请求。"
您可以查看api文档,但在v1.0.4中,除了代码本身和可能的开放和关闭问题之外,它的文档非常稀疏(Journey::Router::Utils.normalize_path(path)被记录)。你可以看看其他带有旅行标签的S.O.帖子。
有些代码只是通过方法名等进行自我描述,比如Journey::Routes。《Journey》的测试也是了解其工作原理的好方法。
关于代码本身的一些说明:
- 它在Ruby 1.9之前的版本中对Hash进行了猴子补丁,以添加keep_if方法。
- "gtg"代表"广义过渡图"(见这里) 最有趣的代码在这里(复活节彩蛋:
rails c
然后Journey::Path::Pattern.new(9)
)Journey的可视化器可能也很有趣(注意Journey::GTG::TransitionTable中的可视化器方法)。这里是可视化示例,这里是在线演示。