2

I'm having issues getting Grape to respond to a purely wild card route.

By that I mean that if I have a simple route defined as

get do
...
end

I need to respond to all potential requests made to the API. The situation being I need to parse the path and params and then work through a decision tree based on those values.

I've tried a few variations on the route definition, such as:

get '/*' do
...
end

get '/(*)' do
...
end

But to no avail.

I know that there is some support for regular expressions and route anchoring in Grape, but I've had no luck figuring it out.

Thanks!

sheppe
  • 708
  • 5
  • 12

1 Answers1

3

You were close with the guess at the syntax, you just need to name the matching param:

E.g.

  get '*thing' do
    { :thing => params[:thing] }
  end

Using the * will make the param capture the rest of the URI path, ignoring / separators. But otherwise it behaves just like any other param.

Note this will only pickup within the Rack mount point at best, so if you have

  prefix      'api'
  version     'v2'

then it will respond to paths like /api/v2/hkfhqk/fwggw/ewfewg

If you are using this for custom 404 or other catch-all routes, then you need to add it at the end, otherwise it will mask more specific routes.

Neil Slater
  • 26,512
  • 6
  • 76
  • 94