How to match a literal colon in a route

I’m trying to figure out how to escape a literal colon in the routes. If
I
make a route like this:

get ‘/thing:/:id’ => ‘things#show’

then ‘/thing:/123’ does not match on this route

I’ve also tried ‘/thing:/:id’ and ‘/thing%3A/:id’ none seem to work.

Does anyone have any tips here?

-Justin

On Mon, Feb 29, 2016 at 3:04 PM, digger250 [email protected] wrote:

I’m trying to figure out how to escape a literal colon in the routes. If I
make a route like this:

get ‘/thing:/:id’ => ‘things#show’

then ‘/thing:/123’ does not match on this route

I’ve also tried ‘/thing:/:id’ and ‘/thing%3A/:id’ none seem to work.

Does anyone have any tips here?

Yes - don’t do that :slight_smile:

See https://www.ietf.org/rfc/rfc1738.txt, specifically Section 2.2 on
reserved characters.


Hassan S. ------------------------ [email protected]

twitter: @hassan
Consulting Availability : Silicon Valley or remote

I’d certainly prefer not to, but it is prescribed by the ARK standard:

-Justin

On Mon, Feb 29, 2016 at 5:45 PM, Hassan S. <

I did some digging on this, and I couldn’t find a way to make this work
with a literal in the route itself.

Splatting works, though:

get ‘baz/*ark_tag/:id/bar’ => ‘welcome#index’, constraints: { ark_tag:
‘ark:’ }, as: :ark

will only match paths like “/baz/ark:/123/bar”.

It’s a little fussy with URL helpers, as you need to always specify
ark_tag
or you’ll get an error:

ark_path(ark_tag: ‘ark:’, id: 1234)

You’ll probably want to define your own helpers that hide that.

The other, bigger issue is the OTHER features of the ARK spec that are
going to confuse & annoy the default URL parser. In particular:

  • the dot-separated components of VariantPath elements. The default
    Rails
    behavior appends a .:format optional parameter to the route. This
    doesn’t allow further dots.

  • the ? and ?? suffixes. The single question-mark, in particular, is
    only detectable if you check the original request URI in the Rack
    request.
    I’m also unsure how to talk the regular path helpers into producing a
    single-question-mark URL.

If you’re building an application which relies on complex routing of ARK
URLs, you may want to consider writing your own Rack middleware to
hijack
the URL parsing process and transmute them into something more palatable
to
the existing router.

–Matt J.