class EnsureSubdomain
Attributes
subdomains[RW]
Public Class Methods
new(subdomains)
click to toggle source
# File lib/ensure_subdomain.rb, line 6 def initialize(subdomains) subdomains = [subdomains] unless subdomains.respond_to?(:map) self.subdomains = subdomains.map { |s| s.sub(/\.$/, '') } end
Public Instance Methods
matches?(request)
click to toggle source
# File lib/ensure_subdomain.rb, line 11 def matches?(request) # Don't deal with addresses like http://0.0.0.0:3000 request.domain.present? and requires_redirect?(request) end
to(params, request)
click to toggle source
Only called when not on an appropriate domain
# File lib/ensure_subdomain.rb, line 17 def to(params, request) url = request.protocol url << redirect_to_full_domain(request) url << "/#{params[:path]}" if params[:path].present? url end
Private Instance Methods
apex_required?()
click to toggle source
# File lib/ensure_subdomain.rb, line 48 def apex_required? self.subdomains.size == 1 && self.subdomains.first == '' end
on_allowed_subdomain?(request)
click to toggle source
# File lib/ensure_subdomain.rb, line 42 def on_allowed_subdomain?(request) self.subdomains.select do |subdomain| request.subdomain == subdomain end.size > 0 end
redirect_to_full_domain(request)
click to toggle source
# File lib/ensure_subdomain.rb, line 25 def redirect_to_full_domain(request) parts = [] parts << self.subdomains.first if self.subdomains.any? parts << request.subdomain if vendor_url?(request) parts << request.domain parts.reject(&:empty?).join('.') end
requires_redirect?(request)
click to toggle source
# File lib/ensure_subdomain.rb, line 33 def requires_redirect?(request) shouldnt_have_a_subdomain?(request) or !on_allowed_subdomain?(request) end
shouldnt_have_a_subdomain?(request)
click to toggle source
# File lib/ensure_subdomain.rb, line 37 def shouldnt_have_a_subdomain?(request) # ''.match('www') #=> nil, which is is the opposite of what we want apex_required? and request.subdomain.present? end
vendor_url?(request)
click to toggle source
# File lib/ensure_subdomain.rb, line 52 def vendor_url?(request) request.domain.match /heroku/ end