Add in programmatic support for bushido's custom domains/subdomains

This commit is contained in:
Sean Grove 2011-03-21 02:32:34 -07:00
parent 73f2f29c01
commit 0e6b2f884f
2 changed files with 98 additions and 0 deletions

46
lib/locomotive/bushido.rb Normal file
View File

@ -0,0 +1,46 @@
require 'bushido'
require 'locomotive/bushido/custom_domain'
module Locomotive
module Bushido
extend ActiveSupport::Concern
included do
class << self
attr_accessor :bushido_domains
end
end
module ClassMethods
def bushido?
ENV["HOSTING_PLATFORM"] == "bushido"
end
def enable_bushido
self.enhance_site_model
end
def enhance_site_model
Site.send :include, Locomotive::Bushido::CustomDomain
end
# manage domains
def add_bushido_domain(name)
Locomotive.logger "[add bushido domain] #{name}"
Bushido::Domains.add_subdomain(name)
self.bushido_domains << name
end
def remove_bushido_domain(name)
Locomotive.logger "[remove bushido domain] #{name}"
Bushido::Domains.remove_subdomain(name)
self.bushido_domains.delete(name)
end
end
end
end

View File

@ -0,0 +1,52 @@
module Locomotive
module Bushido
module CustomDomain
extend ActiveSupport::Concern
included do
after_save :add_bushido_domains
after_destroy :remove_bushido_domains
alias_method_chain :add_subdomain_to_domains, :bushido
end
module InstanceMethods
protected
def add_subdomain_to_domains_with_bushido
unless self.domains_change.nil?
full_subdomain = "#{self.subdomain}.#{Locomotive.config.default_domain}"
@bushido_domains_change = {
:added => self.domains_change.last - self.domains_change.first - [full_subdomain],
:removed => self.domains_change.first - self.domains_change.last - [full_subdomain]
}
end
add_subdomain_to_domains_without_bushido
end
def add_bushido_domains
return if @bushido_domains_change.nil?
@bushido_domains_change[:added].each do |name|
Locomotive.add_bushido_domain(name)
end
@bushido_domains_change[:removed].each do |name|
Locomotive.remove_bushido_domain(name)
end
end
def remove_bushido_domains
self.domains_without_subdomain.each do |name|
Locomotive.remove_bushido_domain(name)
end
end
end
end
end
end