Sha256: 5b3c8e5cbaca5add4892cb9d3a8e16e276ea55182667f422d3a8ddf81e7eb8d2
Contents?: true
Size: 1.39 KB
Versions: 3
Compression:
Stored size: 1.39 KB
Contents
module ActiveRecord::Turntable class Shard module Connections; end def self.connection_classes Connections.constants.map { |name| Connections.const_get(name) } end DEFAULT_CONFIG = { "connection" => (defined?(Rails) ? Rails.env : "development"), }.with_indifferent_access attr_reader :name def initialize(shard_spec) @config = DEFAULT_CONFIG.merge(shard_spec) @name = @config[:connection] ActiveRecord::Base.turntable_connections[name] = connection_pool end def connection_pool connection_klass.connection_pool end def connection connection_pool.connection.tap do |conn| conn.turntable_shard_name ||= name end end private def connection_klass @connection_klass ||= create_connection_class end def create_connection_class klass = connection_class_instance klass.remove_connection klass.establish_connection ActiveRecord::Base.connection_pool.spec.config[:shards][name].with_indifferent_access klass end def connection_class_instance if Connections.const_defined?(name.classify) klass = Connections.const_get(name.classify) else klass = Class.new(ActiveRecord::Base) Connections.const_set(name.classify, klass) klass.abstract_class = true end klass end end end
Version data entries
3 entries across 3 versions & 1 rubygems