Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Tricky to construct a path with trailing slash #106

Closed
djcsdy opened this Issue · 5 comments

2 participants

@djcsdy

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
Owner

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

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
Owner

… my eyes!

@rodneyrehm
Owner

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

@rodneyrehm rodneyrehm closed this
@djcsdy

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.