Returns a Digest subclass by name in a
thread-safe manner even when on-demand loading is involved.
require'digest'Digest("MD5")# => Digest::MD5Digest(:SHA256)# => Digest::SHA256Digest(:Foo)# => LoadError: library not found for class Digest::Foo -- digest/foo
# File ext/digest/lib/digest.rb, line 96
def Digest(name)
const = name.to_sym
Digest::REQUIRE_MUTEX.synchronize {
# Ignore autoload's because it is void when we have #const_missing
Digest.const_missing(const)
}
rescue LoadError
# Constants do not necessarily rely on digest/*.
if Digest.const_defined?(const)
Digest.const_get(const)
else
raise
end
end