Sha256: 9c4b3abdf917e7c3322ccadc02dbf4cfc4263e742eabfd2e56e80b90a36e5ff7

Contents?: true

Size: 1.03 KB

Versions: 4

Compression:

Stored size: 1.03 KB

Contents

module ActiveFedora
  module Inheritance
    extend ActiveSupport::Concern

    module ClassMethods
      # Returns the class descending directly from ActiveFedora::Base, or
      # an abstract class, if any, in the inheritance hierarchy.
      #
      # If A extends ActiveFedora::Base, A.base_class will return A. If B descends from A
      # through some arbitrarily deep hierarchy, B.base_class will return A.
      #
      # If B < A and C < B and if A is an abstract_class then both B.base_class
      # and C.base_class would return B as the answer since A is an abstract_class.
      def base_class
        return File if self <= File

        raise ActiveFedoraError, "#{name} doesn't belong in a hierarchy descending from ActiveFedora" unless self <= Base

        if self == Base || superclass == Base || superclass.abstract_class?
          self
        else
          superclass.base_class
        end
      end

      # Abstract classes can't have default scopes.
      def abstract_class?
        self == Base
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
active-fedora-15.0.1 lib/active_fedora/inheritance.rb
active-fedora-15.0.0 lib/active_fedora/inheritance.rb
active-fedora-14.0.1 lib/active_fedora/inheritance.rb
active-fedora-14.0.0 lib/active_fedora/inheritance.rb