class PrefixedIds::PrefixId
def decode(id, fallback: false)
def decode(id, fallback: false) fallback_value = fallback ? id : nil _, id_without_prefix = PrefixedIds.split_id(id, @delimiter) decoded_hashid = @hashids.decode(id_without_prefix) if !valid?(decoded_hashid) fallback_value else _, *ids = decoded_hashid (ids.size == 1) ? ids.first : ids end end
def encode(id)
def encode(id) return if id.nil? @prefix + @delimiter + @hashids.encode([TOKEN] + Array.wrap(id)) end
def initialize(model, prefix, salt: PrefixedIds.salt, minimum_length: PrefixedIds.minimum_length, alphabet: PrefixedIds.alphabet, delimiter: PrefixedIds.delimiter, **options)
def initialize(model, prefix, salt: PrefixedIds.salt, minimum_length: PrefixedIds.minimum_length, alphabet: PrefixedIds.alphabet, delimiter: PrefixedIds.delimiter, **options) @prefix = prefix.to_s @delimiter = delimiter.to_s @hashids = Hashids.new("#{model.table_name}#{salt}", minimum_length, alphabet) end
def valid?(decoded_hashid)
def valid?(decoded_hashid) decoded_hashid.size >= 2 && decoded_hashid.first == TOKEN end