Module: RegexForRange

Defined in:
lib/regex_for_range.rb,
lib/regex_for_range/util.rb,
lib/regex_for_range/range.rb,
lib/regex_for_range/version.rb

Defined Under Namespace

Modules: Util Classes: Range

Constant Summary collapse

VERSION =
"0.1.2"

Class Method Summary collapse

Class Method Details

.get_regex_for_range(first, last) ⇒ Object



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

def get_regex_for_range(first, last)
  left = left_bounds(first, last)
  last_left = left.delete_at(left.length - 1)

  right = right_bounds(last_left.first, last)
  first_right = right.delete_at(0)

  merged = []
  merged += left

  if !last_left.overlaps(first_right)
    merged.push(last_left)
    merged.push(first_right)
  else
    merged.push(RegexForRange::Util.join(last_left, first_right))
  end

  merged += right

  return RegexForRange::Util.join_regex_by_or(merged)
end

.left_bounds(first, last) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/regex_for_range.rb', line 31

def left_bounds(first, last)

  results = []

  while last > first
    range = RegexForRange::Util.from_start(first)
    results.push(range)
    first = range.last + 1
  end

  return results
end

.right_bounds(first, last) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
# File 'lib/regex_for_range.rb', line 44

def right_bounds(first, last)
  results = []

  while last > first
    range = RegexForRange::Util.from_end(last)
    results.push(range)
    last = range.first - 1
  end

  return results.reverse
end