I'm tinkering with a new datamodel for Regdel which relies heavily upon datamapper's single-table inheritance capabilities.
However, I'm not sure how much work would be required to manage the datamapper classes. Its a concern, and I've considered an alternative of dynamically generating the classes.
It is fairly common to find Ruby code that generates more code, and then runs it: "eval".
That makes it possible to do cool stuff like this:
# This will only work for trees with two generations
inh = ""
{"Bank" => "Asset", "Trust" => "Bank", "Operating" => "Bank"}.each_pair { |k,v|
acc = Extlib::Inflection.pluralize(k).downcase
Xact.class_eval("has n, :"+acc)
eval "defined?(#{v})"
unless eval("defined?(#{v})") == 'constant'
inh = inh + "class #{k} < #{v}; end\n"
else
eval("class #{k} < #{v}; end\n")
end
}
eval(inh)