<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -219,7 +219,7 @@ module ActionController
           next_capture = 1
           extraction = segments.collect do |segment|
             x = segment.match_extraction(next_capture)
-            next_capture += Regexp.new(segment.regexp_chunk).number_of_captures
+            next_capture += segment.number_of_captures
             x
           end
           extraction.compact</diff>
      <filename>actionpack/lib/action_controller/routing/route.rb</filename>
    </modified>
    <modified>
      <diff>@@ -13,6 +13,10 @@ module ActionController
         @is_optional = false
       end
 
+      def number_of_captures
+        Regexp.new(regexp_chunk).number_of_captures
+      end
+
       def extraction_code
         nil
       end
@@ -84,6 +88,10 @@ module ActionController
         optional? ? Regexp.optionalize(chunk) : chunk
       end
 
+      def number_of_captures
+        0
+      end
+
       def build_pattern(pattern)
         escaped = Regexp.escape(value)
         if optional? &amp;&amp; ! pattern.empty?
@@ -194,10 +202,16 @@ module ActionController
         end
       end
 
+      def number_of_captures
+        if regexp
+          regexp.number_of_captures + 1
+        else
+          1
+        end
+      end
+
       def build_pattern(pattern)
-        chunk = regexp_chunk
-        chunk = &quot;(#{chunk})&quot; if Regexp.new(chunk).number_of_captures == 0
-        pattern = &quot;#{chunk}#{pattern}&quot;
+        pattern = &quot;#{regexp_chunk}#{pattern}&quot;
         optional? ? Regexp.optionalize(pattern) : pattern
       end
 
@@ -230,6 +244,10 @@ module ActionController
         &quot;(?i-:(#{(regexp || Regexp.union(*possible_names)).source}))&quot;
       end
 
+      def number_of_captures
+        1
+      end
+
       # Don't URI.escape the controller name since it may contain slashes.
       def interpolation_chunk(value_code = local_name)
         &quot;\#{#{value_code}.to_s}&quot;
@@ -275,6 +293,10 @@ module ActionController
         regexp || &quot;(.*)&quot;
       end
 
+      def number_of_captures
+        regexp ? regexp.number_of_captures : 1
+      end
+
       def optionality_implied?
         true
       end</diff>
      <filename>actionpack/lib/action_controller/routing/segments.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>5db9f9b3ad47fadf0b3f12ada1c2ea7b9c15ded5</id>
    </parent>
  </parents>
  <author>
    <name>Jeremy Kemper</name>
    <email>jeremy@bitsweat.net</email>
  </author>
  <url>http://github.com/rails/rails/commit/278b6cd9529f33286449a9be18f1903687814d3f</url>
  <id>278b6cd9529f33286449a9be18f1903687814d3f</id>
  <committed-date>2008-11-10T22:21:09-08:00</committed-date>
  <authored-date>2008-11-10T19:53:53-08:00</authored-date>
  <message>Eliminate excess Regexp creation due to capture counting</message>
  <tree>7ecff6aeef0e2b9b956e8d2b9902cc21aa872183</tree>
  <committer>
    <name>Jeremy Kemper</name>
    <email>jeremy@bitsweat.net</email>
  </committer>
</commit>
