class MixedGauge::ClusterConfig::Validator
Public Class Methods
new(slot_size, connection_registry)
click to toggle source
@param [Integer] slot_size @param [Hash{Range => Symbol}] connection_registry
# File lib/mixed_gauge/cluster_config.rb, line 49 def initialize(slot_size, connection_registry) @slot_size = slot_size @connection_registry = connection_registry end
Public Instance Methods
validate!()
click to toggle source
@raise [RuntimeError]
# File lib/mixed_gauge/cluster_config.rb, line 55 def validate! all_start_points = @connection_registry.keys.map(&:min).sort all_end_points = @connection_registry.keys.map(&:max).sort check_first_start_point(all_start_points.min) check_coverage(all_start_points, all_end_points) check_last_end_point(all_end_points.max) end
Private Instance Methods
check_coverage(all_start_points, all_end_points)
click to toggle source
@param [Array<Integer>] all_start_points @param [Array<Integer>] all_end_points
# File lib/mixed_gauge/cluster_config.rb, line 73 def check_coverage(all_start_points, all_end_points) all_end_points.each_with_index do |end_point, i| break if all_end_points.size == i + 1 next_start_point = all_start_points[i + 1] report_invalid_coverage(end_point, all_start_points[i + 1]) unless end_point.succ == next_start_point end end
check_first_start_point(first_start_point)
click to toggle source
@param [Integer] first_start_point
# File lib/mixed_gauge/cluster_config.rb, line 67 def check_first_start_point(first_start_point) report_invalid_first_start_point(first_start_point) unless first_start_point.zero? end
check_last_end_point(last_end_point)
click to toggle source
@param [Integer] last_end_point
# File lib/mixed_gauge/cluster_config.rb, line 83 def check_last_end_point(last_end_point) report_invalid_last_end_point(last_end_point) unless last_end_point == @slot_size - 1 end
report_invalid_coverage(end_point, next_start_point)
click to toggle source
@param [Integer] end_point @param [Integer] next_start_point rubocop:disable Metrics/LineLength
# File lib/mixed_gauge/cluster_config.rb, line 97 def report_invalid_coverage(end_point, next_start_point) end_point_slot = @connection_registry.keys.find { |range| range.max == end_point } end_point_connection = @connection_registry[end_point_slot] start_point_slot = @connection_registry.keys .find { |range| range.min == next_start_point && range.max != end_point } start_point_connection = @connection_registry[start_point_slot] raise %(End point `#{end_point}` of "#{end_point_connection}" or start point `#{next_start_point}` of "#{start_point_connection}" is invalid. Next start point must be "previous end point + 1".) end
report_invalid_first_start_point(point)
click to toggle source
@param [Integer] point
# File lib/mixed_gauge/cluster_config.rb, line 88 def report_invalid_first_start_point(point) r = @connection_registry.keys.find { |range| range.min == point } connection = @connection_registry[r] raise "First start point must be `0` but given `#{point}`: invalid slot configuration for #{connection}" end
report_invalid_last_end_point(point)
click to toggle source
@param [Integer] point rubocop:disable Metrics/LineLength
# File lib/mixed_gauge/cluster_config.rb, line 110 def report_invalid_last_end_point(point) r = @connection_registry.keys.find { |range| range.max == point } connection = @connection_registry[r] raise "Last end point must be `#{@slot_size - 1}` but given `#{point}`: invalid slot configuration for #{connection}" end