1
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
29
require 'rubygems'
require 'active_record'

class RegisteredModels
  cattr_accessor :models
end

RegisteredModels.models = []

module ModelRegistration
  def self.included base
    base.extend ClassMethods
    (class<<base; self; end).class_eval do
      alias_method_chain :inherited, :registration
    end
  end
  
  module ClassMethods
    def inherited_with_registration sub
      RegisteredModels.models << sub
    end
  end
end

ActiveRecord::Base.send :include, ModelRegistration

class User < ActiveRecord::Base; end

p RegisteredModels.models