Module: ArchUnit::Metrics::Assertion
- Defined in:
- lib/archunit/metrics/assertion/metric_zone.rb,
lib/archunit/metrics/assertion/custom_metric.rb,
lib/archunit/metrics/assertion/metric_predicate.rb,
lib/archunit/metrics/assertion/metric_threshold.rb
Overview
Pure metric threshold assertions and structured violation data.
Defined Under Namespace
Classes: CustomMetricViolation, MetricPredicateViolation, MetricThresholdViolation, MetricZoneViolation
Class Method Summary
collapse
Class Method Details
.gather_custom_metric_violations(class_infos, metric, predicate) ⇒ Object
46
47
48
49
50
51
52
53
54
55
56
57
|
# File 'lib/archunit/metrics/assertion/custom_metric.rb', line 46
def gather_custom_metric_violations(class_infos, metric, predicate)
validate_custom_metric_arguments(class_infos, metric, predicate)
class_infos.filter_map do |class_info|
value = metric.calculate(class_info)
next if predicate.call(value, class_info)
CustomMetricViolation.new(
class_info:, metric_name: metric.name,
description: metric.description, value:
)
end
end
|
.gather_metric_predicate_violations(subjects, metric, predicate) ⇒ Object
42
43
44
45
46
47
48
49
50
|
# File 'lib/archunit/metrics/assertion/metric_predicate.rb', line 42
def gather_metric_predicate_violations(subjects, metric, predicate)
validate_predicate_assertion(subjects, metric, predicate)
subjects.filter_map do |subject|
value = metric.calculate(subject)
next if predicate.call(value, subject)
MetricPredicateViolation.new(subject:, metric_name: metric.name, value:)
end
end
|
.gather_metric_threshold_violations(subjects, metric, comparison, threshold) ⇒ Object
54
55
56
57
58
59
60
61
62
63
64
65
66
|
# File 'lib/archunit/metrics/assertion/metric_threshold.rb', line 54
def gather_metric_threshold_violations(subjects, metric, comparison, threshold)
validate_metric_assertion(subjects, metric)
threshold = validate_threshold(comparison, threshold)
subjects.filter_map do |subject|
value = metric.calculate(subject)
next if threshold_satisfied?(value, comparison, threshold)
MetricThresholdViolation.new(
subject:, metric_name: metric.name, value:, threshold:, comparison:
)
end
end
|
.gather_metric_zone_violations(distance_infos, zone) ⇒ Object
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/archunit/metrics/assertion/metric_zone.rb', line 41
def gather_metric_zone_violations(distance_infos, zone)
unless distance_infos.is_a?(Array) && distance_infos.all?(Extraction::DistanceInfo)
raise ArgumentError, 'distance_infos must be an Array of DistanceInfo values'
end
unless MetricZoneViolation::ZONES.include?(zone)
raise ArgumentError, "unknown architectural zone: #{zone.inspect}"
end
distance_infos.filter_map do |distance_info|
next unless Calculation::Distance.in_zone?(distance_info, zone)
MetricZoneViolation.new(distance_info:, zone:)
end
end
|