supergroup
Version:
Nested groups on arrays of objects where groups are Strings that know what you want them to know about themselves and their relatives.
199 lines (183 loc) • 13.4 kB
JavaScript
'use strict';
var _assert = require('assert');
var _assert2 = _interopRequireDefault(_assert);
var _vows = require('vows');
var _vows2 = _interopRequireDefault(_vows);
var _supergroup = require('../supergroup');
var _supergroup2 = _interopRequireDefault(_supergroup);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var suite = _vows2.default.describe("supergroup");
var gradeBook = [{ lastName: "Gold", firstName: "Sigfried", class: "Remedial Programming", grade: "C", num: 2 }, { lastName: "Gold", firstName: "Sigfried", class: "Literary Posturing", grade: "B", num: 3 }, { lastName: "Gold", firstName: "Sigfried", class: "Documenting with Pretty Colors", grade: "B", num: 3 }, { lastName: "Sassoon", firstName: "Sigfried", class: "Remedial Programming", grade: "A", num: 3 }, { lastName: "Androy", firstName: "Sigfried", class: "Remedial Programming", grade: "B", num: 3 }];
//var gradesByLastName = _.supergroup(gradeBook, 'lastName');
var gradesByLastName = _supergroup2.default.supergroup(gradeBook, 'lastName');
var gradesByName = _supergroup2.default.supergroup(gradeBook, function (d) {
return d.firstName + ' ' + d.lastName;
}, { dimName: 'fullName' });
var gradesByGradeLastName = _supergroup2.default.supergroup(gradeBook, ['grade', 'lastName']);
suite.addBatch({
"supergroup state": {
topic: gradesByGradeLastName.state()
}
});
/*
"should be a Supergroup State": function(selector) {
assert.instanceOf(selector, _.stateClass);
},
"should allow selection by value": function(selector) {
selector.selectByVal(gradesByGradeLastName.lookup("A"));
assert.deepEqual(selector.selectedRecs(), [gradeBook[3]]);
},
"should allow selection by filter": function(selector) {
selector.selectByVal(gradesByGradeLastName.lookup("A"));
assert.deepEqual(selector.selectedRecs(), [gradeBook[3]]);
},
*/
suite.addBatch({
"supergroup general": {
topic: function topic() {
return null;
},
"rawValues are group names": function rawValuesAreGroupNames() {
_assert2.default.deepEqual(gradesByLastName.rawValues(), ["Gold", "Sassoon", "Androy"]);
},
"dimensions can be functions": function dimensionsCanBeFunctions() {
_assert2.default.deepEqual(gradesByName.rawValues(), ["Sigfried Gold", "Sigfried Sassoon", "Sigfried Androy"]);
},
"multi-level supergroups have top-level rawValues": function multiLevelSupergroupsHaveTopLevelRawValues() {
_assert2.default.deepEqual(gradesByGradeLastName.rawValues().sort(), ["A", "B", "C"]);
},
"multi-level supergroups have children": function multiLevelSupergroupsHaveChildren() {
_assert2.default.equal(gradesByGradeLastName[1]._hasChildren, true);
},
"multi-level supergroups have second-level rawValues": function multiLevelSupergroupsHaveSecondLevelRawValues() {
_assert2.default.deepEqual(gradesByGradeLastName[1].children.rawValues().sort(), ["Androy", "Gold"]);
},
"multi-level supergroups have Value at second-level": function multiLevelSupergroupsHaveValueAtSecondLevel() {
_assert2.default.equal(gradesByGradeLastName[1].children[0] instanceof _supergroup.Value, true);
},
"first group contains three raw records": function firstGroupContainsThreeRawRecords() {
_assert2.default.deepEqual(gradesByLastName[0].records.slice(0), [{ "lastName": "Gold", "firstName": "Sigfried", "class": "Remedial Programming", "grade": "C", "num": 2 }, { "lastName": "Gold", "firstName": "Sigfried", "class": "Literary Posturing", "grade": "B", "num": 3 }, { "lastName": "Gold", "firstName": "Sigfried", "class": "Documenting with Pretty Colors", "grade": "B", "num": 3 }]);
},
"lookup finds the right thing": function lookupFindsTheRightThing() {
_assert2.default.equal(gradesByLastName.lookup("Sassoon").records[0], gradeBook[3]);
},
"two groups for 'B'": function twoGroupsForB() {
//console.log('lookup:', gradesByGradeLastName.lookup("B"));
_assert2.default.deepEqual(gradesByGradeLastName.lookup("B").children.rawValues(), ["Gold", "Androy"]);
},
"leafnodes on leaf returns ValueList": function leafnodesOnLeafReturnsValueList() {
var leafNodes = gradesByGradeLastName[1].leafNodes();
_assert2.default.equal(leafNodes instanceof _supergroup.ValueList, true);
},
"leafnodes on leaf returns Value": function leafnodesOnLeafReturnsValue() {
var leafNodes = gradesByGradeLastName[1].children[0].leafNodes();
_assert2.default.equal(leafNodes.length, 1);
_assert2.default.equal(leafNodes[0] instanceof _supergroup.Value, true);
},
"leafnodes on Value returns Values": function leafnodesOnValueReturnsValues() {
var leafNodes = gradesByGradeLastName[1].leafNodes();
_assert2.default.equal(leafNodes.length, 2);
_assert2.default.equal(leafNodes[0] instanceof _supergroup.Value, true);
},
"leafnodes on Supergroup returns ValueList": function leafnodesOnSupergroupReturnsValueList() {
var leafNodes = gradesByGradeLastName.leafNodes();
_assert2.default.deepEqual(leafNodes.rawValues(), ["Gold", "Androy"]);
_assert2.default.equal(leafNodes.length, 4);
_assert2.default.equal(leafNodes instanceof _supergroup.ValueList, true);
},
"leafnodes on supergroup returns Values": function leafnodesOnSupergroupReturnsValues() {
var leafNode = gradesByGradeLastName.leafNodes()[0];
console.log('leafNode is Value: ' + (leafNode instanceof _supergroup.Value) + ', its a ' + leafNode.constructor + ', leafNode: ' + leafNode);
_assert2.default.equal(gradesByGradeLastName.leafNodes()[0] instanceof _supergroup.Value, true);
},
"leafnodes": function leafnodes() {
_assert2.default.deepEqual(gradesByGradeLastName.leafNodes().namePaths(), ["C/Gold", "B/Gold", "B/Androy", "A/Sassoon"]);
},
"sort": function sort() {
_assert2.default.deepEqual(gradesByGradeLastName.leafNodes().sort(function (a, b) {
return a.namePath() < b.namePath() ? -1 : b.namePath() < a.namePath() ? 1 : 0;
}).namePaths(), ['A/Sassoon', 'B/Androy', 'B/Gold', 'C/Gold']);
}
}
});
/*
"sortBy": function() {
assert.deepEqual(gradesByGradeLastName.leafNodes().sortBy(
function(d){ return d.namePath(); }).namePaths(),
[ 'A/Sassoon', 'B/Androy', 'B/Gold', 'C/Gold' ]);
},
"previous": function() {
assert.deepEqual(gradesByGradeLastName.sort()[2].previous().namePath(),
"B");
},
"vals should have rootList": function() {
assert.equal(gradesByGradeLastName.lookup(['A','Sassoon']).rootList(),
gradesByGradeLastName);
},
*/
/*
"asRootVal": {
topic: function(){
// make new version of gradesByGradeLastName so asRootVal doesn't mess up other one
var gradesByGradeLastName = _.supergroup(gradeBook, ['grade','lastName']);
var root = gradesByGradeLastName.asRootVal();
return {gradesByGradeLastName:gradesByGradeLastName, root:root};
},
'should set its dimension as "root"': function(topic) {
assert.equal(topic.root.dim, 'root');
},
'should contain all the records': function(topic) {
assert.equal(topic.root.aggregate(_.sum, 'num'), 14);
},
'should namePath to root': function(topic) {
assert.deepEqual(topic.gradesByGradeLastName.leafNodes().namePaths(),
[ 'Root/C/Gold','Root/B/Gold','Root/B/Androy','Root/A/Sassoon' ]);
}
*/
/* haven't translated these yet
describe('hierarchicalTableToTree', function() {
var treePairs = [{"p":"animal","c":"mammal"},{"p":"animal","c":"reptile"},{"p":"animal","c":"fish"},{"p":"animal","c":"bird"},{"p":"bird","c":"kiwi"},{"p":"kiwi","c":"orange tailed kiwi"},{"p":"plant","c":"tree"},{"p":"plant","c":"bush"},{"p":"plant","c":"grass"},{"p":"plant","c":"fruit"},{"p":"fruit","c":"kiwi"},{"p":"kiwi","c":"purple kiwi"},{"p":"tree","c":"oak"},{"p":"tree","c":"maple"},{"p":"oak","c":"pin oak"},{"p":"mammal","c":"primate"},{"p":"mammal","c":"bovine"},{"p":"bovine","c":"cow"},{"p":"bovine","c":"ox"},{"p":"primate","c":"monkey"},{"p":"primate","c":"ape"},{"p":"ape","c":"chimpanzee"},{"p":"ape","c":"gorilla"},{"p":"ape","c":"me"}];
var tree;
it('should work with (data, parentProp, childProp) params', function() {
tree = _.hierarchicalTableToTree(treePairs, 'p', 'c');
expect(tree).toBeDefined();
});
it('should make this tree', function() {
var paths = _.invoke(tree.flattenTree(), 'namePath');
expect(paths).toEqual(["animal", "animal/mammal", "animal/mammal/primate", "animal/mammal/primate/monkey", "animal/mammal/primate/ape", "animal/mammal/primate/ape/chimpanzee", "animal/mammal/primate/ape/gorilla", "animal/mammal/primate/ape/me", "animal/mammal/bovine", "animal/mammal/bovine/cow", "animal/mammal/bovine/ox", "animal/reptile", "animal/fish", "animal/bird", "animal/bird/kiwi", "plant", "plant/tree", "plant/tree/oak", "plant/tree/oak/pin oak", "plant/tree/maple", "plant/bush", "plant/grass", "plant/fruit", "plant/fruit/kiwi", "plant/fruit/kiwi/orange tailed kiwi", "plant/fruit/kiwi/purple kiwi"]);
});
});
}
*/
suite.run();
/*
var test_data = [
{"person_id": "0", "domain_id": "Condition", "concept_name": "Impacted cerumen", "drug_era_start_date": "2008-02-19", "drug_era_end_date": "2008-02-19"},
{"person_id": "0", "domain_id": "Condition", "concept_name": "Otogenic otalgia", "drug_era_start_date": "2008-02-19", "drug_era_end_date": "2008-02-19"},
{"person_id": "0", "domain_id": "Condition", "concept_name": "Acquired trigger finger", "drug_era_start_date": "2008-02-23", "drug_era_end_date": "2008-02-23"},
{"person_id": "0", "domain_id": "Drug", "concept_name": "Methylprednisolone", "drug_era_start_date": "2008-02-23", "drug_era_end_date": "2008-02-23"},
{"person_id": "0", "domain_id": "Condition", "concept_name": "Pes anserinus bursitis", "drug_era_start_date": "2008-02-23", "drug_era_end_date": "2008-02-23"},
{"person_id": "0", "domain_id": "Condition", "concept_name": "Benign essential hypertension", "drug_era_start_date": "2008-02-28", "drug_era_end_date": "2008-02-28"},
{"person_id": "0", "domain_id": "Condition", "concept_name": "Familial hyperchylomicronemia", "drug_era_start_date": "2008-02-28", "drug_era_end_date": "2008-02-28"},
{"person_id": "0", "domain_id": "Condition", "concept_name": "Hyperlipidemia", "drug_era_start_date": "2008-02-28", "drug_era_end_date": "2008-02-28"},
{"person_id": "0", "domain_id": "Condition", "concept_name": "Tachycardia", "drug_era_start_date": "2008-02-28", "drug_era_end_date": "2008-02-28"},
{"person_id": "0", "domain_id": "Condition", "concept_name": "Amblyopia", "drug_era_start_date": "2008-03-09", "drug_era_end_date": "2008-03-09"},
{"person_id": "0", "domain_id": "Condition", "concept_name": "Astigmatism", "drug_era_start_date": "2008-03-09", "drug_era_end_date": "2008-03-09"},
{"person_id": "0", "domain_id": "Condition", "concept_name": "Myopia", "drug_era_start_date": "2008-03-09", "drug_era_end_date": "2008-03-09"},
{"person_id": "0", "domain_id": "Condition", "concept_name": "Nonexudative age-related macular degeneration", "drug_era_start_date": "2008-03-09", "drug_era_end_date": "2008-03-09"},
{"person_id": "0", "domain_id": "Condition", "concept_name": "Malignant lymphoma of intra-abdominal lymph nodes", "drug_era_start_date": "2008-03-31", "drug_era_end_date": "2008-03-31"},
{"person_id": "0", "domain_id": "Drug", "concept_name": "pantoprazole", "drug_era_start_date": "2008-03-31", "drug_era_end_date": "2008-03-31"},
{"person_id": "0", "domain_id": "Condition", "concept_name": "Mobitz type II atrioventricular block", "drug_era_start_date": "2008-04-04", "drug_era_end_date": "2008-04-04"},
{"person_id": "0", "domain_id": "Condition", "concept_name": "Benign prostatic hypertrophy with outflow obstruction", "drug_era_start_date": "2008-04-24", "drug_era_end_date": "2008-04-24"},
{"person_id": "0", "domain_id": "Condition", "concept_name": "Chronic cystitis", "drug_era_start_date": "2008-04-24", "drug_era_end_date": "2008-04-24"},
{"person_id": "0", "domain_id": "Condition", "concept_name": "Chronic hepatitis C", "drug_era_start_date": "2008-04-24", "drug_era_end_date": "2008-04-24"},
{"person_id": "0", "domain_id": "Condition", "concept_name": "Acute pyelonephritis with medullary necrosis", "drug_era_start_date": "2008-05-08", "drug_era_end_date": "2008-05-08"},
{"person_id": "0", "domain_id": "Condition", "concept_name": "Urinary tract infectious disease", "drug_era_start_date": "2008-05-08", "drug_era_end_date": "2008-05-08"},
{"person_id": "0", "domain_id": "Condition", "concept_name": "Exudative age-related macular degeneration", "drug_era_start_date": "2008-05-20", "drug_era_end_date": "2008-05-20"},
{"person_id": "1494", "domain_id": "Condition", "concept_name": "Disorder of lipid metabolism", "drug_era_start_date": "2010-12-01", "drug_era_end_date": "2010-12-01"},
{"person_id": "1494", "domain_id": "Condition", "concept_name": "Open wound of foot except toes with complication", "drug_era_start_date": "2010-12-01", "drug_era_end_date": "2010-12-01"},
{"person_id": "1494", "domain_id": "Condition", "concept_name": "Peripheral vascular disease", "drug_era_start_date": "2010-12-01", "drug_era_end_date": "2010-12-01"}];
var domcon = _.supergroup(test_data, ['domain_id','concept_name']);
//var domcon = _.supergroup(person_eras, ['domain_id']);
console.log(domcon.rawValues());
*/