diff options
author | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-02-14 12:45:59 +0000 |
---|---|---|
committer | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-02-14 12:45:59 +0000 |
commit | 45ef2dac1eedeca3b3e0c769580fec08bd30ddd1 (patch) | |
tree | 90aec32119b2d5c5f25917c6b68157eb758caebe /ext/digest | |
parent | 5783ed6afbb25d183efcd9d28340b86012bd0296 (diff) | |
download | ruby-45ef2dac1eedeca3b3e0c769580fec08bd30ddd1.tar.gz ruby-45ef2dac1eedeca3b3e0c769580fec08bd30ddd1.tar.xz ruby-45ef2dac1eedeca3b3e0c769580fec08bd30ddd1.zip |
* ext/digest/lib/digest.rb (Digest::self.const_missing): Drop
autoloads for sha2 classes in favor of handling in
const_missing(), to work around a problem exposed on OS X.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@11736 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/digest')
-rw-r--r-- | ext/digest/lib/digest.rb | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/ext/digest/lib/digest.rb b/ext/digest/lib/digest.rb index a56d47551..244cd436b 100644 --- a/ext/digest/lib/digest.rb +++ b/ext/digest/lib/digest.rb @@ -1,19 +1,21 @@ require 'digest.so' module Digest - autoload "SHA256", "digest/sha2.so" - autoload "SHA384", "digest/sha2.so" - autoload "SHA512", "digest/sha2.so" - def self.const_missing(name) - begin - require File.join('digest', name.downcase) + case name + when :SHA256, :SHA384, :SHA512 + lib = 'digest/sha2.so' + else + lib = File.join('digest', name.to_s.downcase) + end - return Digest.const_get(name) if Digest.const_defined?(name) + begin + require lib rescue LoadError => e + raise LoadError, "library not found for class Digest::#{name} -- #{lib}" end - raise NameError, "Digest class not found: Digest::#{name}" + Digest.const_get(name) end class ::Digest::Class |