The base dataset for STI, to which filters are added to get only the models for the specific STI subclass.
Array holding keys for all subclasses of this class, used for the dataset filter in subclasses. Nil in the main class.
A proc which returns the value to use for new instances. This defaults to a lookup in the key map.
A hash/proc with class keys and column value values, mapping the the class to a particular value given to the sti_key column. Used to set the column value when creating objects, and for the filter when retrieving objects in subclasses.
A hash/proc with column value keys and class values, mapping the value of the sti_key column to the appropriate class to use.
Copy the necessary attributes to the subclasses, and filter the subclass's dataset based on the sti_kep_map entry for the class.
# File lib/sequel/plugins/single_table_inheritance.rb, line 144 def inherited(subclass) super sk = sti_key sd = sti_dataset skm = sti_key_map smm = sti_model_map skc = sti_key_chooser key = Array(skm[subclass]).dup sti_subclass_added(key) rp = dataset.row_proc subclass.set_dataset(sd.filter(SQL::QualifiedIdentifier.new(table_name, sk)=>key), :inherited=>true) subclass.instance_eval do dataset.row_proc = rp @sti_key = sk @sti_key_array = key @sti_dataset = sd @sti_key_map = skm @sti_model_map = smm @sti_key_chooser = skc self.simple_table = nil end end
Return an instance of the class specified by sti_key, used by the row_proc.
# File lib/sequel/plugins/single_table_inheritance.rb, line 169 def sti_load(r) sti_class(sti_model_map[r[sti_key]]).call(r) end
Make sure that all subclasses of the parent class correctly include keys for all of their descendant classes.
# File lib/sequel/plugins/single_table_inheritance.rb, line 175 def sti_subclass_added(key) if sti_key_array Sequel.synchronize{sti_key_array.push(*Array(key))} superclass.sti_subclass_added(key) end end
Generated with the Darkfish Rdoc Generator 2.