Harbor Documentation

Array

Parent

Methods

Public Instance Methods

compress()

      # File lib/harbor/support/array.rb, line 3
 3:   def compress
 4:     range_start = nil
 5:     previous = nil
 6:     ranges = []
 7:     leftovers = []
 8:     sorted = compact.uniq.sort
 9: 
10:     return ranges, sorted if sorted.size == 1
11: 
12:     (sorted = sort).each do |n|
13:       if !range_start && !previous
14:         range_start = n
15:         previous = n
16:       else
17:         if sorted.last == n
18:           if range_start == previous
19:             if previous + 1 == n
20:               ranges << (range_start..n)
21:             else
22:               leftovers << previous
23:               leftovers << n
24:             end
25:           else
26:             if previous + 1 == n
27:               ranges << (range_start..n)
28:             else
29:               ranges << (range_start..previous)
30:               leftovers << n
31:             end
32:           end
33:         elsif previous + 1 != n
34:           if range_start == previous
35:             leftovers << previous
36:           else
37:             ranges << (range_start..previous)
38:           end
39:           range_start = n
40:         end
41:       end
42: 
43:       previous = n
44:     end
45: 
46:     return ranges, leftovers
47:   end