Module: SemanticInterval

Defined in:
lib/semantic_interval.rb,
lib/semantic_interval/version.rb

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.parse(range) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/semantic_interval.rb', line 4

def self.parse(range)
  parts = range[1..-2].split(',')
  requirements = []
  low_bound = range[0]
  high_bound = range[-1]
  low_number = parts[0].strip
  high_number = parts[1].strip if parts[1]

  # lowest
  low_sign = low_bound == '[' ? '>=' : '>'
  high_sign = high_bound == ']' ? '<=' : '<'

  # highest
  if high_number
    if high_number != low_number
      requirements << "#{low_sign} #{low_number}" if low_number && !low_number.empty?
      requirements << "#{high_sign} #{high_number}" if high_number && !high_number.empty?
    elsif high_number == low_number
      requirements << "= #{high_number}"
    end
  else
    requirements << "#{low_sign} #{low_number}" if low_number && !low_number.empty?
  end
  requirements << '>= 0' if requirements.empty?
  requirements.join(' ')
end