def related_classes_internal(klass, all_classes = [], analyzed_classes = [] )
ret = []
klass = normalize_class(klass)
return [Object] if root_ancestors.include? klass
ary = klass.name.split(/::/)
while(v = ary.shift)
ret.unshift(((ret.size == 0) ? Object.const_get(v) : ret[0].const_get(v)))
end
ret -= analyzed_classes
if ret.size > 1
ret += related_classes_internal(ret[1], all_classes, analyzed_classes)
ret.uniq!
end
analyzed_classes << klass unless analyzed_classes.include? klass
klass.ancestors[1..-1].each do |a|
ret += related_classes_internal(a, all_classes, analyzed_classes)
ret.uniq!
end
if all_classes.size > 0
(ret & all_classes).uniq
else
ret.uniq
end
end