Module: Taxonifi::Model::SharedClassMethods

Included in:
Base, Collection
Defined in:
lib/taxonifi/model/shared_class_methods.rb

Class Method Summary collapse

Class Method Details

.included(base) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/taxonifi/model/shared_class_methods.rb', line 2

def self.included(base)
  base.class_eval do

    # Return an array of the classes derived from the base class.
    # TODO: DRY with collection code.
    def self.subclasses
      classes = []
      ObjectSpace.each_object do |klass|
        next unless Module === klass
        classes << klass if self > klass
      end
      classes
    end

    # Determines identity base ONLY
    # on attributes in ATTRIBUTES.
    def identical?(obj)
      raise Taxonifi::ModelError, "Objects are not comparible." if obj.class != self.class
      self.class::ATTRIBUTES.each do |a|
        next if a == :id # don't compare
        return false if obj.send(a) != self.send(a)
      end
      return true
    end

  end
end