DataMapper 1.0.0 をactive_support 2.3.8で使う

何気なく DataMapper のバージョンを 0.10.x から 1.0.0 に上げたらエラー。

NoMethodError at /localhost
undefined method `titleize' for Extlib::Inflection:Module

ログの方にはこんな感じ。

H:/heroku/dzz/vendor/bundle/ruby/1.8/gems/dm-core-1.0.0/lib/dm-core.rb:49: warning: already initialized constant Inflector

どうも Inflector に titleize メソッドが無いと言っている。調べてみると「DataMapper は active_support 3.0.0 前提で,無いときは ExtLib を使う」と書いてあるブログを発見。ExtLib というのは,active_support にある便利機能をバックポートしたモジュールらしい。ところが肝心の titleize が ExtLib の Infrector にない。それでエラーになっている。さらに調べると titleize は humanize と同じ機能らしいので,モンキーパッチを作る。

module Extlib
  module Inflection
    class << self
      def titleize(lower_case_and_underscored_word)
        humanize(lower_case_and_underscored_word)
      end
    end
  end
end

これで動くようになった。素直に active_support 3.0.0 を使えばいいのかも。