PathTemplate

Swift implementation of templated paths. Inspired by path-to-regexp and URITemplate.swift.
Installation
Swift Package Manager:
Append the following to your Package.swift
dependencies: []
.package(url: "https://github.com/gjeck/PathTemplate.swift.git")
Cocoapods
Add the following to your Podfile
pod 'PathTemplate'
Basic Usage
A PathTemplate
is useful for working on structured String
data like URLs.
Expanding a path template
let template: PathTemplate = "/user/:id"
template.expand(["id": 123])
=> "/user/123"
Determine the parameters in a template
let template: PathTemplate = "https://api.github.com/repos/:owner/:repo/"
template.parameterNames
=> ["owner", "repo"]
let template: PathTemplate = "/artist/:artistId/album/:albumId"
template.extract("/artist/123/album/456")
=> ["artistId": "123", "albumId": "456"]
Parameter Modifiers
Named parameters are defined by prefixing a colon to a segment of word characters [A-Za-z0-9_]
like :user
.
Additional modifiers can be suffixed for different meaning:
?
the parameter is optional
*
zero or more segments
+
one or more segments
?
Optional
let template: PathTemplate = "https://:hostname/:path?"
template.expand(["hostname": "github.com"])
=> "https://github.com"
template.expand(["hostname": "github.com", "path": "user"])
=> "https://github.com/user"
*
Zero or More
let template: PathTemplate = "https://:hostname/:path*"
template.expand(["hostname": "github.com", "path": ["user", "gjeck"]])
=> "https://github.com/user/gjeck"
template.expand(["hostname": "github.com"])
=> "https://github.com"
+
One or More
let template: PathTemplate = "https://:hostname/:path+"
template.expand(["hostname": "github.com", "path": ["user", "gjeck"]])
=> "https://github.com/user/gjeck"
template.expand(["hostname": "github.com"])
=> nil
Regular Expression Parameters
Parameters can be provided a custom regular expression that overrides the default match. For example, you could enforce matching digits in a path.
let template: PathTemplate = "/image-:imageId(\d+).png"
template.expand(["imageId": 123])
=> "/image-123.png"
template.expand(["imageId": "abc"])
=> nil
Unnamed Parameters
It is possible to write an unnamed parameter that only consists of a matching group. It works the same as a named parameter, except it will be numerically indexed.
let template: PathTemplate = "/cool/(\d+)/(.*)"
template.parameterNames
=> ["0", "1"]
template.expand(["0": 123, "1": "wow"])
=> "/cool/123/wow"
Advanced Usage
Enforcing case sensitive matching
let template = PathTemplate("/User/:id", options: .init(isCaseSensitive: true))
template.extract("/user/123") // Note that "user" has a lowercase "u"
=> []
Accessing the underlying path regular expression
let template: PathTemplate = "/user/:id"
template.regex
=> <NSRegularExpression: 0x102745860> ^\/user\/([^\/]+?)(?:\/)?$
PathTemplate
Swift implementation of templated paths. Inspired by path-to-regexp and URITemplate.swift.
Installation
Swift Package Manager:
Append the following to your
Package.swift
dependencies: []
Cocoapods
Add the following to your
Podfile
Basic Usage
A
PathTemplate
is useful for working on structuredString
data like URLs.Expanding a path template
Determine the parameters in a template
Extract the parameters used in a given path
Parameter Modifiers
Named parameters are defined by prefixing a colon to a segment of word characters
[A-Za-z0-9_]
like:user
. Additional modifiers can be suffixed for different meaning:?
the parameter is optional*
zero or more segments+
one or more segments?
Optional*
Zero or More+
One or MoreRegular Expression Parameters
Parameters can be provided a custom regular expression that overrides the default match. For example, you could enforce matching digits in a path.
Unnamed Parameters
It is possible to write an unnamed parameter that only consists of a matching group. It works the same as a named parameter, except it will be numerically indexed.
Advanced Usage
Enforcing case sensitive matching
Accessing the underlying path regular expression