業務で作っていたツールを別の環境に持っていったら動かなくなったので調べてみたら、OpenSSLのCipherErrorという例外の名前空間が(っていうのかな)変更になっていた。
% irb-1.8.6 --simple-prompt >> RUBY_VERSION => "1.8.6" >> require "openssl" => true >> OpenSSL::VERSION => "1.0.0" >> OpenSSL::OPENSSL_VERSION => "OpenSSL 0.9.7a Feb 19 2003" >> OpenSSL::OPENSSL_VERSION_NUMBER => 9465887 >> OpenSSL::CipherError => OpenSSL::CipherError >> OpenSSL::Cipher::CipherError NameError: uninitialized constant OpenSSL::Cipher::CipherError from (irb):7 from :0
% irb-1.8.7 --simple-prompt >> RUBY_VERSION => "1.8.7" >> require "openssl" => true >> OpenSSL::VERSION => "1.0.0" >> OpenSSL::OPENSSL_VERSION => "OpenSSL 0.9.8c 05 Sep 2006" >> OpenSSL::OPENSSL_VERSION_NUMBER => 9470015 >> OpenSSL::CipherError NameError: uninitialized constant OpenSSL::CipherError from (irb):6 >> OpenSSL::Cipher::CipherError => OpenSSL::Cipher::CipherError
ふむ。さて、アプリケーションではどちらでも動くようにするためにどう書くのがいいだろう。バージョン番号で分岐するのは多分あまりスマートじゃないよね。defined? かなぁ。
せめて 1.8系の間は OpenSSL::CipherError に別名で残しておいてくれてもいいんじゃないかと思うけど、何か深い理由があったのだろうか。