module Urlmatch

Public Class Methods

urlmatch(pattern, url) click to toggle source
# File lib/urlmatch.rb, line 6
def self.urlmatch(pattern, url)
  # (scheme)://(domain)/(path)
  regex = /\A(\*|https|http):\/\/(\*|\*\.[^\*\/]+|[^\*\/]+)\/(.*)\z/
  @@pattern_match = regex.match(pattern)
  raise Error, "Invalid Match Pattern: #{pattern}" unless @@pattern_match
  url_regex = /\A#{scheme}:\/\/#{domain}\/#{path}\z/
  !!url_regex.match(url)
end

Private Class Methods

domain() click to toggle source
# File lib/urlmatch.rb, line 22
def self.domain
  domain_pattern = @@pattern_match[2]
  return (/#{Regexp.quote(domain_pattern)}/) unless domain_pattern.start_with?('*')
  return (/[^\/]+/) if domain_pattern == '*'
  non_wild_domain = domain_pattern[2..-1]
  /([^\/]+\.)?#{Regexp.quote(non_wild_domain)}/
end
path() click to toggle source
# File lib/urlmatch.rb, line 30
def self.path
  path_pattern = @@pattern_match[3]
  path_pattern.sub('*', '.*')
end
scheme() click to toggle source
# File lib/urlmatch.rb, line 17
def self.scheme
  scheme_pattern = @@pattern_match[1]
  scheme_pattern == '*' ? /https?/ : scheme_pattern
end