Sha256: 0a668ed0c8d0fa72529a2ff7173dface94f96ada16067852ba445cd8c9ad3e38
Contents?: true
Size: 1 KB
Versions: 3
Compression:
Stored size: 1 KB
Contents
module NYNY class RouteSignature NAME_PATTERN = /:(\S+)/ attr_reader :pattern def initialize signature @pattern = pattern_for signature end def pattern_for string return string if string.is_a? Regexp return string unless string.include? ':' signature = string.start_with?('/') ? string : "/#{string}" build_regex signature end def build_regex signature groups = signature.split('/').map do |part| next part if part.empty? next part unless part.start_with? ':' name = NAME_PATTERN.match(part)[1] %Q{(?<#{name}>\\S+)} end.select {|s| !s.empty? }.join('\/') %r(\/#{groups}) end def match path return (pattern == path ? {} : nil) if pattern.is_a?(String) data = pattern.match path if data if pattern.respond_to? :names Hash[data.names.map {|n| [n.to_sym, URI.unescape(data[n])]}] else {} end else nil end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
nyny-1.0.2 | lib/nyny/route_signature.rb |
nyny-1.0.1 | lib/nyny/route_signature.rb |
nyny-1.0.0 | lib/nyny/route_signature.rb |