Session is not a class (TypeError)
以下のように2つのクラスを利用していて、
・Hoge::Session::ActiveRecordStore (hoge/sessionactive_record_store.rb)
module Hoge module Session class ActiveRecordStore (snip) end end end
・Hoge::Session (hoge/session.rb)
require 'hoge/session/active_record_store' module Hoge class Session (session) end end
・TestSession.rb (t/test_session.rb)
require 'hoge/session'
・実行結果
/home/someone/app/lib/hoge/session.rb:1: Session is not a class (TypeError) from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require' (snip)
・原因
Hoge::Session クラス内で、Hoge::Session::ActiveRecordStore を require しているが、
Hoge::Session::ActiveRecordStore が Hoge::Session より先に Session を Module 定義しているために、
Hoge::Session の class Session と名前空間がバッティングしていた。
・改善策
Hoge::Session::ActiveRecordStore クラスの Session を module -> class に変更する。
module Hoge class Session class ActiveRecordStore (snip) end end end
まっ、module と class を理解しないで使ってるってことですね。。