Project

General

Profile

Actions

Feature #18594

open

Add a #to_h method on URI::Generic

Added by jimcavoli (Jim Cavoli) about 2 years ago. Updated about 2 years ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:107679]

Description

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:

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:

uri = ::URI.parse(url)
hsh = uri.to_h

Also happy to put together tests/specs for that as required.

Actions

Also available in: Atom PDF

Like0
Like0Like0