Class: Kumi::Core::Domain::RangeAnalyzer

Inherits:
Object
  • Object
show all
Defined in:
lib/kumi/core/domain/range_analyzer.rb

Class Method Summary collapse

Class Method Details

.analyze(range) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/kumi/core/domain/range_analyzer.rb', line 7

def self.analyze(range)
  {
    type: :range,
    min: range.begin,
    max: range.end,
    exclusive_end: range.exclude_end?,
    size: calculate_size(range),
    sample_values: generate_samples(range),
    boundary_values: [range.begin, range.end],
    invalid_samples: generate_invalid_samples(range)
  }
end

.calculate_size(range) ⇒ Object



20
21
22
23
24
25
26
27
28
29
# File 'lib/kumi/core/domain/range_analyzer.rb', line 20

def self.calculate_size(range)
  return :infinite if range.begin.nil? || range.end.nil?
  return :large if range.end - range.begin > 1000

  if integer_range?(range)
    range.exclude_end? ? range.end - range.begin : range.end - range.begin + 1
  else
    :continuous
  end
end

.generate_invalid_samples(range) ⇒ Object



40
41
42
43
44
45
46
47
48
# File 'lib/kumi/core/domain/range_analyzer.rb', line 40

def self.generate_invalid_samples(range)
  invalid = []

  invalid << calculate_before_start(range) if range.begin.is_a?(Numeric)

  invalid << calculate_after_end(range) if range.end.is_a?(Numeric)

  invalid
end

.generate_samples(range) ⇒ Object



31
32
33
34
35
36
37
38
# File 'lib/kumi/core/domain/range_analyzer.rb', line 31

def self.generate_samples(range)
  samples = [range.begin]

  samples << calculate_midpoint(range) if numeric_range?(range)

  samples << calculate_endpoint(range)
  samples.uniq
end