hannesg / uri_template Goto Github PK
View Code? Open in Web Editor NEWA URI template library for ruby.
A URI template library for ruby.
Hi, I notice the behavior of URITemplate has changed between 0.6.0 and 0.7.0
URITemplate.new('/foo/{x}/{y}').expand_partial(x: 123).to_s
#0.6.0 => "/foo/123/{y}"
#0.7.0 => "/foo/123{x}/{y}"
is there an API to get the old behaviour? I'm using URITemplate for Yaks and this is blocking me from upgrading.
Hi,
FYI, we've started collection JSON-formatted tests for URI templates here:
https://github.com/uri-templates/uritemplate-test
starting with the examples from the spec.
If you'd like to use them in your project, please feel free, and of course we'd love a pull request if you have additional tests in the same format.
(Sorry to submit this as an issue, but I didn't see any other way to contact you.)
Cheers,
I would like uri_template to support symbols in the hash keys passed to expand
?
I think it would be quite nice to be able to use the Ruby 1.9 hash syntax to write something like this:
t = URITemplate.new('/search{?q,rows,start}')
t.expand q: 'something', rows: 10, start: 5
Iโd be happy to implement the change if you think it would be a good idea ๐ค
It would be nice to have partial expand feature which works by binding supplied values to variables and produces another template:
URLTemplate.new("{a}/{b}").partial_expand(a: 1)
=> <URLTemplate @pattern="1/{b}">
There seems to be a problem using :colon
mode where it will encode dashes:
# With colons:
x = URITemplate.new(:colon, '/:year-:month-:day-:title.html')
x.expand(year: '2010', month: '01', day: '01', title: "foo-bar")
=> "/2010%2D01%2D01%2Dfoo-bar.html"
# With braces:
x = URITemplate.new('/{year}-{month}-{day}-{title}.html')
x.expand(year: '2010', month: '01', day: '01', title: "foo-bar")
=> "/2010-01-01-foo-bar.html"
I would be more than willing to implement this, but I was wondering if it's desired or if it's already possible:
Let's say, you have the following template:
tpl = URITemplate.new(:colon, 'http://some.api.com[/:optional[/:optional2]]')
:optional2:
would only be added if :optional1
existed. In other words:
tpl.expand(optional1: 'foo', optional2: 'bar')
# => http://some.api.com/foo/bar
tpl.expand(optional1: 'foo')
# => http://some.api.com/foo
tpl.expand(optional2: 'bar')
# => http://some.api.com
I have seen this pattern implemented in a few APIs (we can debate the design of said APIs another time). Is this possible with uri_template? If not, would there be any interest in me adding it?
If there is interest in me adding it, could we discuss what the pattern would look like for both formats?
Thanks!
We use uri_template in Hyperclient, https://github.com/codegram/hyperclient. Most of the time you have an URI template in some resource and you expand it. For example a link could be http://example.com/widgets/{id}
. However sometimes you have things like http://example.com/widgets/{?sort,size,page,offset}
which is rather annoying and ends up being copy-pasted all over the place, or usually just forgotten by the API developers.
In code this is used like so:
client.widgets(id: 1)
client.widgets(sort: 'created_at', size: 10)
...
We would like to generally be able to omit these parameters, but still include them in the resulting URI. So a template like http://example.com/widgets{?size}
could actually be expanded with client.widgets(sort: 'created_at')
, basically using the template as a hint as opposed to a hard requirement.
Furthermore we'd like to fail when a required parameter is missing. Anything that's not a query parameter should probably be required.
Generally just looking for feedback. Is an implementation like this in scope of this library? If so I would probably refactor rfc6570.rb somewhat into a generic base, the old rfc6570 implementation and a variation described above.
I just saw that this library is using the Affero GPLv3 license. That license makes this library unsuitable for use except in very narrow situations (when combined into a compatibly-licensed application that also includes functionality to serve the source code of this library to users).
Ruby code is generally licensed with a more permissive license like MIT, which would not force GPLv3 terms on users of that license.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.