Sha256: 97fb9b5d9eade63d132e122aa9ffd68aa0bfa92d806e40d741df3842ece1961d

Contents?: true

Size: 1.32 KB

Versions: 2

Compression:

Stored size: 1.32 KB

Contents

#!/usr/bin/env ruby
# coding: utf-8
# Copyright muflax <mail@muflax.com>, 2011
# License: GNU GPL 3 <http://www.gnu.org/copyleft/gpl.html>

class Range
  def +(other) 	; pair_or_num :+, other     	; end
  def -(other) 	; pair_or_num :-, other     	; end
  def *(other) 	; pair_or_num :*, other     	; end
  def /(other) 	; pair_or_num :/, other.to_f	; end
  def **(other)	; pair_or_num :**, other    	; end
  def %(other) 	; pair_or_num :%, other     	; end

  def to_f	; (self.begin.to_f..self.end.to_f)  	; end
  def to_i	; (self.begin.round..self.end.round)	; end

  def round places=0
    (self.begin.round(places)..self.end.round(places))
  end

  def average
    (self.begin + self.end) / 2.0
  end

  def coerce(other)
    case other
    when Range  	; return other, self
    when Numeric	; return (other..other), self
    else
      super
    end
  end

  private

  def pair_or_num operator, other
    case other
    when Range  	; calc_pairs operator, other
    when Numeric	; calc_pairs operator, (other..other)
    else
      raise NoMethodError
    end
  end

  def calc_pairs operator, other
    results = [
      self.begin	.send(operator,	other.begin),
      self.begin	.send(operator,	other.end),
      self.end  	.send(operator,	other.begin),
      self.end  	.send(operator,	other.end),
    ]

    (results.min..results.max)
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
range_math-1.0.1 lib/range_math.rb
range_math-0.8.0 lib/range_math.rb