engine/lib/locomotive/heroku.rb

62 lines
1.6 KiB
Ruby
Raw Normal View History

2010-06-14 13:04:01 +00:00
require 'heroku'
require 'heroku/client'
2010-07-29 23:21:48 +00:00
require 'locomotive/heroku/custom_domain'
2010-06-14 13:04:01 +00:00
module Locomotive
module Heroku
2010-06-14 13:04:01 +00:00
extend ActiveSupport::Concern
2010-06-14 13:04:01 +00:00
included do
class << self
attr_accessor :heroku_connection
attr_accessor :heroku_domains
end
end
2010-06-14 13:04:01 +00:00
module ClassMethods
2010-06-14 13:04:01 +00:00
def heroku?
!self.config.heroku.nil? && self.config.heroku.respond_to?(:[])
end
2010-06-14 13:04:01 +00:00
def enable_heroku
raise 'Heroku application name is mandatory' if self.config.heroku[:name].blank?
2010-06-14 13:04:01 +00:00
self.open_heroku_connection
self.enhance_site_model
2010-06-14 13:04:01 +00:00
# "cache" domains for better performance
self.heroku_domains = self.heroku_connection.list_domains(self.config.heroku[:name]).collect { |h| h[:domain] }
end
2010-06-14 13:04:01 +00:00
def open_heroku_connection
login = self.config.heroku[:login] || ENV['HEROKU_LOGIN']
password = self.config.heroku[:password] || ENV['HEROKU_PASSWORD']
2010-06-14 13:04:01 +00:00
self.heroku_connection = ::Heroku::Client.new(login, password)
end
2010-06-14 13:04:01 +00:00
def enhance_site_model
Site.send :include, Locomotive::Heroku::CustomDomain
end
2010-06-14 13:04:01 +00:00
# manage domains
2010-06-14 13:04:01 +00:00
def add_heroku_domain(name)
Locomotive.logger "[add heroku domain] #{name}"
self.heroku_connection.add_domain(self.config.heroku[:name], name)
self.heroku_domains << name
end
2010-06-14 13:04:01 +00:00
def remove_heroku_domain(name)
Locomotive.logger "[remove heroku domain] #{name}"
self.heroku_connection.remove_domain(self.config.heroku[:name], name)
self.heroku_domains.delete(name)
end
2010-06-14 13:04:01 +00:00
end
2010-06-14 13:04:01 +00:00
end
end