module DbCharmer::ActiveRecord::Sharding

Public Class Methods

extended(model) click to toggle source
# File lib/db_charmer/active_record/sharding.rb, line 5
def self.extended(model)
  model.cattr_accessor(:sharded_connection)
end

Public Instance Methods

on_default_shard(proxy_target = nil, &block) click to toggle source

Run on default shard (if supported by the sharding method)

# File lib/db_charmer/active_record/sharding.rb, line 16
def on_default_shard(proxy_target = nil, &block)
  raise ArgumentError, "No sharded connection configured!" unless sharded_connection

  if sharded_connection.support_default_shard?
    shard_for(:default, proxy_target, &block)
  else
    raise ArgumentError, "This model's sharding method does not support default shard"
  end
end
on_each_shard(proxy_target = nil, &block) click to toggle source

Enumerate shards

# File lib/db_charmer/active_record/sharding.rb, line 27
def on_each_shard(proxy_target = nil, &block)
  raise ArgumentError, "No sharded connection configured!" unless sharded_connection

  conns = sharded_connection.shard_connections
  raise ArgumentError, "This model's sharding method does not support shards enumeration" unless conns

  conns.each do |conn|
    on_db(conn, proxy_target, &block)
  end
end
shard_for(key, proxy_target = nil, &block) click to toggle source
# File lib/db_charmer/active_record/sharding.rb, line 9
def shard_for(key, proxy_target = nil, &block)
  raise ArgumentError, "No sharded connection configured!" unless sharded_connection
  conn = sharded_connection.sharder.shard_for_key(key)
  on_db(conn, proxy_target, &block)
end