Class: Range

Class | Range
In: | lib/core/facets/range/combine.rb lib/core/facets/range/overlap.rb lib/core/facets/range/to_r.rb lib/core/facets/range/within.rb
Parent: | Object

### Methods

combine combine overlap? to_r to_range umbrella within?

### Public Class methods

combine(*intervals)

Combine intervals.

      Range.combine(1..2, 2..4)   #=> [1..4]
      Range.combine(1..2, 3..4)   #=> [1..2, 3..4]

CREDIT: Trans

[Source]

    # File lib/core/facets/range/combine.rb, line 23
      def self.combine(*intervals)
        intype = intervals.first.class
        result = []

        intervals = intervals.collect do |i|
          [i.first, i.last]
        end

        intervals.sort.each do |(from, to)|  #inject([]) do |result,
          if result.empty? or from > result.last[1]
            result << [from, to]
          elsif to > result.last[1]
            result.last[1] = to
          end
          #result
        end

        if intype <= Range
          result.collect{ |i| ((i.first)..(i.last)) }
        else
          result
        end
      end

### Public Instance methods

combine(*intervals)

Combine ranges.

      (1..2).combine(2..4)   #=> [1..4]
      (1..2).combine(3..4)   #=> [1..2, 3..4]

      TODO: Incorporate end-sentinal inclusion vs. exclusion.

CREDIT: Trans

[Source]

    # File lib/core/facets/range/combine.rb, line 12
      def combine(*intervals)
        Range.combine(self, *intervals)
      end

overlap?(other)

Do two ranges overlap?

CREDIT: Daniel Schierbeck, Brandon Keepers

[Source]

    # File lib/core/facets/range/overlap.rb, line 7
      def overlap?(other)
        include?(other.first) or other.include?(first)
      end

to_r()

A thing really should know itself. This simply returns self.

CREDIT: Trans

[Source]

    # File lib/core/facets/range/to_r.rb, line 8
      def to_r
        self
      end

to_range()

A thing really should know itself. This simply returns self.

Note: This does not internally effect the Ruby interpretor such that it can coerce Range-like objects into a Range.

CREDIT: Trans

[Source]

    # File lib/core/facets/range/to_r.rb, line 21
      def to_range
        self
      end

umbrella(r)

Returns a two element array of the relationship between two Ranges.

Diagram:

        Relationship     Returns

      self |-----------|
      r    |-----------|    [0,0]

      self |-----------|
      r     |---------|     [-1,-1]

      self  |---------|
      r    |-----------|    [1,1]

      self |-----------|
      r     |----------|    [-1,0]

      self |-----------|
      r     |-----------|   [-1,1]

      etc.

Example:

      (0..3).umbrella(1..2)  #=>  [-1,-1]

CREDIT: Trans, Chris Kappler

[Source]

    # File lib/core/facets/range/within.rb, line 49
      def umbrella(r)
        s = first <=> r.first
        e = r.last <=> last

        if e == 0
          if r.exclude_end? and exclude_end?
            e = r.max <=> max
          else
            e = (r.exclude_end? ? 0 : 1) <=> (exclude_end? ? 0 : 1)
          end
        end

        return s,e
      end

within?(rng)

Uses the Range#umbrella method to determine if another Range is anywhere within this Range.

      (1..3).within?(0..4)  #=> true

CREDIT: Trans

[Source]

    # File lib/core/facets/range/within.rb, line 10
      def within?(rng)
        case rng.umbrella(self)
        when [0,0], [-1,0], [0,-1], [-1,-1]
          return true
        else
          return false
        end
      end

[Validate]