class Project
Parses all components of a project
Public Class Methods
new(path)
click to toggle source
# File lib/cpp_dependency_graph/project.rb, line 13 def initialize(path) @path = path @include_resolver = IncludeToComponentResolver.new(source_components) end
Public Instance Methods
dependencies(component)
click to toggle source
# File lib/cpp_dependency_graph/project.rb, line 36 def dependencies(component) # TODO: This is repeating the same work twice! component_for_include is called when calling external_includes external_includes(component).map { |include| @include_resolver.component_for_include(include) }.reject(&:empty?).uniq end
external_includes(component)
click to toggle source
# File lib/cpp_dependency_graph/project.rb, line 41 def external_includes(component) @include_resolver.external_includes(component) end
project_component()
click to toggle source
# File lib/cpp_dependency_graph/project.rb, line 28 def project_component @project_component ||= build_project_component end
source_component(name)
click to toggle source
# File lib/cpp_dependency_graph/project.rb, line 22 def source_component(name) return SourceComponent.new('NULL') unless source_components.key?(name) source_components[name] end
source_components()
click to toggle source
# File lib/cpp_dependency_graph/project.rb, line 18 def source_components @source_components ||= build_source_components end
source_files()
click to toggle source
# File lib/cpp_dependency_graph/project.rb, line 32 def source_files @source_files ||= build_source_files end
Private Instance Methods
build_project_component()
click to toggle source
# File lib/cpp_dependency_graph/project.rb, line 55 def build_project_component c = SourceComponent.new(@path) { c.name => c } end
build_source_components()
click to toggle source
# File lib/cpp_dependency_graph/project.rb, line 60 def build_source_components # TODO: Dealing with source components with same dir name? dirs = fetch_all_dirs(@path) components = dirs.map do |dir| c = SourceComponent.new(dir) [c.name, c] end.to_h components.delete_if { |_, v| v.source_files.size.zero? } end
build_source_files()
click to toggle source
# File lib/cpp_dependency_graph/project.rb, line 47 def build_source_files # TODO: Breaking Demeter's law here files = project_component.values.flat_map(&:source_files) files.map do |file| [file.path, file] end.to_h end