Skip to content

Commit 43977e8

Browse files
author
Tom Pearson
authored
Add getEntityIndicator (#18)
* add a method for getting the value of an indicator
1 parent e506bc9 commit 43977e8

File tree

7 files changed

+53
-33
lines changed

7 files changed

+53
-33
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,5 @@ out.txt
7878
favicon.ico
7979
data/education/entities.csv
8080
data/education/index.csv
81+
data/inclusiveinternet/2021/entities.csv
82+
data/inclusiveinternet/2021/indicators.csv

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,10 @@ You can clear the exclusion by calling the same function with no arguments
9494
indexCore.filterIndicators()
9595
```
9696

97-
### indexCore.__getEntity([indicatorId:String])__:Object
97+
### indexCore.__getEntity([entityName:String])__:Object
9898

99+
### indexCore.__getEntityIndicator([entityName:String], [indicatorId])__:Object
100+
This function returns the value of a given indicator (__indicatorId__) for a given entity (__entityName__) if a user set version of the indicator exists, it is that which will be returned.
99101
### indexCore.__getEntities()__:Array
100102

101103
### indexCore.__getIndexMean([indicatorId:String], _[normalise:Boolean=false]_)__:Number

index.js

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,39 +10,37 @@ const waterEntities = csvParse(fs.readFileSync(`${waterRootDir}/entities.csv`, '
1010

1111
// const waterOptimisationIndex = indexCore(waterIndicators, waterEntities);
1212

13-
const inclusiveIternetRootDir = 'data/inclusiveinternet';
13+
const inclusiveIternetRootDir = 'data/inclusiveinternet/2021';
1414

1515
const inclusiveInternetIndicators = csvParse(fs.readFileSync(`${inclusiveIternetRootDir}/indicators.csv`, 'utf-8'));
1616
const inclusiveInternetEntities = csvParse(fs.readFileSync(`${inclusiveIternetRootDir}/entities.csv`, 'utf-8'));
17-
1817
const inclusiveInternetIndex = indexCore(inclusiveInternetIndicators, inclusiveInternetEntities);
1918

2019

21-
const simpleRootDir = 'data/simple-index-set';
22-
23-
const simpleIndicators = csvParse(fs.readFileSync(`${simpleRootDir}/indicators.csv`, 'utf-8'));
24-
const simpleEntities = csvParse(fs.readFileSync(`${simpleRootDir}/entities.csv`, 'utf-8'));
20+
console.log('value', inclusiveInternetIndex.indexedData['Singapore']['value'])
21+
console.log('1', inclusiveInternetIndex.indexedData['Singapore']['1'])
22+
console.log('1.2', inclusiveInternetIndex.indexedData['Singapore']['1.2'])
23+
console.log('1.2.1', inclusiveInternetIndex.getEntityIndicator('Singapore','1.2.1'))
2524

26-
const simpleIndex = indexCore(simpleIndicators, simpleEntities);
25+
inclusiveInternetIndex.adjustValue('Singapore','1.2.1',50);
2726

28-
console.log(simpleIndex.indexedData)
27+
console.log('adjusted')
28+
console.log('value', inclusiveInternetIndex.indexedData['Singapore']['value'])
29+
console.log('1', inclusiveInternetIndex.indexedData['Singapore']['1'])
30+
console.log('1.2', inclusiveInternetIndex.indexedData['Singapore']['1.2'])
31+
console.log('1.2.1', inclusiveInternetIndex.getEntityIndicator('Singapore','1.2.1'))
2932

30-
// console.log(waterOptimisationIndex.indexedData['Abu Dhabi']['1']);
31-
// console.log(waterOptimisationIndex.indexedData['Abu Dhabi'].value);
32-
// console.log(waterOptimisationIndex.indexStructure);
33-
// console.log(waterOptimisationIndex.getIndexMean('1.1'))
34-
// console.log(waterOptimisationIndex.getIndexMean('2.1.1'))
35-
// console.log(waterOptimisationIndex.getIndexMean())
33+
// const simpleRootDir = 'data/simple-index-set';
3634

37-
// indicator 3.4.4 in the water index has .a and .b sub indicators
38-
// for this indicator abu dhabi has different values for a and b
39-
// const before = JSON.stringify(waterOptimisationIndex.getEntity('Abu Dhabi'), null, ' ')
40-
// delete before.data;
41-
// waterOptimisationIndex.filterIndicators(indicator=>{
42-
// return String(indicator.id).indexOf('b')>0; // if the indicator includes "b" in it's id ignore it
43-
// })
44-
// const after = JSON.stringify(waterOptimisationIndex.getEntity('Abu Dhabi'), null, ' ')
45-
// delete after.data; // just for neater output (note data is the original data for an entity used to calculate the index)
35+
// const simpleIndicators = csvParse(fs.readFileSync(`${simpleRootDir}/indicators.csv`, 'utf-8'));
36+
// const simpleEntities = csvParse(fs.readFileSync(`${simpleRootDir}/entities.csv`, 'utf-8'));
4637

47-
// console.log('BEFORE', before);
48-
// console.log('AFTER', after);
38+
// const simpleIndex = indexCore(simpleIndicators, simpleEntities);
39+
// console.log(simpleIndex.indexedData['Monopoly'].value)
40+
// console.log(simpleIndex.indexedData['Monopoly']['1'])
41+
// console.log(simpleIndex.indexedData['Monopoly']['1.1'])
42+
// simpleIndex.adjustValue('Monopoly','1.1',10);
43+
// console.log('---');
44+
// console.log(simpleIndex.indexedData['Monopoly'].value)
45+
// console.log(simpleIndex.indexedData['Monopoly']['1'])
46+
// console.log(simpleIndex.indexedData['Monopoly']['1.1'])

package-lock.json

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@economist/index-core",
3-
"version": "1.4.2",
3+
"version": "1.5.0",
44
"description": "",
55
"main": "src/index-core.js",
66
"type": "module",

src/index-core.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@ function indexCore(indicatorsData = [], entitiesData = [], indexMax = 100, allow
1616
return indexedData[entityName];
1717
}
1818

19+
function getEntityIndicator(entityName, indicatorID){
20+
if(indexedData[entityName].user && indexedData[entityName].user[indicatorID]){
21+
return indexedData[entityName].user[indicatorID];
22+
}
23+
return indexedData[entityName][indicatorID];
24+
}
25+
1926
function getEntities() {
2027
return entitiesData.map((d) => d.name);
2128
}
@@ -119,9 +126,13 @@ function indexCore(indicatorsData = [], entitiesData = [], indexMax = 100, allow
119126
.map((indicator) => formatIndicator(indicator, newEntity, indexMax));
120127

121128
newEntity.value = calculateWeightedMean(pillarIndicators, indexMax);
129+
if(!newEntity.user){
130+
newEntity.user = {};
131+
}
122132
return newEntity;
123133
}
124134

135+
125136
function adjustValue(entityName, indicatorID, value) {
126137
const e = getEntity(entityName);
127138

@@ -223,8 +234,9 @@ function indexCore(indicatorsData = [], entitiesData = [], indexMax = 100, allow
223234
adjustValue,
224235
adjustWeight,
225236
filterIndicators,
226-
getEntity,
227237
getEntities,
238+
getEntity,
239+
getEntityIndicator,
228240
getIndexMean,
229241
getIndicator,
230242
getIndicatorLookup,

test/index-core.test.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,10 @@ test('indicator overide index-core', ()=>{
7878
const simpleIndex = indexCore(simpleIndicators, simpleEntities, undefined, false);
7979
expect(simpleIndex.indexedData['Catan']['1']).toBe(10);
8080
expect(simpleIndex.indexedData['Twilight Imperium']['2.3']).toBe(70);
81+
})
82+
83+
test('get the user set value for an indicator', ()=>{
84+
const simpleIndex = indexCore(simpleIndicators, simpleEntities);
85+
simpleIndex.adjustValue('Monopoly', '1.2', 3.142);
86+
expect(simpleIndex.getEntityIndicator('Monopoly','1.2')).toBe(3.142);
8187
})

0 commit comments

Comments
 (0)