Class: ArchUnit::Metrics::FluentApi::MetricsBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/archunit/metrics/fluentapi/metrics_builder.rb

Overview

Immutable scope builder for numeric metrics over Ruby source.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(project_locator: nil, filters: []) ⇒ MetricsBuilder

Returns a new instance of MetricsBuilder.



20
21
22
23
24
# File 'lib/archunit/metrics/fluentapi/metrics_builder.rb', line 20

def initialize(project_locator: nil, filters: [])
  @project_locator = immutable_project_locator(project_locator)
  @filters = immutable_filters(filters)
  freeze
end

Instance Attribute Details

#filters ⇒ Object (readonly)

Returns the value of attribute filters.



18
19
20
# File 'lib/archunit/metrics/fluentapi/metrics_builder.rb', line 18

def filters
  @filters
end

#project_locator ⇒ Object (readonly)

Returns the value of attribute project_locator.



18
19
20
# File 'lib/archunit/metrics/fluentapi/metrics_builder.rb', line 18

def project_locator
  @project_locator
end

Instance Method Details

#analyze ⇒ MetricProjectInfo

Returns extracted files and classes in this scope.

Returns:



72
73
74
75
76
77
# File 'lib/archunit/metrics/fluentapi/metrics_builder.rb', line 72

def analyze
  project = Extraction.extract_project_info(project_locator)
  selected_files = project.files.filter_map { |file| selected_file_info(file) }
  Common::Logging::Inspection.selection('metric file', selected_files, &:path)
  Extraction::ProjectInfo.new(project_root: project.project_root, files: selected_files)
end

#count ⇒ CountMetricsBuilder

Returns count metric vocabulary.

Returns:



51
52
53
# File 'lib/archunit/metrics/fluentapi/metrics_builder.rb', line 51

def count
  CountMetricsBuilder.new(self)
end

#custom_metric(name, description, calculation) ⇒ CustomMetricBuilder

Defines a custom numeric calculation over ClassInfo.

Returns:



67
68
69
# File 'lib/archunit/metrics/fluentapi/metrics_builder.rb', line 67

def custom_metric(name, description, calculation)
  CustomMetricBuilder.new(scope: self, name:, description:, calculation:)
end

#distance ⇒ DistanceMetricsBuilder

Returns dependency-distance metric vocabulary.

Returns:



61
62
63
# File 'lib/archunit/metrics/fluentapi/metrics_builder.rb', line 61

def distance
  DistanceMetricsBuilder.new(self)
end

#for_classes_matching(pattern, except: nil) ⇒ MetricsBuilder

Selects classes within the selected source files.

Returns:



46
47
48
# File 'lib/archunit/metrics/fluentapi/metrics_builder.rb', line 46

def for_classes_matching(pattern, except: nil)
  with_filter(Common::RegexFactory.classname_matcher(pattern, except:))
end

#in_folder(pattern, except: nil) ⇒ MetricsBuilder

Selects metric source files by containing folder.

Returns:



34
35
36
# File 'lib/archunit/metrics/fluentapi/metrics_builder.rb', line 34

def in_folder(pattern, except: nil)
  with_filter(Common::RegexFactory.folder_matcher(pattern, except:))
end

#in_path(pattern, except: nil) ⇒ MetricsBuilder

Selects metric source files by complete path.

Returns:



40
41
42
# File 'lib/archunit/metrics/fluentapi/metrics_builder.rb', line 40

def in_path(pattern, except: nil)
  with_filter(Common::RegexFactory.path_matcher(pattern, except:))
end

#lcom ⇒ LCOMMetricsBuilder

Returns cohesion metric vocabulary.

Returns:



56
57
58
# File 'lib/archunit/metrics/fluentapi/metrics_builder.rb', line 56

def lcom
  LCOMMetricsBuilder.new(self)
end

#with_name(pattern, except: nil) ⇒ MetricsBuilder

Selects metric source files by basename.

Returns:



28
29
30
# File 'lib/archunit/metrics/fluentapi/metrics_builder.rb', line 28

def with_name(pattern, except: nil)
  with_filter(Common::RegexFactory.filename_matcher(pattern, except:))
end