diff --git a/lib/ulid/constants.rb b/lib/ulid/constants.rb index 2a8eed5..cbd209a 100644 --- a/lib/ulid/constants.rb +++ b/lib/ulid/constants.rb @@ -12,10 +12,10 @@ module Constants # Crockford's Base32. Alphabet portion is missing I, L, O, and U. ENCODING = "0123456789ABCDEFGHJKMNPQRSTVWXYZ" - + ENCODING_LIST = ENCODING.split('') # Byte to index table for O(1) lookups when unmarshaling. # We rely on nil as sentinel value for invalid indexes. - B32REF = Hash[ ENCODING.split('').each_with_index.to_a ] + B32REF = Hash[ ENCODING_LIST.each_with_index.to_a ] end end diff --git a/lib/ulid/generate.rb b/lib/ulid/generate.rb index 17a715e..48c1a87 100644 --- a/lib/ulid/generate.rb +++ b/lib/ulid/generate.rb @@ -24,34 +24,34 @@ def encode32 # decoded into the original bytes. # 10 byte timestamp - output << ENCODING[(id[0]&224)>>5] - output << ENCODING[id[0]&31] - output << ENCODING[(id[1]&248)>>3] - output << ENCODING[((id[1]&7)<<2)|((id[2]&192)>>6)] - output << ENCODING[(id[2]&62)>>1] - output << ENCODING[((id[2]&1)<<4)|((id[3]&240)>>4)] - output << ENCODING[((id[3]&15)<<1)|((id[4]&128)>>7)] - output << ENCODING[(id[4]&124)>>2] - output << ENCODING[((id[4]&3)<<3)|((id[5]&224)>>5)] - output << ENCODING[id[5]&31] + output << ENCODING_LIST[(id[0]&224)>>5] + output << ENCODING_LIST[id[0]&31] + output << ENCODING_LIST[(id[1]&248)>>3] + output << ENCODING_LIST[((id[1]&7)<<2)|((id[2]&192)>>6)] + output << ENCODING_LIST[(id[2]&62)>>1] + output << ENCODING_LIST[((id[2]&1)<<4)|((id[3]&240)>>4)] + output << ENCODING_LIST[((id[3]&15)<<1)|((id[4]&128)>>7)] + output << ENCODING_LIST[(id[4]&124)>>2] + output << ENCODING_LIST[((id[4]&3)<<3)|((id[5]&224)>>5)] + output << ENCODING_LIST[id[5]&31] # 16 bytes of entropy - output << ENCODING[(id[6]&248)>>3] - output << ENCODING[((id[6]&7)<<2)|((id[7]&192)>>6)] - output << ENCODING[(id[7]&62)>>1] - output << ENCODING[((id[7]&1)<<4)|((id[8]&240)>>4)] - output << ENCODING[((id[8]&15)<<1)|((id[9]&128)>>7)] - output << ENCODING[(id[9]&124)>>2] - output << ENCODING[((id[9]&3)<<3)|((id[10]&224)>>5)] - output << ENCODING[id[10]&31] - output << ENCODING[(id[11]&248)>>3] - output << ENCODING[((id[11]&7)<<2)|((id[12]&192)>>6)] - output << ENCODING[(id[12]&62)>>1] - output << ENCODING[((id[12]&1)<<4)|((id[13]&240)>>4)] - output << ENCODING[((id[13]&15)<<1)|((id[14]&128)>>7)] - output << ENCODING[(id[14]&124)>>2] - output << ENCODING[((id[14]&3)<<3)|((id[15]&224)>>5)] - output << ENCODING[id[15]&31] + output << ENCODING_LIST[(id[6]&248)>>3] + output << ENCODING_LIST[((id[6]&7)<<2)|((id[7]&192)>>6)] + output << ENCODING_LIST[(id[7]&62)>>1] + output << ENCODING_LIST[((id[7]&1)<<4)|((id[8]&240)>>4)] + output << ENCODING_LIST[((id[8]&15)<<1)|((id[9]&128)>>7)] + output << ENCODING_LIST[(id[9]&124)>>2] + output << ENCODING_LIST[((id[9]&3)<<3)|((id[10]&224)>>5)] + output << ENCODING_LIST[id[10]&31] + output << ENCODING_LIST[(id[11]&248)>>3] + output << ENCODING_LIST[((id[11]&7)<<2)|((id[12]&192)>>6)] + output << ENCODING_LIST[(id[12]&62)>>1] + output << ENCODING_LIST[((id[12]&1)<<4)|((id[13]&240)>>4)] + output << ENCODING_LIST[((id[13]&15)<<1)|((id[14]&128)>>7)] + output << ENCODING_LIST[(id[14]&124)>>2] + output << ENCODING_LIST[((id[14]&3)<<3)|((id[15]&224)>>5)] + output << ENCODING_LIST[id[15]&31] output end