Skip to content

Commit

Permalink
make ConnectionProxy.setup_for responsible for establishing master/sl…
Browse files Browse the repository at this point in the history
…ave connections
  • Loading branch information
mislav committed Apr 12, 2009
1 parent 3fb3d62 commit 6e6c7ab
Showing 1 changed file with 22 additions and 16 deletions.
38 changes: 22 additions & 16 deletions lib/active_reload/connection_proxy.rb
@@ -1,22 +1,10 @@
module ActiveReload module ActiveReload
class MasterDatabase < ActiveRecord::Base class MasterDatabase < ActiveRecord::Base
self.abstract_class = true self.abstract_class = true

if config = configurations[Rails.env]['master_database'] || configurations['master_database']
establish_connection config
end
end end


class SlaveDatabase < ActiveRecord::Base class SlaveDatabase < ActiveRecord::Base
self.abstract_class = true self.abstract_class = true

def self.name
ActiveRecord::Base.name
end

if config = configurations[Rails.env]['slave_database'] || configurations['slave_database']
establish_connection config
end
end end


# replaces the object at ActiveRecord::Base.connection to route read queries # replaces the object at ActiveRecord::Base.connection to route read queries
Expand Down Expand Up @@ -49,16 +37,34 @@ def self.setup!
end end


def self.slave_defined? def self.slave_defined?
configurations = ActiveRecord::Base.configurations !!configuration_for(:slave)
configurations[Rails.env]['slave_database'] or configurations['slave_database'] end

def self.configuration_for(type)
config, key = ActiveRecord::Base.configurations, "#{type}_database"
config[Rails.env][key] || config[key]
end end


def self.setup_for(master, slave = nil) def self.setup_for(master, slave = nil)
slave ||= ActiveRecord::Base slave ||= ActiveRecord::Base
slave.send :include, ActiveRecordConnectionMethods slave.__send__(:include, ActiveRecordConnectionMethods)
ActiveRecord::Observer.send :include, ActiveReload::ObserverExtensions ActiveRecord::Observer.__send__(:include, ActiveReload::ObserverExtensions)

# wire up MasterDatabase and SlaveDatabase
establish_connections
slave.connection_proxy = new(master, slave) slave.connection_proxy = new(master, slave)
end end

def self.establish_connections
[:master, :slave].each { |type| establish_connection_for(type) }
end

def self.establish_connection_for(type)
if connection_spec = configuration_for(type)
klass = ActiveReload::const_get("#{type}_database".camelize)
klass.establish_connection(connection_spec)
end
end


def with_master(to_slave = true) def with_master(to_slave = true)
set_to_master! set_to_master!
Expand Down

0 comments on commit 6e6c7ab

Please sign in to comment.