レガシー アプリケーションを Ruby 1.8.7 から 2.2.3 にアップグレードしようとしています。その後、ビルダーテンプレートのレンダリングで、不明なクラスに関するエラーが発生します。
初期化されていない定数 Builder::XmlMarkup::BigDecimal (NameError)
Builder::XmlMarkup 内では、クラスのような定数が消えているようです。
### example.xml.builder (template) ###
BigDecimal.new('23') # no error
class << xml
def some
data(BigDecimal.new('23')) # raises an error in 2.2.3
end
end
xml.test { xml.some }
### main script ###
require 'rubygems'
require 'builder'
require 'bigdecimal'
def eval_script(file)
xml = Builder::XmlMarkup.new
binding.eval(File.read(file), file)
xml.target!
end
template = File.join(File.dirname(__FILE__), 'example.xml.builder')
puts eval_script(template)
# Ruby 1.8.7 / builder 3.2.0 => <test><data>0.23E2</data></test>
# Ruby 2.2.3 / builder 3.2.2 => ./eval_script.rb:5:in `some': uninitialized constant Builder::XmlMarkup::BigDecimal (NameError)
行動の理由は見つかりませんでした。どうすれば問題を解決できますか?
ところで: メソッド ルックアップにも同じ問題があります。たとえば、完全な XML ドキュメントを返しますが、Ruby 2.2.3format('%d', 42)
では呼び出されません。Kernel.format