Comments (13)
Yeah, I strongly agree. A fix will probably come in the next major release though, because my solution probably will be to change the return value to:
[['a', '1'], ['a', '2']]
This format both preserves order as well as allows for handling query strings with multiple occurrences of a single key as above. But because it's a breaking change, it probably won't land until a major version release. I might make it available under a branch earlier though.
from addressable.
Actually, bvandenbos just sent me a pull request that resolves this.
from addressable.
Note that his patch requires you to explicitly indicate you want a :flat_array. In the future this will probably become the only format the method returns, but for now you can indicate you want it as an alternative notation.
from addressable.
Awesome - thanks!
from addressable.
Hmm, almost.. There are still two problems:
addressable/lib/addressable/uri.rb
Line 1422 in 7b13500
addressable/lib/addressable/uri.rb
Line 1503 in 7b13500
Need to drop the .sort call on 1422, and remove 1503 (or make optional / conditional)
url = 'http://a.com/?'+('a'..'z').to_a.shuffle.map {|e| "#{e}=#{e}"}.join("&")
Above case should result in same url post query_values parse + query_parse=
from addressable.
I was actually going to ask bvandenbos for some test cases to prove he'd gotten the sort order correct. But then I was lazy and didn't. Oh, well, as least my test-completeness instincts are working. I'll fix it right now.
from addressable.
Bother. I just pushed a pair of test cases that cover some of the weird edge cases in some of the notation forms that addressable currently parses. Dropping the .sort call makes these tests fail in ruby 1.9.x. The .sort
call on line 1422 is necessary. However I moved the sorting code on line 1503 up into the non-Array
input block, so it will only sort if you give it a Hash
input. Admittedly, this might be a bit aggressive in 1.9.x where order is preserved in Hash
values, but you'll always have the Array
option available if it matters. I'm not concerned about the occasional instance where someone has to do an extra .to_a
call on their 1.9.x Hash
to ensure order is preserved.
from addressable.
Why is 1422 necessary? Without removing that sort, can't make this pass:
https://gist.github.com/787989
from addressable.
Hmmm. Looks like the .sort
call is having an unintentional side-effect. The intent was to sort Hash
values, not Array
values. For instance: ?a[1]=one&a[0]=zero
should parse to {'a' => ['zero', 'one']}
.
from addressable.
Actually, I added your test and the unmodified code passed just fine. Please take another look.
from addressable.
Interesting! You're right, works just fine. Oi! :-)
In which case, what are the odds of a point release to get this out in the wild?
from addressable.
Done.
from addressable.
Sweet, thanks Bob!
from addressable.
Related Issues (20)
- Templates doesn't handle IPv6 IPs
- Invalid scheme format for ssh URL HOT 4
- Is it intended that `normalized_path` destroys the trailing dot when it's the only char? HOT 1
- Improve pure ruby IDNA implementation to match browsers behavior (IDNA2008 and UTS#46) HOT 3
- Equivalent of `URI.regexp(schemes)`? HOT 4
- Crypto mining
- undefined method `to_str' for :id:Symbol (NoMethodError) in 2.8.2 HOT 8
- Template expansion does not work with symbolized hashes in 2.8.1 HOT 1
- Update to 2.8.2 break test env HOT 1
- Any version after 2.8.1 causes errors in our test suite coming from addressable. HOT 8
- Drop support for Ruby 2.2 (and more?) HOT 3
- Disallow backtick in host HOT 1
- Normalize errors when trying to run a simple url normalize HOT 4
- Unsafe concurrent Hash access HOT 9
- k
- feed:http: crashes servers HOT 11
- Valid domain not parsing HOT 1
- Improve release flow HOT 7
- Addressable::URI.escape method does not escape & properly as path param HOT 1
- "CWE-798 - Hardcoded credentials" in Amazon Inspector from uri_spec.rb
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from addressable.