### Home Classes Methods

### In Files

- lib/facets/range/within.rb
- lib/facets/range/to_r.rb
- lib/facets/range/overlap.rb
- lib/facets/range/combine.rb
- lib/facets/range/quantile.rb

### Parent

Object

### Methods

- ::combine
- #combine
- #overlap?
- #quantile
- #to_r
- #to_range
- #umbrella
- #within?

### Files

- README.rdoc

### Class/Module Index

Quicksearch

- Lazy
- Lazy::Future
- Lazy::Promise
- Lazy::Promise::DIVERGES
- Lazy::PromiseSafe
- Enumerable
- Enumerable::Recursor
- Method
- Method::Composition
- Module
- Module::InstanceFunction
- Array
- Binding
- Class
- Comparable
- Denumerable
- Denumerator
- Dir
- Enumerator
- Exception
- Facets
- FalseClass
- File
- FileTest
- Fixnum
- Float
- Functor
- Hash
- Indexable
- Instance
- Integer
- Kernel
- MatchData
- NA
- NilClass
- Numeric
- Object
- ObjectSpace
- Proc
- Process
- Range
- Regexp
- String
- Struct
- Symbol
- Time
- TrueClass
- UnboundMethod

No matching classes.

# Range

### Public Class Methods

combine(*intervals) click to toggle source

Combine intervals.

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

CREDIT: Trans

    # File lib/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) click to toggle source

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

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

overlap?(other) click to toggle source

Do two ranges overlap?

CREDIT: Daniel Schierbeck, Brandon Keepers

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

quantile(k, n=100) click to toggle source

Calculate the kth n-tile in a range.

If n=4 the quantity is called a quartile, and if n=100 it is called a percentile.

@uncommon

    require 'facets/range/quantile'

@return [Integer] the kth n-tile

    # File lib/facets/range/quantile.rb, line 12
    def quantile(k, n=100)
      return 1 if k < first
      return n if k >= last
      ((k - first) / ((last - first) / n.to_f)).to_i + 1
    end

to_r() click to toggle source

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

CREDIT: Trans

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

to_range() click to toggle source

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

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

umbrella(r) click to toggle source

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

    # File lib/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) click to toggle source

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

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

CREDIT: Trans

    # File lib/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]

Generated with the Darkfish Rdoc Generator 2.