flatten

in lib/twitter_cldr/utils/range_set.rb [289:317]


      def flatten
        return if ranges.size <= 1

        sorted_ranges = ranges.sort do |a, b|
          if is_numeric_range?(a) && is_numeric_range?(b)
            a.first <=> b.first
          else
            1
          end
        end

        new_ranges = [sorted_ranges.first]

        sorted_ranges.each do |range|
          previous_range = new_ranges.pop

          if adjacent?(previous_range, range) || overlap?(previous_range, range)
            new_ranges.push(
              [range.first, previous_range.first].min..[range.last, previous_range.last].max
            )
          else
            new_ranges.push(previous_range)
            new_ranges.push(range)
          end
        end

        @ranges = new_ranges
      end