Module: SubdomainRoutes::Routing::RouteSet::Mapper

Defined in:
lib/subdomain_routes/mapper.rb

Instance Method Summary collapse

Instance Method Details

#subdomain(*subdomains, &block) ⇒ Object Also known as: subdomains



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/subdomain_routes/mapper.rb', line 5

def subdomain(*subdomains, &block)
  options = subdomains.extract_options!.dup
  if subdomains.empty?
    if model = options.delete(:model)
      raise ArgumentError, "Invalid model name" if model.blank?
      models = model.to_s.downcase.pluralize
      model = models.singularize
      model_id = model.foreign_key.to_sym
      subdomain_options = { :subdomains => model_id }
      name = options.has_key?(:name) ? options.delete(:name) : model
    else
      raise ArgumentError, "Please specify at least one subdomain!"
    end
  else
    subdomains.map!(&:to_s)
    subdomains.map!(&:downcase)
    subdomains.uniq!
    subdomains.compact.each do |subdomain|
      raise ArgumentError, "Illegal subdomain format: #{subdomain.inspect}" unless subdomain.blank? || SubdomainRoutes.valid_subdomain?(subdomain)
    end
    if subdomains.include? ""
      raise ArgumentError, "Can't specify a nil subdomain unless you set Config.domain_length!" unless Config.domain_length
    end
    subdomain_options = { :subdomains => subdomains }
    name = subdomains.reject(&:blank?).first
    name = options.delete(:name) if options.has_key?(:name)
  end
  name = name.to_s.downcase.gsub(/[^(a-z0-9)]/, ' ').squeeze(' ').strip.gsub(' ', '_') unless name.blank?
  subdomain_options.merge! :name_prefix => "#{name}_", :namespace => "#{name}/" unless name.blank?
  with_options(subdomain_options.merge(options), &block)
end