Я бы использовал базу данных для генерации уникальных ключей, но если вы настаиваете на том, чтобы делать это трудным путем:
class AlnumKey
def initialize
@chars = ('0' .. '9').to_a + ('a' .. 'z').to_a
end
def to_int(key)
i = 0
key.each_char do |ch|
i = i * @chars.length + @chars.index(ch)
end
i
end
def to_key(i)
s = ""
while i > 0
s += @chars[i % @chars.length]
i /= @chars.length
end
s.reverse
end
def next_key(last_key)
to_key(to_int(last_key) + 1)
end
end
al = AlnumKey.new
puts al.next_key("ab")
puts al.next_key("1")
puts al.next_key("zz")
Конечно, вам придется где-то хранить свой текущий ключ, и этони в коем случае не является многопоточным и т.д.