class Hijacker::Database
Public Class Methods
connect_each(sites = all.map(&:database)) { |db| ... }
click to toggle source
# File lib/hijacker/database.rb, line 102 def self.connect_each(sites = all.map(&:database)) original_database = Hijacker.current_client begin sites.each do |db| begin Hijacker.connect_to_master(db) rescue MissingDatabaseError next end yield db end ensure begin Hijacker.connect_to_master(original_database) rescue MissingDatabaseError end end end
connect_to_each_sister_site(&block)
click to toggle source
# File lib/hijacker/database.rb, line 81 def self.connect_to_each_sister_site(&block) sites = find_shared_sites_for(Hijacker.current_client) sites.delete(Hijacker.current_client) connect_each(sites, &block) end
count_each(options = {}, &blk)
click to toggle source
# File lib/hijacker/database.rb, line 121 def self.count_each(options = {}, &blk) acc = {} if options.fetch(:progress, true) require 'progress' Progress.start("Counting...", count) do connect_each do |db| count = blk.call acc[db] = count if count > 0 Progress.step end end else connect_each do |db| count = blk.call acc[db] = count if count > 0 end end if options.fetch(:print, true) width = acc.keys.map(&:length).max acc.sort_by(&:last).each do |db, count| puts("%#{width}s: %s" % [db, count]) end end acc end
current()
click to toggle source
# File lib/hijacker/database.rb, line 49 def self.current find(:first, :conditions => {:database => Hijacker.current_client}) end
disabled_databases()
click to toggle source
# File lib/hijacker/database.rb, line 150 def self.disabled_databases Hijacker::Database.connection.select_values("SELECT `database_name` FROM `disabled_databases`") end
find_by_name(name)
click to toggle source
# File lib/hijacker/database.rb, line 45 def self.find_by_name(name) find_by_database(name) end
find_master_and_sister_for(client)
click to toggle source
always returns a master, sister can be nil
# File lib/hijacker/database.rb, line 65 def self.find_master_and_sister_for(client) master = self.find_master_for(client) sister = master.nil? ? nil : client master ||= client return master, sister end
find_master_for(client)
click to toggle source
returns a string or nil
# File lib/hijacker/database.rb, line 54 def self.find_master_for(client) @masters ||= {} @masters[client] ||= self.connection.select_values( "SELECT master.database "\ "FROM `databases` AS master, `databases` AS sister "\ "WHERE sister.database = #{ActiveRecord::Base.connection.quote(client)} "\ "AND sister.master_id = master.id" ).first end
Private Class Methods
catch_missing_database(&block)
click to toggle source
# File lib/hijacker/database.rb, line 165 def self.catch_missing_database(&block) block.call end
Public Instance Methods
disable!()
click to toggle source
# File lib/hijacker/database.rb, line 154 def disable! Hijacker::Database.connection. execute("REPLACE INTO `disabled_databases` (`database_name`) VALUES ('#{database}')") end
enable!()
click to toggle source
# File lib/hijacker/database.rb, line 159 def enable! Hijacker::Database.connection. execute("DELETE FROM `disabled_databases` WHERE `database_name` = '#{database}'") end
sister?()
click to toggle source
# File lib/hijacker/database.rb, line 41 def sister? master_id.present? end