Module: ActiveRecord::Slave::Model::ClassMethods

Defined in:
lib/active_record/slave/model.rb

Instance Method Summary collapse

Instance Method Details

#define_slave_class(base_class, connection_name) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
# File 'lib/active_record/slave/model.rb', line 30

def define_slave_class(base_class, connection_name)
  model = Class.new(base_class) do
    module_eval <<-RUBY, __FILE__, __LINE__ + 1
            def self.name
              "#{base_class.name}::Slave::#{connection_name}"
            end
          RUBY
  end
  model.class_eval { establish_connection(connection_name) }
  model
end

#slave_forObject



26
27
28
# File 'lib/active_record/slave/model.rb', line 26

def slave_for
  @slave_class_repository.fetch @replication_router.slave_connection_name
end

#use_slave(replication_name) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/active_record/slave/model.rb', line 13

def use_slave(replication_name)
  replication_config  = ActiveRecord::Slave.config.fetch_replication_config replication_name
  @replication_router = ActiveRecord::Slave::ReplicationRouter.new replication_config

  establish_connection replication_config.master_connection_name

  @slave_class_repository = {}
  base_class = self
  replication_config.slave_connection_names.keys.each do |connection_name|
    @slave_class_repository[connection_name] = define_slave_class base_class, connection_name
  end
end