framework ruby regex routing routes sinatra

ruby - framework - Parámetros obligatorios y opcionales para la ruta Sinatra



sinatra ruby framework (1)

Logré superar esto al completar la expresión regular en la ruta y excluir el "." del primer grupo regex

get %r{/widgets//([^//?#/.]+)(?:/.|%2E)?([^//?#]+)?}

Con las rutas Sinatra, ¿cómo puede haber un parámetro nombrado requerido y un parámetro nombrado opcional en la misma parte de la ruta?

El parámetro de ruta opcional funciona bien aquí

get ''/widgets.?:format?''

Pero trate de combinar un parámetro requerido requerido, y las cosas se rompen.

get ''/widgets/:id.?:format?''

Las solicitudes de /widgets/abc.json pasan el abc.json completo como el parámetro id.

El regex compilado de Sinatra es:

/^//widgets//([^//?#]+)(?:/.|%2E)?([^//?#]+)?$/