[#107765] [Ruby master Bug#18605] Fails to run on (newer) 32bit Windows with ucrt — "lazka (Christoph Reiter)" <noreply@...>

Issue #18605 has been reported by lazka (Christoph Reiter).

8 messages 2022/03/03

[#107769] [Ruby master Misc#18609] keyword decomposition in enumerable (question/guidance) — "Ethan (Ethan -)" <noreply@...>

Issue #18609 has been reported by Ethan (Ethan -).

10 messages 2022/03/04

[#107784] [Ruby master Feature#18611] Promote best practice for combining multiple values into a hash code — "chrisseaton (Chris Seaton)" <noreply@...>

Issue #18611 has been reported by chrisseaton (Chris Seaton).

12 messages 2022/03/07

[#107791] [Ruby master Bug#18614] Error (busy loop) inTestGemCommandsSetupCommand#test_destdir_flag_does_not_try_to_write_to_the_default_gem_home — duerst <noreply@...>

Issue #18614 has been reported by duerst (Martin D端rst).

7 messages 2022/03/08

[#107794] [Ruby master Feature#18615] Use -Werror=implicit-function-declaration by deault for building C extensions — "Eregon (Benoit Daloze)" <noreply@...>

Issue #18615 has been reported by Eregon (Benoit Daloze).

11 messages 2022/03/08

[#107832] [Ruby master Bug#18622] const_get still looks in Object, while lexical constant lookup no longer does — "Eregon (Benoit Daloze)" <noreply@...>

Issue #18622 has been reported by Eregon (Benoit Daloze).

16 messages 2022/03/10

[#107847] [Ruby master Bug#18625] ruby2_keywords does not unmark the hash if the receiving method has a *rest parameter — "Eregon (Benoit Daloze)" <noreply@...>

Issue #18625 has been reported by Eregon (Benoit Daloze).

13 messages 2022/03/11

[#107886] [Ruby master Feature#18630] Introduce general `IO#timeout` and `IO#timeout=`for all (non-)blocking operations. — "ioquatix (Samuel Williams)" <noreply@...>

Issue #18630 has been reported by ioquatix (Samuel Williams).

28 messages 2022/03/14

[#108026] [Ruby master Feature#18654] Enhancements to prettyprint — "kddeisz (Kevin Newton)" <noreply@...>

Issue #18654 has been reported by kddeisz (Kevin Newton).

9 messages 2022/03/22

[#108039] [Ruby master Feature#18655] Merge `IO#wait_readable` and `IO#wait_writable` into core — "byroot (Jean Boussier)" <noreply@...>

Issue #18655 has been reported by byroot (Jean Boussier).

10 messages 2022/03/23

[#108056] [Ruby master Bug#18658] Need openssl 3 support for Ubuntu 22.04 (Ruby 2.7.x and 3.0.x) — "schneems (Richard Schneeman)" <noreply@...>

Issue #18658 has been reported by schneems (Richard Schneeman).

19 messages 2022/03/24

[#108075] [Ruby master Bug#18663] Autoload doesn't work with fiber context switch. — "ioquatix (Samuel Williams)" <noreply@...>

Issue #18663 has been reported by ioquatix (Samuel Williams).

10 messages 2022/03/25

[#108117] [Ruby master Feature#18668] Merge `io-nonblock` gems into core — "Eregon (Benoit Daloze)" <noreply@...>

Issue #18668 has been reported by Eregon (Benoit Daloze).

22 messages 2022/03/30

[ruby-core:108142] [Ruby master Feature#18594] Add a #to_h method on URI::Generic

From: "jimcavoli (Jim Cavoli)" <noreply@...>
Date: 2022-03-31 13:18:35 UTC
List: ruby-core #108142
Issue #18594 has been updated by jimcavoli (Jim Cavoli).


The use case I had that brought this up was actually around generating complex configuration files for another product from a simplified YAML config file, which involved extracting selected URI components to create a tokenized version for naming entities in the generated files. One key feature was the ability to override certain components used for the tokenizing process, and merging (compacted) hash representations was the simplest approach in that case to calculate the final values. Ultimately, it was not that big of a deal, as written above, to transpose an array of the components themselves, but just seemed like a path of more surprise than expected from a stdlib component.

----------------------------------------
Feature #18594: Add a #to_h method on URI::Generic
https://bugs.ruby-lang.org/issues/18594#change-97118

* 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>

In This Thread

Prev Next