Sha256: 9a85ab610cb0393483c3e1c18df7d7ae96ed0659598a4205abcbfb8d014410f6

Contents?: true

Size: 949 Bytes

Versions: 1

Compression:

Stored size: 949 Bytes

Contents

module Traits
  class Model
    module STI
      def uses_sti?
        sti_base? || sti_derived?
      end

      def sti_base?
        model_class.descends_from_active_record? && model_class.subclasses.any? do |subclass|
          subclass.superclass == model_class
        end
      end

      def sti_derived?
        !model_class.descends_from_active_record?
      end

      def sti_attribute_name
        model_class.inheritance_column.to_sym
      end

      def sti_chain
        model_class = self.model_class
        chain       = [model_class]
        until model_class.superclass == ActiveRecord::Base do
          model_class = model_class.superclass
          chain.unshift(model_class)
        end
        chain
      end

      def to_hash
        super.merge!(
          sti_base:           sti_base?,
          sti_derived:        sti_derived?,
          sti_attribute_name: sti_attribute_name
        )
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
activerecord-traits-1.0.0 lib/traits/concerns/model/sti.rb