lib/mixed_gauge/config.rb
require 'zlib'
module MixedGauge
# Holding global configuration
class Config
DEFAULT_HASH_FUNCTION = ->(key) { Zlib.crc32(key) }
attr_reader :hash_proc, :cluster_configs
def initialize
@cluster_configs = {}
@hash_proc = DEFAULT_HASH_FUNCTION
end
# Define config for specific cluster.
# See README.md for example.
# @param [Symbol] cluster_name
# @yield [MixedGauge::ClusterConfig]
# @raise [RuntimeError] When this cluster config is invalid.
def define_cluster(cluster_name, &block)
cluster_config = ClusterConfig.new(cluster_name)
cluster_config.instance_eval(&block)
cluster_config.validate_config!
@cluster_configs[cluster_name] = cluster_config
end
# @param [Symbol] cluster_name
# @return [MixedGauge::ClusterConfig]
def fetch_cluster_config(cluster_name)
@cluster_configs.fetch(cluster_name)
end
# Register arbitrary hash function. Hash function must be a proc and
# must return integer.
# See README.md for example.
def register_hash_function(&block)
raise ArgumentError if block.arity != 1
raise ArgumentError unless yield('test value').is_a? Integer
@hash_proc = block
end
end
end