[#107430] [Ruby master Feature#18566] Merge `io-wait` gem into core IO — "byroot (Jean Boussier)" <noreply@...>
Issue #18566 has been reported by byroot (Jean Boussier).
22 messages
2022/02/02
[ruby-core:107679] [Ruby master Feature#18594] Add a #to_h method on URI::Generic
From:
"jimcavoli (Jim Cavoli)" <noreply@...>
Date:
2022-02-21 07:30:50 UTC
List:
ruby-core #107679
Issue #18594 has been reported by jimcavoli (Jim Cavoli).
----------------------------------------
Feature #18594: Add a #to_h method on URI::Generic
https://bugs.ruby-lang.org/issues/18594
* Author: jimcavoli (Jim Cavoli)
* Status: Open
* Priority: Normal
----------------------------------------
It's just surprisingly challenging to get a hash representation of a parsed URI where the keys are the component names and the values are the component values.
The shortest form I could come up with using only public methods on `URI::Generic` is rather clumsy-feeling:
```ruby
uri = ::URI.parse(url)
hsh = [uri.component, uri.select(*uri.component)].transpose.to_h
```
Hence this suggested patch:
```
diff --git a/lib/uri/generic.rb b/lib/uri/generic.rb
index cfa0de6b74..f27a07a53c 100644
--- a/lib/uri/generic.rb
+++ b/lib/uri/generic.rb
@@ -1367,6 +1367,13 @@ def to_s
str
end
+ #
+ # Returns a Hash representing the URI components
+ #
+ def to_h
+ [component, component_ary].transpose.to_h
+ end
+
#
# Compares two URIs.
#
```
Which would allow the much more ergonomic, idiomatic and terse usage:
```ruby
uri = ::URI.parse(url)
hsh = uri.to_h
```
Also happy to put together tests/specs for that as required.
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>