Class: Ahnnotate::Facet::Models::ResolveClassRelationships

Inherits:
Object
  • Object
show all
Defined in:
lib/ahnnotate/facet/models/resolve_class_relationships.rb

Instance Method Summary collapse

Instance Method Details

#call(extracted_classes) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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/ahnnotate/facet/models/resolve_class_relationships.rb', line 9

def call(extracted_classes)
  object_space =
    extracted_classes
      .map(&method(:self_and_outer_class))
      .flatten
      .compact
      .uniq
      .map { |x| [x.class_name, x] }
      .to_h

  object_space[""] ||= ModuleNode.new(nil)

  object_space["::ActiveRecord::Base"] =
    ModuleNode.new(
      "ActiveRecord::Base",
      module_parent: object_space[""],
      abstract_class: nil
    )
  object_space["::ActiveRecord::Base"].is_active_record_base = true

  object_space.each do |class_name, extracted_class|
    possible_namespace_levels = class_name.split("::")[1..-2] || []

    if extracted_class.claimed_superclass == "" || extracted_class.claimed_superclass == nil
      next
    end

    (possible_namespace_levels.size + 1).times do
      class_uri_parts =
        possible_namespace_levels + [extracted_class.claimed_superclass]

      class_uri = "::#{class_uri_parts.join("::")}"

      if object_space[class_uri]
        extracted_class.superclass = object_space[class_uri]
        break
      end

      possible_namespace_levels.pop
    end
  end

  object_space
end

#to_procObject



5
6
7
# File 'lib/ahnnotate/facet/models/resolve_class_relationships.rb', line 5

def to_proc
  method(:call).to_proc
end