Fix md5 nesting

This commit is contained in:
Joshua Peek
2012-07-23 16:19:56 -05:00
parent a81105d987
commit fca6a9a9e1
3 changed files with 19 additions and 31 deletions

View File

@@ -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