aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorBrandon Weaver <baweaver@squareup.com>2019-04-09 11:35:09 -0700
committerBrandon Weaver <baweaver@squareup.com>2019-04-09 12:40:26 -0700
commit79c15566da3f267d66cfd6cc8e2257b6aacc0e38 (patch)
treee6adeaff7acf481d1bde1423aa1f6598d2ebcf72 /actionpack
parentdd58d040b2b798105b95e21396e86266bfd40de9 (diff)
downloadrails-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.
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/lib/action_dispatch/journey/path/pattern.rb4
-rw-r--r--actionpack/test/journey/path/pattern_test.rb9
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