+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
> [email protected]
> http://lists.rubyonrails.org/mailman/listinfo/rails-core
>
>
>
_______________________________________________
Rails-core mailing list
[email protected]
http://lists.rubyonrails.org/mailman/listinfo/rails-core