class Wallaby::ActiveRecord::ModelDecorator::FieldsBuilder::StiBuilder
This class updates the field metadata's value of type and sti_class_list for STI (Single Table Inheritance) model
Public Class Methods
new(model_class)
click to toggle source
@param model_class [Class]
# File lib/adapters/wallaby/active_record/model_decorator/fields_builder/sti_builder.rb, line 11 def initialize(model_class) @model_class = model_class end
Public Instance Methods
update(metadata, column)
click to toggle source
Update the field metadata's value for type and sti_class_list @param metadata [Hash] @param column [ActiveRecord::ConnectionAdapters::Column]
# File lib/adapters/wallaby/active_record/model_decorator/fields_builder/sti_builder.rb, line 18 def update(metadata, column) return unless @model_class.inheritance_column == column.name metadata[:type] = 'sti' metadata[:sti_class_list] = sti_list(find_sti_parent_of(@model_class)) end
Protected Instance Methods
find_sti_parent_of(klass)
click to toggle source
Find out which parent is the one that can give us the STI list. @param klass [Class] @return [Class]
# File lib/adapters/wallaby/active_record/model_decorator/fields_builder/sti_builder.rb, line 38 def find_sti_parent_of(klass) parent = klass parent = parent.superclass until not_sti_parent?(parent.superclass) parent end
not_sti_parent?(klass)
click to toggle source
@param klass [Class] @return [true] if klass is ActiveRecord::Base or abstract @return [false] otherwise
# File lib/adapters/wallaby/active_record/model_decorator/fields_builder/sti_builder.rb, line 47 def not_sti_parent?(klass) klass == ::ActiveRecord::Base || klass.try(:abstract_class?) end
sti_list(klass)
click to toggle source
Return the alphabet-order STI list by traversing the inheritance tree for given model. @param klass [Class] @return [Array<Class>]
# File lib/adapters/wallaby/active_record/model_decorator/fields_builder/sti_builder.rb, line 31 def sti_list(klass) (klass.descendants << klass).sort_by(&:name) end