40 lines
1.2 KiB
Ruby
40 lines
1.2 KiB
Ruby
module Locomotive
|
|
module Routing
|
|
class DefaultConstraint
|
|
|
|
def self.matches?(request)
|
|
domain, subdomain = domain_and_subdomain(request)
|
|
subdomain = 'www' if subdomain.blank?
|
|
|
|
domain == Locomotive.config.default_domain && Locomotive.config.reserved_subdomains.include?(subdomain)
|
|
end
|
|
|
|
# see actionpack/lib/action_dispatch/http/url.rb for more information
|
|
def self.domain_and_subdomain(request)
|
|
subdomain = extract_subdomain(request)
|
|
[extract_domain(request), extract_subdomain(request)]
|
|
end
|
|
|
|
def self.extract_domain(request, tld_length = 1)
|
|
return nil unless named_host?(request.host)
|
|
request.host.split('.').last(1 + tld_length).join('.')
|
|
end
|
|
|
|
def self.extract_subdomain(request, tld_length = 1)
|
|
subdomains(request, tld_length).join('.')
|
|
end
|
|
|
|
def self.named_host?(host)
|
|
!(host.nil? || /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.match(host))
|
|
end
|
|
|
|
def self.subdomains(request, tld_length = 1)
|
|
return [] unless named_host?(request.host)
|
|
parts = request.host.split('.')
|
|
parts[0..-(tld_length+2)]
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|