so I m setting up some models and they are based off of 2 abstract base classes (or rather they used to be classes). After running into a lot of trouble with Datamapper s handling of STI for my use case, which appears to be an open bug on their lighthouse page, I decided instead to just do modules to define all the properties to keep my models DRY. Unfortunately, I m having a scoping issue, and what complicates matters worse is that I have to use 2 levels of inheritance. Here s my code:
module Part
def self.included(receiver)
receiver.class_eval do
include DataMapper::Resource
property :id, Serial
#other junk
end
end
end
module HardDrive
def self.included(receiver)
receiver.class_eval do
include Part
property :kind, Enum[:magnetic, :flash]
#buncha crap here
end
end
end
class Fujitsu
include HardDrive
property :rev, String
end
The error I get is:
uninitialized constant HardDrive::Enum (NameError)
from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:80:in `const_missing
from ./app/models/hard_drive.rb:6:in `included
from ./app/models/hard_drive.rb:4:in `class_eval
from ./app/models/hard_drive.rb:4:in `included
from ./app/models/hard_drives/fujitsu.rb:2:in `include
from ./app/models/hard_drives/fujitsu.rb:2
I m at a loss here. Anyone know of how I could solve this or better yet, a smarter way I could do this?