module Digest

def self.const_missing(name) # :nodoc:

:nodoc:
def self.const_missing(name) # :nodoc:
  case name
  when :SHA256, :SHA384, :SHA512
    lib = 'digest/sha2'
  else
    lib = File.join('digest', name.to_s.downcase)
  end
  begin
    require lib
  rescue LoadError
    raise LoadError, "library not found for class Digest::#{name} -- #{lib}", caller(1)
  end
  unless Digest.const_defined?(name)
    raise NameError, "uninitialized constant Digest::#{name}", caller(1)
  end
  Digest.const_get(name)
end