mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Fix md5 nesting
This commit is contained in:
@@ -11,40 +11,28 @@ module Linguist
|
||||
# Returns String hex digest
|
||||
def self.hexdigest(obj)
|
||||
digest = Digest::MD5.new
|
||||
digest_strings(obj).each { |e| digest.update(e) }
|
||||
digest.hexdigest
|
||||
end
|
||||
|
||||
# Internal: Get String representations for digest.
|
||||
#
|
||||
# obj - Object to digest
|
||||
#
|
||||
# Returns an Array of Strings.
|
||||
def self.digest_strings(obj)
|
||||
case obj
|
||||
when String
|
||||
["#{obj.class}", "#{obj}"]
|
||||
when Symbol
|
||||
["#{obj.class}", "#{obj}"]
|
||||
when Integer
|
||||
["#{obj.class}", "#{obj}"]
|
||||
when String, Symbol, Integer
|
||||
digest.update "#{obj.class}"
|
||||
digest.update "#{obj}"
|
||||
when TrueClass, FalseClass, NilClass
|
||||
["#{obj.class}"]
|
||||
digest.update "#{obj.class}"
|
||||
when Array
|
||||
r = ["#{obj.class}"]
|
||||
obj.each do |e|
|
||||
r.concat(digest_strings(e))
|
||||
digest.update "#{obj.class}"
|
||||
for e in obj
|
||||
digest.update(hexdigest(e))
|
||||
end
|
||||
r
|
||||
when Hash
|
||||
r = ["#{obj.class}"]
|
||||
obj.map { |k, v| digest_strings([k, v]) }.sort.each do |e|
|
||||
r.concat(digest_strings(e))
|
||||
digest.update "#{obj.class}"
|
||||
for e in obj.map { |(k, v)| hexdigest([k, v]) }.sort
|
||||
digest.update(e)
|
||||
end
|
||||
r
|
||||
else
|
||||
raise TypeError, "can't convert #{obj.inspect} into String"
|
||||
end
|
||||
|
||||
digest.hexdigest
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user