Module: ArchUnit::Metrics::Extraction
- Defined in:
- lib/archunit/metrics/extraction/metric_info.rb,
lib/archunit/metrics/extraction/distance_info.rb,
lib/archunit/metrics/extraction/extract_project_info.rb,
lib/archunit/metrics/extraction/extract_distance_info.rb,
lib/archunit/metrics/extraction/source_metrics_visitor.rb
Overview
Ruby-specific extraction enriched with dependency coupling.
Defined Under Namespace
Classes: ClassInfo, DistanceInfo, FieldInfo, FileInfo, MethodInfo, ProjectInfo
Class Method Summary collapse
-
.extract_distance_infos(project_locator = nil, options: nil) ⇒ Object
Enriches static file facts with distinct internal incoming/outgoing dependencies.
- .extract_file_info(source_file, relative_path: nil) ⇒ Object
- .extract_project_info(project_locator = nil, exclude_patterns: nil) ⇒ Object
Class Method Details
.extract_distance_infos(project_locator = nil, options: nil) ⇒ Object
Enriches static file facts with distinct internal incoming/outgoing dependencies.
14 15 16 17 18 19 |
# File 'lib/archunit/metrics/extraction/extract_distance_info.rb', line 14 def extract_distance_infos(project_locator = nil, options: nil) project = extract_project_info(project_locator) graph = ArchUnit::Extraction.extract_graph(project.project_root, options:) outgoing, incoming = coupling_indexes(graph, project.files.map(&:path)) build_distance_infos(project, outgoing, incoming) end |
.extract_file_info(source_file, relative_path: nil) ⇒ Object
25 26 27 28 29 30 31 32 |
# File 'lib/archunit/metrics/extraction/extract_project_info.rb', line 25 def extract_file_info(source_file, relative_path: nil) path = source_path(source_file) identifier = (relative_path || path.basename.to_s).to_s.tr('\\', '/') source = path.read build_file_info(identifier, source) rescue SystemCallError => e raise TechnicalError, "could not extract Ruby source metrics: #{e.}" end |
.extract_project_info(project_locator = nil, exclude_patterns: nil) ⇒ Object
17 18 19 20 21 22 23 |
# File 'lib/archunit/metrics/extraction/extract_project_info.rb', line 17 def extract_project_info(project_locator = nil, exclude_patterns: nil) root = Pathname.new(ArchUnit::Extraction.locate_project(project_locator)) files = ArchUnit::Extraction.enumerate_source_files(root, exclude_patterns:).map do |path| extract_file_info(root.join(path), relative_path: path) end ProjectInfo.new(project_root: root.to_s, files:) end |