diff options
author | Brandon Weaver <baweaver@squareup.com> | 2019-04-09 11:35:09 -0700 |
---|---|---|
committer | Brandon Weaver <baweaver@squareup.com> | 2019-04-09 12:40:26 -0700 |
commit | 79c15566da3f267d66cfd6cc8e2257b6aacc0e38 (patch) | |
tree | e6adeaff7acf481d1bde1423aa1f6598d2ebcf72 | |
parent | dd58d040b2b798105b95e21396e86266bfd40de9 (diff) | |
download | rails-79c15566da3f267d66cfd6cc8e2257b6aacc0e38.tar.gz rails-79c15566da3f267d66cfd6cc8e2257b6aacc0e38.tar.bz2 rails-79c15566da3f267d66cfd6cc8e2257b6aacc0e38.zip |
Adds named_captures to MatchData to emulate Regex
This change adds a `named_captures` method to
`ActionDispatch::Journey::Path::MatchData` in order to emulate a similar
method present on `Regex`'s `MatchData` present in Ruby core.
This method can be useful for introspection of routes without the need
to use `zip` while testing or developing in Rails core.
-rw-r--r-- | actionpack/lib/action_dispatch/journey/path/pattern.rb | 4 | ||||
-rw-r--r-- | actionpack/test/journey/path/pattern_test.rb | 9 |
2 files changed, 13 insertions, 0 deletions
diff --git a/actionpack/lib/action_dispatch/journey/path/pattern.rb b/actionpack/lib/action_dispatch/journey/path/pattern.rb index 697f5b9d8b..a968df5f19 100644 --- a/actionpack/lib/action_dispatch/journey/path/pattern.rb +++ b/actionpack/lib/action_dispatch/journey/path/pattern.rb @@ -136,6 +136,10 @@ module ActionDispatch Array.new(length - 1) { |i| self[i + 1] } end + def named_captures + @names.zip(captures).to_h + end + def [](x) idx = @offsets[x - 1] + x @match[idx] diff --git a/actionpack/test/journey/path/pattern_test.rb b/actionpack/test/journey/path/pattern_test.rb index fcfaba96b0..2f39abcb92 100644 --- a/actionpack/test/journey/path/pattern_test.rb +++ b/actionpack/test/journey/path/pattern_test.rb @@ -280,6 +280,15 @@ module ActionDispatch assert_equal "list", match[1] assert_equal "rss", match[2] end + + def test_named_captures + path = Path::Pattern.from_string "/books(/:action(.:format))" + + uri = "/books/list.rss" + match = path =~ uri + named_captures = { "action" => "list", "format" => "rss" } + assert_equal named_captures, match.named_captures + end end end end |