+1 I ran into this myself while doing some complex STI stuff a few months ago
Obie On 1/19/06, Tom Ward <[EMAIL PROTECTED]> wrote: > ActiveSupport provides a method Object.subclasses_of, shown below: > > def subclasses_of(*superclasses) > subclasses = [] > ObjectSpace.each_object(Class) do |k| > next if (k.ancestors & superclasses).empty? || > superclasses.include?(k) || k.to_s.include?("::") || > subclasses.include?(k) > subclasses << k > end > subclasses > end > > Can anyone shine some light on why it (very deliberately) doesn't > return subclasses defined within modules (ignores classes where > k.to_s.include?("::")). No tests break if I remove the clause, and > the code appears to have been in the repository since the first > revision, so I can't divine anything looking through changesets. > Ideally I'd like to use the method myself, but can't unless it works > as I'd expect. I'd be grateful for any explanation anyone can give. > > Tom Ward > > P.S. Here's some code to demonstrate what I mean: > > class A > end > > class B < A > end > > Object.subclasses_of(A) # returns [B] > > module C > class D < A > end > end > > Object.subclasses_of(A) # still only returns [B], even though C::D is > also a subclass of A > > class E < C::D > end > > Object.subclasses_of(A) # returns [B, E], but still not C::D > > _______________________________________________ > Rails-core mailing list > Rails-core@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails-core > > > _______________________________________________ Rails-core mailing list Rails-core@lists.rubyonrails.org http://lists.rubyonrails.org/mailman/listinfo/rails-core