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
|
||||
|
||||
@@ -20099,5 +20099,5 @@
|
||||
"XSLT": 1,
|
||||
"YAML": 1
|
||||
},
|
||||
"md5": "a0ebeafa2f804284407990bfedb1c7ee"
|
||||
"md5": "5e73a20c894bdef413ab8409f9ba6406"
|
||||
}
|
||||
@@ -40,16 +40,16 @@ class TestMD5 < Test::Unit::TestCase
|
||||
|
||||
def test_hexdigest_array
|
||||
assert_equal "4410ec34d9e6c1a68100ca0ce033fb17", MD5.hexdigest([])
|
||||
assert_equal "a57e31bc7bce57d04dd6a07e74fd0d88", MD5.hexdigest([1])
|
||||
assert_equal "ecbda6354c6e0370df33d43ce14701f4", MD5.hexdigest([1, 2])
|
||||
assert_equal "5c42a2601d344f359017e2b76390e2cc", MD5.hexdigest([1, 2, 3])
|
||||
assert_equal "c1816755a379d2b32289647ad1870d12", MD5.hexdigest([1, 2, [3]])
|
||||
assert_equal "759f28c1d0c20c22e79c91d339855d95", MD5.hexdigest([1])
|
||||
assert_equal "9efe07b352dd94cd1cdc9d1a8d054f8f", MD5.hexdigest([1, 2])
|
||||
assert_equal "60b1ef7201404f20c3d12f47499c3a1f", MD5.hexdigest([1, 2, 3])
|
||||
assert_equal "2f82cdc166616208077ff1dd0a8faeff", MD5.hexdigest([1, 2, [3]])
|
||||
end
|
||||
|
||||
def test_hexdigest_hash
|
||||
assert_equal "fae8a9257e154175da4193dbf6552ef6", MD5.hexdigest({})
|
||||
assert_equal "b3646d6d84a803baa5ee2e5354057a65", MD5.hexdigest({:a => 1})
|
||||
assert_equal "92c08085470d42ca0d33dd3ec5a8e098", MD5.hexdigest({:b => 2})
|
||||
assert_equal "868ee214faf277829a85667cf332749f", MD5.hexdigest({:a => 1})
|
||||
assert_equal "fa9df957c2b26de6fcca9d062ea8701e", MD5.hexdigest({:b => 2})
|
||||
|
||||
assert_not_equal MD5.hexdigest([:b, 2]), MD5.hexdigest({:b => 2})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user