Module: ArchUnit::Metrics::Calculation::Distance

Defined in:
lib/archunit/metrics/calculation/distance.rb

Overview

Robert C. Martin's abstractness, instability, distance, and zone calculations.

Constant Summary collapse

PAIN_LIMIT =
0.3
USELESSNESS_LIMIT =
0.7
SIZE_NORMALIZATION_LINES =
100.0
MAXIMUM_SIZE_DISCOUNT =
0.5
CALCULATIONS =
{
  abstractness: ->(info) { abstractness_value(info) },
  instability: ->(info) { instability_value(info) },
  distance_from_main_sequence: ->(info) { distance_value(info) },
  coupling_factor: ->(info) { coupling_factor_value(info) },
  normalized_distance: ->(info) { normalized_distance_value(info) }
}.freeze

Class Method Summary collapse

Class Method Details

.in_zone?(distance_info, zone) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/archunit/metrics/calculation/distance.rb', line 34

def in_zone?(distance_info, zone)
  abstractness = abstractness_value(distance_info)
  instability = instability_value(distance_info)
  case zone
  when :pain
    abstractness < PAIN_LIMIT && instability < PAIN_LIMIT
  when :uselessness
    abstractness > USELESSNESS_LIMIT && instability > USELESSNESS_LIMIT
  else
    raise ArgumentError, "unknown architectural zone: #{zone.inspect}"
  end
end