Skip to content

Winslett/RubyRanges

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RubyRanges

RubyRanges is my attempt to move names of Rails gems back to sane naming
conventions. Just because you can name a gem something fun, doesn’t mean I can
find it. I could have named it LoneRanges, HomeOnTheRanges, or RangingOut, but I
didn’t. I named it what it is: RubyRanges.

:)

For the serious documentation:

The real reason I created the ranges is to be able to treat ranges similar to
arrays instead of using “to_a” — which causes inefficiencies. I think of
adding Ranges as a consolidating overlay. I think of subtracting arrays as
a shark bite — whatever that means to you.

Quick Examples

Below are some examples of work, take a look at the tests for more:

Ultimately, I wanted to do something like this:

  (4..88) - (33..45) + (115..122) + (85..110) => [4..33, 45..110, 115..122]

But wait, it works with dates too:

  (Time.now..Time.now + 180) + (Time.now + 360..Time.now + 400) - (Time.now + 380..Time.now + 395) =>
    [Sat Aug 07 00:45:09 -0500 2010..Sat Aug 07 00:48:09 -0500 2010, Sat Aug 07 00:51:09 -0500 2010..Sat Aug 07 00:51:49 -0500 2010]

And it works with letters: (which I really don’t have a usage for)

  ("A".."FB") + ("P".."DE") - ("BC".."MA") => "A".."BC"

(Psst. . . it works with anything Ruby creates a range with)

Long Examples

Addition

  (1..9) + (4..7)  => (1..9)
  (4..7) + (1..9)  => (1..9)
  (1..9) + (5..12) => (1..12)
  (1..9) + (-5..5) => (-5..9)

Addition with non-continuous ranges

  (1..4) + (8..9)  => RubyRanges::Array.new(1..4, 8..9)

Subtraction

  (1..9) - (5..7)  => RubyRanges::Ranges.new(1..5, 7..9)

  (1..9) - (6..12)  => 1..6
  (1..9) - (-1..4)  => 4..9
  (1..9) - (-1..10) => nil

  (1..9) - (11..12) => 1..9

Now for RubyRanges::Array

I created the RubyRanges::Array to give some special actions to +, -, and flatten_ranges
for sets of Ranges. Below are some usage examples.

  RubyRanges::Array.new((1..4), (18..20)) + RubyRanges::Array.new((12..15), (6..9)) =>
    RubyRanges::Array.new((1..4), (6..9), (12..15), (18..20))

  RubyRanges::Array.new((1..10), (15..25)) + RubyRanges::Array.new((8..23), (25..28)) => 1..28

  RubyRanges::Array.new(10..15, 20..25) + RubyRanges::Array.new(5..13, 18..22) =>
    RubyRanges::Array.new(5..15, 18..25)

  RubyRanges::Array.new(10..15, 20..25) + RubyRanges::Array.new(13..18, 23..28) =>
    RubyRanges::Array.new(10..18, 20..28)
  end

  RubyRanges::Array.new(10..15, 20..25) + (28..30) =>
    RubyRanges::Array.new(10..15, 20..25, 28..30)

  RubyRanges::Array.new(10..15, 20..25) + (13..22) => 10..25

  RubyRanges::Array.new(10..15, 20..25) + (18..22) => RubyRanges::Array.new(10..15, 18..25)

Have fun, please donate if you fix / change. Licenses are for the lawyers, if you’re
a lawyer, this is GPLv3. If you’re a coder, this is code.

About

Extend ruby ranges with math functions

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages