Skip to content

Commit

Permalink
Refactoring toArray() to include the record key for a complete ''ex…
Browse files Browse the repository at this point in the history
…port', changing the signature of `sort()` to accept a second parameter to keep the result unfrozen
  • Loading branch information
avoidwork committed Jul 27, 2015
1 parent 3dce2c1 commit 56c2001
Show file tree
Hide file tree
Showing 7 changed files with 171 additions and 70 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -649,7 +649,7 @@ store.setUri('https://api.somedomain.com?page=2', true).then(function (records)
});
```

**sort( callbackFn )**
**sort( callbackFn, [frozen = true] )**
_Array_

Returns an Array of the DataStore, sorted by `callbackFn`.
Expand Down
79 changes: 56 additions & 23 deletions lib/haro.es6.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* @copyright 2015
* @license BSD-3-Clause
* @link http://haro.rocks
* @version 1.4.13
* @version 1.5.0
*/
"use strict";

Expand Down Expand Up @@ -722,8 +722,18 @@ class Haro {
return defer.promise;
}

sort (fn) {
return this.toArray().sort(fn);
sort (fn, frozen = true) {
let result;

if (frozen) {
result = Object.freeze(this.toArray(null, false).sort(fn).map(function (i) {
return Object.freeze(i);
}));
} else {
result = this.toArray(null, false).sort(fn);
}

return result;
}

sortBy (index) {
Expand Down Expand Up @@ -806,32 +816,55 @@ class Haro {
}

toArray (data, frozen = true) {
let func, result;

if (frozen) {
func = function (arg) {
return arg;
};
} else {
func = function (arg) {
return clone(arg);
};
}
let key = this.key,
fn, result;

if (data) {
result = data.reduce(function (a, b) {
a.push(func(b[1]));
fn = (() => {
if (key) {
return function (a, b) {
let obj = clone(b[1]);

if (obj[key] === undefined) {
obj[key] = clone(b[0]);
}

a.push(obj);

return a;
}, []);
return a;
};
} else {
return function (a, b) {
a.push(clone(b[1]));

return a;
};
}
})();
result = data.reduce(fn, []);
} else {
fn = (() => {
if (key) {
return function (val, id) {
let obj = clone(val);

if (obj[key] === undefined) {
obj[key] = clone(id);
}

result.push(obj);
};
} else {
return function (val) {
result.push(clone(val));
};
}
})();
result = [];
this.forEach(function (value) {
result.push(func(value));
});
this.forEach(fn);
}

return result;
return frozen ? Object.freeze(result) : result;
}

toObject (data, frozen = true) {
Expand Down Expand Up @@ -885,7 +918,7 @@ function factory (data = null, config = {}, indexes = []) {
return new Haro(data, config, indexes);
}

factory.version = "1.4.13";
factory.version = "1.5.0";

// Node, AMD & window supported
if (typeof exports !== "undefined") {
Expand Down
79 changes: 57 additions & 22 deletions lib/haro.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* @copyright 2015
* @license BSD-3-Clause
* @link http://haro.rocks
* @version 1.4.13
* @version 1.5.0
*/
"use strict";

Expand Down Expand Up @@ -804,7 +804,19 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
}, {
key: "sort",
value: function sort(fn) {
return this.toArray().sort(fn);
var frozen = arguments[1] === undefined ? true : arguments[1];

var result = undefined;

if (frozen) {
result = Object.freeze(this.toArray(null, false).sort(fn).map(function (i) {
return Object.freeze(i);
}));
} else {
result = this.toArray(null, false).sort(fn);
}

return result;
}
}, {
key: "sortBy",
Expand Down Expand Up @@ -905,33 +917,56 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
value: function toArray(data) {
var frozen = arguments[1] === undefined ? true : arguments[1];

var func = undefined,
var key = this.key,
fn = undefined,
result = undefined;

if (frozen) {
func = function (arg) {
return arg;
};
} else {
func = function (arg) {
return clone(arg);
};
}

if (data) {
result = data.reduce(function (a, b) {
a.push(func(b[1]));
fn = (function () {
if (key) {
return function (a, b) {
var obj = clone(b[1]);

if (obj[key] === undefined) {
obj[key] = clone(b[0]);
}

a.push(obj);

return a;
};
} else {
return function (a, b) {
a.push(clone(b[1]));

return a;
}, []);
return a;
};
}
})();
result = data.reduce(fn, []);
} else {
fn = (function () {
if (key) {
return function (val, id) {
var obj = clone(val);

if (obj[key] === undefined) {
obj[key] = clone(id);
}

result.push(obj);
};
} else {
return function (val) {
result.push(clone(val));
};
}
})();
result = [];
this.forEach(function (value) {
result.push(func(value));
});
this.forEach(fn);
}

return result;
return frozen ? Object.freeze(result) : result;
}
}, {
key: "toObject",
Expand Down Expand Up @@ -1002,7 +1037,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
return new Haro(data, config, indexes);
}

factory.version = "1.4.13";
factory.version = "1.5.0";

// Node, AMD & window supported
if (typeof exports !== "undefined") {
Expand Down
2 changes: 1 addition & 1 deletion lib/haro.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion lib/haro.min.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "haro",
"version": "1.4.13",
"version": "1.5.0",
"description": "Harō is a modern immutable DataStore using Maps, Sets, Promises, & Tuples",
"main": "lib/haro.js",
"scripts": {
Expand Down
75 changes: 54 additions & 21 deletions src/haro.js
Original file line number Diff line number Diff line change
Expand Up @@ -556,8 +556,18 @@ class Haro {
return defer.promise;
}

sort (fn) {
return this.toArray().sort(fn);
sort (fn, frozen = true) {
let result;

if (frozen) {
result = Object.freeze(this.toArray(null, false).sort(fn).map(function (i) {
return Object.freeze(i);
}));
} else {
result = this.toArray(null, false).sort(fn);
}

return result;
}

sortBy (index) {
Expand Down Expand Up @@ -640,32 +650,55 @@ class Haro {
}

toArray (data, frozen = true) {
let func, result;

if (frozen) {
func = function (arg) {
return arg;
};
} else {
func = function (arg) {
return clone(arg);
};
}
let key = this.key,
fn, result;

if (data) {
result = data.reduce(function (a, b) {
a.push(func(b[1]));
fn = (() => {
if (key) {
return function (a, b) {
let obj = clone(b[1]);

if (obj[key] === undefined) {
obj[key] = clone(b[0]);
}

a.push(obj);

return a;
}, []);
return a;
};
} else {
return function (a, b) {
a.push(clone(b[1]));

return a;
};
}
})();
result = data.reduce(fn, []);
} else {
fn = (() => {
if (key) {
return function (val, id) {
let obj = clone(val);

if (obj[key] === undefined) {
obj[key] = clone(id);
}

result.push(obj);
};
} else {
return function (val) {
result.push(clone(val));
};
}
})();
result = [];
this.forEach(function (value) {
result.push(func(value));
});
this.forEach(fn);
}

return result;
return frozen ? Object.freeze(result) : result;
}

toObject (data, frozen = true) {
Expand Down

0 comments on commit 56c2001

Please sign in to comment.