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
|
# Returns String hex digest
|
||||||
def self.hexdigest(obj)
|
def self.hexdigest(obj)
|
||||||
digest = Digest::MD5.new
|
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
|
case obj
|
||||||
when String
|
when String, Symbol, Integer
|
||||||
["#{obj.class}", "#{obj}"]
|
digest.update "#{obj.class}"
|
||||||
when Symbol
|
digest.update "#{obj}"
|
||||||
["#{obj.class}", "#{obj}"]
|
|
||||||
when Integer
|
|
||||||
["#{obj.class}", "#{obj}"]
|
|
||||||
when TrueClass, FalseClass, NilClass
|
when TrueClass, FalseClass, NilClass
|
||||||
["#{obj.class}"]
|
digest.update "#{obj.class}"
|
||||||
when Array
|
when Array
|
||||||
r = ["#{obj.class}"]
|
digest.update "#{obj.class}"
|
||||||
obj.each do |e|
|
for e in obj
|
||||||
r.concat(digest_strings(e))
|
digest.update(hexdigest(e))
|
||||||
end
|
end
|
||||||
r
|
|
||||||
when Hash
|
when Hash
|
||||||
r = ["#{obj.class}"]
|
digest.update "#{obj.class}"
|
||||||
obj.map { |k, v| digest_strings([k, v]) }.sort.each do |e|
|
for e in obj.map { |(k, v)| hexdigest([k, v]) }.sort
|
||||||
r.concat(digest_strings(e))
|
digest.update(e)
|
||||||
end
|
end
|
||||||
r
|
|
||||||
else
|
else
|
||||||
raise TypeError, "can't convert #{obj.inspect} into String"
|
raise TypeError, "can't convert #{obj.inspect} into String"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
digest.hexdigest
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -20099,5 +20099,5 @@
|
|||||||
"XSLT": 1,
|
"XSLT": 1,
|
||||||
"YAML": 1
|
"YAML": 1
|
||||||
},
|
},
|
||||||
"md5": "a0ebeafa2f804284407990bfedb1c7ee"
|
"md5": "5e73a20c894bdef413ab8409f9ba6406"
|
||||||
}
|
}
|
||||||
@@ -40,16 +40,16 @@ class TestMD5 < Test::Unit::TestCase
|
|||||||
|
|
||||||
def test_hexdigest_array
|
def test_hexdigest_array
|
||||||
assert_equal "4410ec34d9e6c1a68100ca0ce033fb17", MD5.hexdigest([])
|
assert_equal "4410ec34d9e6c1a68100ca0ce033fb17", MD5.hexdigest([])
|
||||||
assert_equal "a57e31bc7bce57d04dd6a07e74fd0d88", MD5.hexdigest([1])
|
assert_equal "759f28c1d0c20c22e79c91d339855d95", MD5.hexdigest([1])
|
||||||
assert_equal "ecbda6354c6e0370df33d43ce14701f4", MD5.hexdigest([1, 2])
|
assert_equal "9efe07b352dd94cd1cdc9d1a8d054f8f", MD5.hexdigest([1, 2])
|
||||||
assert_equal "5c42a2601d344f359017e2b76390e2cc", MD5.hexdigest([1, 2, 3])
|
assert_equal "60b1ef7201404f20c3d12f47499c3a1f", MD5.hexdigest([1, 2, 3])
|
||||||
assert_equal "c1816755a379d2b32289647ad1870d12", MD5.hexdigest([1, 2, [3]])
|
assert_equal "2f82cdc166616208077ff1dd0a8faeff", MD5.hexdigest([1, 2, [3]])
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_hexdigest_hash
|
def test_hexdigest_hash
|
||||||
assert_equal "fae8a9257e154175da4193dbf6552ef6", MD5.hexdigest({})
|
assert_equal "fae8a9257e154175da4193dbf6552ef6", MD5.hexdigest({})
|
||||||
assert_equal "b3646d6d84a803baa5ee2e5354057a65", MD5.hexdigest({:a => 1})
|
assert_equal "868ee214faf277829a85667cf332749f", MD5.hexdigest({:a => 1})
|
||||||
assert_equal "92c08085470d42ca0d33dd3ec5a8e098", MD5.hexdigest({:b => 2})
|
assert_equal "fa9df957c2b26de6fcca9d062ea8701e", MD5.hexdigest({:b => 2})
|
||||||
|
|
||||||
assert_not_equal MD5.hexdigest([:b, 2]), MD5.hexdigest({:b => 2})
|
assert_not_equal MD5.hexdigest([:b, 2]), MD5.hexdigest({:b => 2})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user