Class: ActiveRecord::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/knockoff/active_record/base.rb

Class Method Summary collapse

Class Method Details

.connectionObject



6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/knockoff/active_record/base.rb', line 6

def connection
  target = Thread.current[:knockoff] || Knockoff.default_target
  case target
  when :replica
    # Attempts to use a random replica connection, but otherwise falls back to primary
    Knockoff.replica_pool.random_replica_connection.original_connection
  when :primary, NilClass
    original_connection
  else
    raise Knockoff::Error, "Invalid target: #{Thread.current[:knockoff]}"
  end
end

.on_replicaObject

Generate scope at top level e.g. User.on_replica



20
21
22
23
24
25
26
# File 'lib/knockoff/active_record/base.rb', line 20

def on_replica
  # Why where(nil)?
  # http://stackoverflow.com/questions/18198963/with-rails-4-model-scoped-is-deprecated-but-model-all-cant-replace-it
  context = where(nil)
  context.knockoff_target = :replica
  context
end

.original_connectionObject



4
# File 'lib/knockoff/active_record/base.rb', line 4

alias_method :original_connection, :connection