Class: Dependencytree::DependencyResolver
- Inherits:
-
Object
- Object
- Dependencytree::DependencyResolver
- Defined in:
- lib/dependencytree/dependencyresolver.rb
Overview
Resolves symbols within the passed-in class/module array.
Instance Attribute Summary collapse
-
#classes_and_modules ⇒ Object
readonly
Returns the value of attribute classes_and_modules.
Instance Method Summary collapse
-
#initialize(log, classes_and_modules) ⇒ DependencyResolver
constructor
type: :class or :module path: the filesystem path the parsed class was found in module_name: eventual module name or :anonymous class_name: the class name.
-
#resolve_by_full_name(full_name) ⇒ Object
Finds a class or module by its full name.
-
#resolve_by_name(name) ⇒ Object
Finds a class or module by its local name.
-
#resolve_reference(referer_class_model, reference_array) ⇒ Object
Tries to resolve one reference either as a constant or a class/module reference.
-
#resolve_reference_as_constant(referer_class_model, reference_array) ⇒ Object
Resolve a constant module/class reference.
-
#resolve_reference_direct(referer_class_model, reference_array) ⇒ Object
Resolve a full module/class reference.
-
#resolve_references ⇒ Object
Goes thru all classes and tries to resolve the references.
Constructor Details
#initialize(log, classes_and_modules) ⇒ DependencyResolver
type: :class or :module path: the filesystem path the parsed class was found in module_name: eventual module name or :anonymous class_name: the class name
15 16 17 18 19 20 |
# File 'lib/dependencytree/dependencyresolver.rb', line 15 def initialize(log, classes_and_modules) # store logger @@log = log @classes_and_modules = classes_and_modules @by_full_name = @classes_and_modules.each_with_object({}) { |clazz, hash| hash[clazz.full_name()] = clazz } end |
Instance Attribute Details
#classes_and_modules ⇒ Object (readonly)
Returns the value of attribute classes_and_modules.
9 10 11 |
# File 'lib/dependencytree/dependencyresolver.rb', line 9 def classes_and_modules @classes_and_modules end |
Instance Method Details
#resolve_by_full_name(full_name) ⇒ Object
Finds a class or module by its full name.
107 108 109 |
# File 'lib/dependencytree/dependencyresolver.rb', line 107 def resolve_by_full_name(full_name) @by_full_name[full_name] end |
#resolve_by_name(name) ⇒ Object
Finds a class or module by its local name.
113 114 115 |
# File 'lib/dependencytree/dependencyresolver.rb', line 113 def resolve_by_name(name) @classes_and_modules.find { |clazz| clazz.name == name } end |
#resolve_reference(referer_class_model, reference_array) ⇒ Object
Tries to resolve one reference either as a constant or a class/module reference.
41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/dependencytree/dependencyresolver.rb', line 41 def resolve_reference(referer_class_model, reference_array) refered_class_model = resolve_reference_direct(referer_class_model, reference_array) if ! refered_class_model refered_class_model = resolve_reference_as_constant(referer_class_model, reference_array) end if refered_class_model @@log.debug("Resolved #{reference_array.join('::')} to uuid #{refered_class_model.uuid}") else @@log.debug("Could not resolve #{reference_array.join('::')}") end refered_class_model end |
#resolve_reference_as_constant(referer_class_model, reference_array) ⇒ Object
Resolve a constant module/class reference. element of the array is the constant name.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/dependencytree/dependencyresolver.rb', line 60 def resolve_reference_as_constant(referer_class_model, reference_array) reference_part = reference_array[0..-2] constant_name = reference_array[-1] @@log.debug("Resolving reference array #{reference_array.to_s} as reference #{reference_part.to_s} and constant #{constant_name}") refered_class_model = resolve_reference_direct(referer_class_model, reference_part) if refered_class_model @@log.debug("Found reference to possible parent #{reference_part.to_s}") if refered_class_model.constant_names.include? constant_name.to_sym @@log.debug("Found class #{refered_class_model.full_name} constant #{constant_name}") refered_class_model else @@log.debug("Found class #{refered_class_model.full_name}, but not constant #{constant_name}. Known constants: #{refered_class_model.constant_names}") nil end else nil end end |
#resolve_reference_direct(referer_class_model, reference_array) ⇒ Object
Resolve a full module/class reference.
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/dependencytree/dependencyresolver.rb', line 85 def resolve_reference_direct(referer_class_model, reference_array) @@log.debug("Resolving reference array #{reference_array.to_s}") referer_array = referer_class_model.full_name_array i = 0 refered_class_model = nil while !refered_class_model do @@log.debug("Referer array #{i} is #{referer_array.to_s}") full_name = (referer_array+reference_array).join("::") @@log.debug("Full name #{i} is #{full_name} #{full_name.class.name}") refered_class_model = resolve_by_full_name(full_name) break if referer_array.empty? referer_array = referer_array[0..-2] i += 1 end refered_class_model end |
#resolve_references ⇒ Object
Goes thru all classes and tries to resolve the references.
23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/dependencytree/dependencyresolver.rb', line 23 def resolve_references @classes_and_modules.each do |clazz| @@log.debug("Processing class #{clazz.full_name} located in #{clazz.path}") clazz.references.each do |reference_array| refered_class = resolve_reference(clazz, reference_array) if refered_class clazz.resolved_references << refered_class.uuid else clazz.unresolved_references << reference_array end end end end |