Sha256: 28a2b79d0c86795a53c356dc9fac4f4f336938cb7448b4096276134cdcb36233

Contents?: true

Size: 1.27 KB

Versions: 19

Compression:

Stored size: 1.27 KB

Contents

module DbCharmer
  module ActiveRecord
    module Sharding

      def self.extended(model)
        model.cattr_accessor(:sharded_connection)
      end

      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

      # Run on default shard (if supported by the sharding method)
      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

      # Enumerate shards
      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

    end
  end
end

Version data entries

19 entries across 19 versions & 2 rubygems

Version Path
db-charmer-1.9.1 lib/db_charmer/active_record/sharding.rb
db-charmer-1.9.0 lib/db_charmer/active_record/sharding.rb
db-charmer-1.8.4 lib/db_charmer/active_record/sharding.rb
db-charmer-1.8.3 lib/db_charmer/active_record/sharding.rb
db-charmer-1.8.2 lib/db_charmer/active_record/sharding.rb
db-charmer-1.8.1 lib/db_charmer/active_record/sharding.rb
db-charmer-1.8.0 lib/db_charmer/active_record/sharding.rb
db-charmer-1.8.0.pre1 lib/db_charmer/active_record/sharding.rb
yam-db-charmer-1.7.4.0 lib/db_charmer/active_record/sharding.rb
yam-db-charmer-1.7.01 lib/db_charmer/active_record/sharding.rb
db-charmer-1.7.1 lib/db_charmer/active_record/sharding.rb
db-charmer-1.7.0 lib/db_charmer/active_record/sharding.rb
db-charmer-1.7.0.pre7 lib/db_charmer/active_record/sharding.rb
db-charmer-1.7.0.pre6 lib/db_charmer/active_record/sharding.rb
db-charmer-1.7.0.pre5 lib/db_charmer/active_record/sharding.rb
db-charmer-1.7.0.pre4 lib/db_charmer/active_record/sharding.rb
db-charmer-1.7.0.pre3 lib/db_charmer/active_record/sharding.rb
db-charmer-1.7.0.pre2 lib/db_charmer/active_record/sharding.rb
db-charmer-1.7.0.pre1 lib/db_charmer/active_record/sharding.rb