Sha256: 93c67e02580a02a3a1574124128e63a449b711a322ea554bb162ce8ee9c5aa6e
Contents?: true
Size: 1.73 KB
Versions: 4
Compression:
Stored size: 1.73 KB
Contents
module MultiDB class Organization < ActiveRecord::Base connect_to_master has_many :hosts, :class_name => 'OrganizationHost', :inverse_of => :organization, :dependent => :destroy validates :code, :presence => true, :uniqueness => true before_validation :ensure_code scope :active, -> { where(:active => true) } 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 def connect(set_env = false) ActiveRecord::Base.connect_to_organization(self, set_env) end 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 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 end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
multidb-4.0.1 | lib/multi_db/organization.rb |
multidb-3.2.1 | lib/multi_db/organization.rb |
multidb-4.0.0 | lib/multi_db/organization.rb |
multidb-3.2.0 | lib/multi_db/organization.rb |