Add pattern matching support to URI::Generic with params #191
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Adds pattern matching support to
URI::Genericvia thedeconstruct_keysmethod, enabling more expressive URI handling in Ruby 2.7+.Motivation
Pattern matching provides a cleaner, more declarative way to work with URIs, especially when routing or filtering based on URI components.
Current approach:
With pattern matching:
Implementation
Added
deconstruct_keysmethod toURI::Genericthat returns a hash with the following keys::scheme,:userinfo,:host,:port,:path,:query,:fragment:params- Parsed query string as a hash with symbol keys (lazily computed only when requested)The
:paramskey is only computed when explicitly requested to avoid unnecessary parsing overhead.Examples
Basic pattern matching:
Matching with query params:
Compatibility
Tests are wrapped with
instance_evalandSyntaxErrorrescue to maintain compatibility with Ruby 2.5+, as pattern matching syntax was introduced in Ruby 2.7.Testing
deconstruct_keyswith and without params