class MultiDB::Organization

Public Instance Methods

connect(set_env = false) click to toggle source
# File lib/multi_db/organization.rb, line 25
def connect(set_env = false)
  ActiveRecord::Base.connect_to_organization(self, set_env)
end
create_database() click to toggle source
# File lib/multi_db/organization.rb, line 29
def create_database
  if code =~ /^[-\w\d]+$/
    begin
      ActiveRecord::Base.connection.create_database("#{ActiveRecord::Base.configurations[Rails.env]['database']}_#{code}")
    rescue Exception => e
      if e.message =~ /Can't create database '(.*?)'; database exists/
        puts "Warning: database #{$1} already exists"
      else
        throw e
      end
    end
    
    connect
    
    ActiveRecord::Migration.suppress_messages do
      load "#{Rails.root}/db/schema_organization.rb"
    end
  end
end
drop_database!() click to toggle source
# File lib/multi_db/organization.rb, line 49
def drop_database!
  if Rails.env.production?
    raise "Won't drop database in production mode for safety reasons."
  else
    if code =~ /^[-\w\d]+$/
      # watch for sql injection here
      ActiveRecord::Base.connection.drop_database("#{ActiveRecord::Base.configurations[Rails.env]['database']}_#{code}")
    end
  end
end
ensure_code() click to toggle source
# File lib/multi_db/organization.rb, line 12
def ensure_code
  if code.blank?
    return true unless name
    new_code = name.downcase.gsub(/[^-\w\d]+/, '-')
    self.code = new_code
    i = 2
    while self.class.where(:code => code, :active => true).first
      self.code = "#{new_code}#{i}"
      i += 1
    end
  end
end