module Hashid::Rails::ClassMethods
Public Instance Methods
decode_id(ids, fallback: false)
click to toggle source
@param ids [String, Integer, Array<Integer, String>] id(s) to decode. @param fallback [Boolean] indicates whether to return the passed in
id(s) if unable to decode or if already decoded.
# File lib/hashid/rails.rb, line 60 def decode_id(ids, fallback: false) if ids.is_a?(Array) ids.map { |id| hashid_decode(id, fallback: fallback) } else hashid_decode(ids, fallback: fallback) end end
encode_id(ids)
click to toggle source
# File lib/hashid/rails.rb, line 49 def encode_id(ids) if ids.is_a?(Array) ids.map { |id| hashid_encode(id) } else hashid_encode(ids) end end
find(*ids)
click to toggle source
Calls superclass method
# File lib/hashid/rails.rb, line 68 def find(*ids) expects_array = ids.first.is_a?(Array) uniq_ids = ids.flatten.compact.uniq uniq_ids = uniq_ids.first unless expects_array || uniq_ids.size > 1 if Hashid::Rails.configuration.override_find super(decode_id(uniq_ids, fallback: true)) else super end end
find_by_hashid(hashid)
click to toggle source
# File lib/hashid/rails.rb, line 81 def find_by_hashid(hashid) find_by(id: decode_id(hashid, fallback: false)) end
find_by_hashid!(hashid)
click to toggle source
# File lib/hashid/rails.rb, line 85 def find_by_hashid!(hashid) find_by!(id: decode_id(hashid, fallback: false)) end
has_many(*args, &block)
click to toggle source
Calls superclass method
# File lib/hashid/rails.rb, line 43 def has_many(*args, &block) options = args.extract_options! options[:extend] = Array(options[:extend]).push(ClassMethods) super(*args, options, &block) end
relation()
click to toggle source
Calls superclass method
# File lib/hashid/rails.rb, line 39 def relation super.tap { |r| r.extend ClassMethods } end
Private Instance Methods
find_hashid_prefix()
click to toggle source
# File lib/hashid/rails.rb, line 124 def find_hashid_prefix if Hashid::Rails.configuration.use_prefix && respond_to?(:hashid_prefix) "#{hashid_prefix}#{Hashid::Rails.configuration.hashid_prefix_separator}" else "" end end
hashid_decode(id, fallback:)
click to toggle source
# File lib/hashid/rails.rb, line 103 def hashid_decode(id, fallback:) fallback_value = fallback ? id : nil decoded_hashid = hashids.decode(id_to_string(id)) if Hashid::Rails.configuration.sign_hashids valid_hashid?(decoded_hashid) ? decoded_hashid.last : fallback_value else decoded_hashid.first || fallback_value end rescue Hashids::InputError fallback_value end
hashid_encode(id)
click to toggle source
# File lib/hashid/rails.rb, line 95 def hashid_encode(id) if Hashid::Rails.configuration.sign_hashids find_hashid_prefix + hashids.encode(HASHID_TOKEN, id) else find_hashid_prefix + hashids.encode(id) end end
hashids()
click to toggle source
# File lib/hashid/rails.rb, line 91 def hashids Hashids.new(*Hashid::Rails.configuration.for_table(table_name)) end
id_to_string(id)
click to toggle source
# File lib/hashid/rails.rb, line 116 def id_to_string(id) safe_id = id.to_s return safe_id unless Hashid::Rails.configuration.use_prefix return safe_id unless safe_id.start_with?(find_hashid_prefix) safe_id[find_hashid_prefix.length..safe_id.length] end
valid_hashid?(decoded_hashid)
click to toggle source
# File lib/hashid/rails.rb, line 132 def valid_hashid?(decoded_hashid) decoded_hashid.size == 2 && decoded_hashid.first == HASHID_TOKEN end