Sha256: 7de905af26d65cc6388f4e698f09af4fbad81f9c04d5c4672c9c2096c43c5062

Contents?: true

Size: 966 Bytes

Versions: 1

Compression:

Stored size: 966 Bytes

Contents

module MixedGauge
  # Mapping of slot -> connection_name.
  class ClusterConfig
    attr_reader :name

    # @param [Symbol] name
    def initialize(name)
      @name = name
      @connection_registry = {}
    end

    # @param [Range] slots Range consisted with Fixnum.
    def define_slots(slots)
      @slots = slots
    end

    # @param [Range] slots
    # @param [Symbol] connection connection name
    def register(slots, connection)
      @connection_registry[slots] = connection
    end

    def validate_config!
      # TODO
      # validate non Fixnum slots.
    end

    # @return [Integer]
    def slot_size
      @slots.size
    end

    # @param [Integer] slot
    # @return [Symbol] registered connection name
    def fetch(slot)
      @connection_registry.find {|slot_range, name| slot_range.cover?(slot) }[1]
    end

    # @return [Array<Symbol>] An array of connection name
    def connections
      @connection_registry.values
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mixed_gauge-0.2.1 lib/mixed_gauge/cluster_config.rb