class Rack::Mount::RegexpWithNamedGroups
A wrapper that adds shim named capture support to older versions of Ruby.
Because the named capture syntax causes a parse error, an alternate syntax is used to indicate named captures.
Ruby 1.9+ named capture syntax:
/(?<foo>[a-z]+)/
Ruby 1.8 shim syntax:
/(?:<foo>[a-z]+)/
Public Class Methods
new(regexp)
click to toggle source
Wraps Regexp with named capture support.
Calls superclass method
# File lib/rack/mount/regexp_with_named_groups.rb, line 30 def initialize(regexp) regexp = Regexp.compile(regexp) unless regexp.is_a?(Regexp) source, options = regexp.source, regexp.options @names, scanner = [], StringScanner.new(source) while scanner.skip_until(/\(/) if scanner.scan(/\?:<([^>]+)>/) @names << scanner[1] elsif scanner.scan(/\?(i?m?x?\-?i?m?x?)?:/) # ignore noncapture else @names << nil end end source.gsub!(/\?:<([^>]+)>/, '') @names = [] unless @names.any? @names.freeze super(source, options) end
Public Instance Methods
eql?(other)
click to toggle source
Calls superclass method
# File lib/rack/mount/regexp_with_named_groups.rb, line 64 def eql?(other) super && @names.eql?(other.names) end
named_captures()
click to toggle source
# File lib/rack/mount/regexp_with_named_groups.rb, line 56 def named_captures named_captures = {} names.each_with_index { |n, i| named_captures[n] = [i+1] if n } named_captures end
names()
click to toggle source
# File lib/rack/mount/regexp_with_named_groups.rb, line 52 def names @names.dup end