# -*- encoding : utf-8 -*- module RedisScanner class Rule PRESET_RULES = [ [/(:\d+:)/, "::"], [/(:\w{8}-\w{4}-\w{4}-\w{4}-\w{12}:)/, "::"], [/(:\d{4}-\d{2}-\d{2}:)/, "::"], [/(:\d+)$/, ":"], [/(:\w{8}-\w{4}-\w{4}-\w{4}-\w{12})$/, ":"], [/(:\d{4}-\d{2}-\d{2})$/, ":"] ] def initialize @rules = PRESET_RULES end def extract_pattern(key) key = force_valid_key(key) @rules.each do |rule, replacer| while (m = rule.match(key)) key = key.sub(m[1], replacer) end end key end private def force_valid_key(key) if key.valid_encoding? key else key.size.times do |index| unless key[index].valid_encoding? key[index] = "?" end end key end end end end