yuemori/activerecord-shard_for

View on GitHub
lib/activerecord/shard_for/abstract_shard_repository.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
module ActiveRecord
  module ShardFor
    class AbstractShardRepository
      attr_reader :shards

      # @param [Symbol] connection_name
      # @return [Class] A model class for this shard
      def fetch(connection_name)
        shards.fetch(connection_name)
      end

      # @param [Object] key sharding key object for connection
      # @return [Class, nil] A AR model class.
      def fetch_by_key(key)
        shards.values.find do |model|
          case model.assigned_key
          when Range then model.assigned_key.include?(key)
          else model.assigned_key == key
          end
        end
      end

      # @return [Array<Class>]
      def all
        shards.values
      end

      private

      # @param [Symbol] connection_name
      # @return [String]
      def generate_shard_name(connection_name)
        "ShardFor#{connection_name.to_s.tr('-', '_').classify}"
      end
    end
  end
end