Class: ActiveRecord::ShardFor::ReplicationMapping

Inherits:
Object
  • Object
show all
Defined in:
lib/activerecord/shard_for/replication_mapping.rb

Instance Method Summary collapse

Constructor Details

#initialize(mapping) ⇒ ReplicationMapping

Returns a new instance of ReplicationMapping.



4
5
6
7
# File 'lib/activerecord/shard_for/replication_mapping.rb', line 4

def initialize(mapping)
  @mapping = mapping
  @lock = Mutex.new
end

Instance Method Details

#switch(from, role_name) ⇒ Class, Object

Returns if block given then yielded result else target shard model.

Parameters:

  • A (Class)

    shard model having connection to specific shard

  • A (Symbol)

    role name of target cluster.

Returns:

  • (Class, Object)

    if block given then yielded result else target shard model.



13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/activerecord/shard_for/replication_mapping.rb', line 13

def switch(from, role_name)
  @lock.synchronize { constantize! unless constantized? }

  model = @mapping.fetch(role_name)
  target_shard_model = model.shard_repository.fetch_by_key(from.assigned_key)

  if block_given?
    target_shard_model.connection_pool.with_connection { yield target_shard_model }
  else
    target_shard_model
  end
end