rangerjs

0.1.1 • Public • Published

ranger.js

A lightweight JS library for defining an array of ranges. Stores the ranges in an array of range objects.

note: upper limit is always non-inclusive

var ranger = require('rangerjs');
var newRanger = new ranger();
var existingRanger = new ranger(array);

ranger.Range(Type)

//Returns:
{
    start: Type,
    end: Type    
}

In order to save the array to db (in this case MongoDB), use the following Schema type:

{
    ...
    ranges: {
        type: ranger.Range(Type), //Type can be Number, Date, etc.
        get: function(data) {
            return new ranger(data);
        },
        set: function(data) {
            return data.ranges || data;
        }
    }
}

Keep in mind that MongoDB does not listen for changes in individual array elements so after performing an operation (such as addRange or removeRange) make sure to markModified('ranges')

newRanger.addRange(from, to);

newRanger.addRange(1, 4);

newRanger.removeRange(from, to);

newRanger.removeRange(2, 3);

newRanger.check(value);

newRanger.check(1); //true
newRanger.check(2); //false
newRanger.check(3); //true
newRanger.check(4); //false
newRanger.check(5); //false

newRanger.checkRange(from, to);

newRanger.checkRange(1, 5); //false
newRanger.checkRange(2, 4); //false
newRanger.checkRange(2, 3); //false
newRanger.checkRange(3, 4); //true

newRanger.nextRange(now);

newRanger.nextRange(1); // { start: 1, end: 2 }
newRanger.nextRange(2); // { start: 3, end: 4 }
newRanger.nextRange(5); // undefined
newRanger.nextRange();  // undefined

newRanger.addRecuringRange(from, to, interval, count, finish);

Either count (of reptitions) or finish (final upper limit) must be set. If using finish, set count to null or < 1.

//These will create the same ranges:
newRanger.addRecuringRange(1, 2, 2, 3);
newRanger.addRecuringRange(1, 2, 2, 0, 7);
//Result:
newRanger.check(1); //true
newRanger.check(2); //false
newRanger.check(3); //true
newRanger.check(4); //false
newRanger.check(5); //true
newRanger.check(6); //false
newRanger.check(7); //false

newRanger.removeRecuringRange(from, to, interval, count, finish);

Either count (of reptitions) or finish (final upper limit) must be set. If using finish, set count to null or < 1.

newRanger.addRange(1, 8);
//These will remove the same ranges:
newRanger.removeRecuringRange(1, 2, 2, 3);
newRanger.removeRecuringRange(1, 2, 2, 0, 7);
//Result:
newRanger.check(1); //false
newRanger.check(2); //true
newRanger.check(3); //false
newRanger.check(4); //true
newRanger.check(5); //false
newRanger.check(6); //true
newRanger.check(7); //true

Readme

Keywords

none

Package Sidebar

Install

npm i rangerjs

Weekly Downloads

1

Version

0.1.1

License

ISC

Last publish

Collaborators

  • nigh7sh4de