我正在尝试生成由我的 Grape::API (MyApi) 子类生成的所有路由的列表。
我可以通过调用接近:
MyApi.send(:route_set).instance_variable_get(:@routes)
这给了我一组 Rack::Mount::Route 对象。
Route 对象唯一有用的属性是 :conditions ,它返回一个像这样的哈希:
:path_info => (?-mix:\\A\\/api\\/(?<version>v1)\\/token(?:\\.(?<format>[^\\/]+))?\\Z)", "k: request_method, v: (?-mix:\\AGET\\Z)
如您所见,哈希值是匹配路由路径的正则表达式。我还可以使用 :named_captures 从正则表达式中获取所有命名的捕获:
{:path_info=>{:version=>0, :format=>1}, :request_method=>{}}
最终,我要做的是生成通过 Grape::API 创建的所有路由的列表,它们的完整路径等。尝试解构条件中的正则表达式对我来说没有意义。是否有另一种方法可以访问/生成 Rack::Mount::Route 的人类可读路径?