Add the appropriate data structures to the subclass. Does not allow
anonymous subclasses to be created, since they would not be mappable to a
table.
def inherited(subclass)
cc = cti_columns
ck = cti_key
ct = cti_tables.dup
ctm = cti_table_map.dup
cbm = cti_base_model
cmm = cti_model_map
pk = primary_key
ds = dataset
table = nil
columns = nil
subclass.instance_eval do
raise(Error, "cannot create anonymous subclass for model class using class_table_inheritance") if !(n = name) || n.empty?
table = ctm[n.to_sym] || implicit_table_name
columns = db.from(table).columns
@cti_key = ck
@cti_tables = ct + [table]
@cti_columns = cc.merge(table=>columns)
@cti_table_map = ctm
@cti_base_model = cbm
@cti_model_map = cmm
set_dataset(ds.join(table, pk=>pk).select_append(*(columns - [primary_key]).map{|c| Sequel.qualify(table, Sequel.identifier(c))}))
set_columns(self.columns)
end
super
subclass.instance_eval do
set_dataset_cti_row_proc
(columns - [cbm.primary_key]).each{|a| define_lazy_attribute_getter(a, :dataset=>dataset, :table=>table)}
cti_tables.reverse.each do |t|
db.schema(t).each{|k,v| db_schema[k] = v}
end
end
end