Method: GetText::ClassInfo#related_classes_internal

Defined in:
lib/gettext/class_info.rb

Internal method for related_classes.



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/gettext/class_info.rb', line 24

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.each do |a|
    next if a == klass
    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