Skip to content

Tricky to construct a path with trailing slash #106

Closed
djcsdy opened this Issue Aug 13, 2013 · 5 comments

2 participants

@djcsdy
djcsdy commented Aug 13, 2013

Given a URI like this:

URI("http://www.example.org/foo/bar/bat");

it’s difficult to programmatically append a trailing slash.

I thought this might work, but it doesn’t:

URI("http://www.example.org/foo/bar/bat")
    .segment("")
    .toString();
// -> "http://www.example.org/foo/bar/bat" :(

This is annoying when you’re constructing a path using successive calls to .segment() or .segmentCoded():

function apiUri(category, name) {
    var baseUri = URI("http://www.example.org/api/")
    return baseUri.segmentCoded(category)
            .segmentCoded(name)
            .segment("");
}

apiUri("furniture", "hatstand").toString();
// -> "http://www.example.org/api/furniture/hatstand"
// but we wanted "http://www.example.org/api/furniture/hatstand/"
// with trailing slash :(

I’m not sure of the best way to solve this problem, but it seems like segment("") would make sense as a way to add a trailing slash to an existing URI.

After all, it would be consistent with the behaviour of the .segment() getter:

URI("http://www.example.org/foo/bar/bat/").segment();
// -> ["foo", "bar", "bat", ""]
@rodneyrehm
Medialize member

Yeah, I'm not sure I'm happy with segment() returning an empty-string element in that array. But for consistency, .segment("") should add an empty element, if the last element isn't empty - agreed. Are you already looking into this, or should I have a go at it?

@djcsdy
djcsdy commented Aug 13, 2013

No, I won’t have time to do anything about this for a few days at least.

For the time being I’m working around the problem by doing this for the last segment:

.segment("foo/");

which is pretty horrible :)

@rodneyrehm
Medialize member

… my eyes!

@rodneyrehm
Medialize member

if this fixes your problem, I'd release a new version tonight/tomorrow…

@rodneyrehm rodneyrehm closed this Aug 13, 2013
@djcsdy
djcsdy commented Aug 13, 2013

Yep, that fixes it. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.