Accessing compiled routes in Grape / Rack::Mount::Route

Viewed 7251

I'm trying to generate a list of all routes generated by my subclass of Grape::API (MyApi).

I can get close by calling:

MyApi.send(:route_set).instance_variable_get(:@routes)

which gives me an array of Rack::Mount::Route objects.

The only attribute of the Route object that is useful is :conditions which returns a Hash like this:

 :path_info => (?-mix:\\A\\/api\\/(?<version>v1)\\/token(?:\\.(?<format>[^\\/]+))?\\Z)", "k: request_method, v: (?-mix:\\AGET\\Z)

As you can see the value of the hash is a regexp for matching the route's path. I can also use :named_captures to get all the named captures from the regexp:

{:path_info=>{:version=>0, :format=>1}, :request_method=>{}}

Ultimately what I'm trying to do is generate a list of all routes created through Grape::API, their full path, etc. It doesn't make sense to me to try and deconstruct the regexp in conditions. Is there another way of accessing/generating a human readable path for Rack::Mount::Route?

6 Answers
Related