Module: Aquarium::Utils::TypeUtils

Included in:
Finders::TypeFinder
Defined in:
lib/aquarium/utils/type_utils.rb

Class Method Summary collapse

Class Method Details

.descendents(clazz) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/aquarium/utils/type_utils.rb', line 10

def self.descendents clazz
  visited = Set.new([Class, Object, Module, clazz])
  if RUBY_VERSION =~ /^1.9/
    visited << BasicObject 
  end
  result = [clazz]
  Module.constants.each do |const|
    mod = Module.class_eval(const.to_s)
    if mod.respond_to?(:ancestors)
      result << mod if mod.ancestors.include?(clazz)
      do_descendents clazz, mod, visited, result
    end
  end
  result.uniq
end

.is_type?(type_or_object) ⇒ Boolean

Returns:

  • (Boolean)


6
7
8
# File 'lib/aquarium/utils/type_utils.rb', line 6

def self.is_type? type_or_object
  type_or_object.kind_of?(Class) or type_or_object.kind_of?(Module)
end

.nested(clazz) ⇒ Object



26
27
28
29
30
31
32
33
34
35
# File 'lib/aquarium/utils/type_utils.rb', line 26

def self.nested clazz
  result = [clazz]
  clazz.constants.each do |const|
    mod = clazz.class_eval(const.to_s)
    next unless is_type?(mod)
    result << mod 
    result << nested(mod)
  end
  result.flatten.uniq
end