Object
Parses segmented string expression and converts it into a Regexp
Strexp.compile('foo') # => %r{\Afoo\Z} Strexp.compile('foo/:bar', {}, ['/']) # => %r{\Afoo/(?<bar>[^/]+)\Z} Strexp.compile(':foo.example.com') # => %r{\A(?<foo>.+)\.example\.com\Z} Strexp.compile('foo/:bar', {:bar => /[a-z]+/}, ['/']) # => %r{\Afoo/(?<bar>[a-z]+)\Z} Strexp.compile('foo(.:extension)') # => %r{\Afoo(\.(?<extension>.+))?\Z} Strexp.compile('src/*files') # => %r{\Asrc/(?<files>.+)\Z}
# File lib/rack/mount/strexp.rb, line 25 25: def compile(str, requirements = {}, separators = [], anchor = true) 26: return Regexp.compile(str) if str.is_a?(Regexp) 27: 28: requirements = requirements ? requirements.dup : {} 29: normalize_requirements!(requirements, separators) 30: 31: parser = StrexpParser.new 32: parser.anchor = anchor 33: parser.requirements = requirements 34: 35: begin 36: re = parser.scan_str(str) 37: rescue Racc::ParseError => e 38: raise RegexpError, e.message 39: end 40: 41: Regexp.compile(re) 42: end
# File lib/rack/mount/strexp.rb, line 46 46: def normalize_requirements!(requirements, separators) 47: requirements.each do |key, value| 48: if value.is_a?(Regexp) 49: if regexp_has_modifiers?(value) 50: requirements[key] = value 51: else 52: requirements[key] = value.source 53: end 54: else 55: requirements[key] = Regexp.escape(value) 56: end 57: end 58: requirements.default ||= separators.any? ? 59: "[^#{separators.join}]+" : '.+' 60: requirements 61: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.