Skip to content

Commit

Permalink
feat(optional_region): add withOptional flag that will trigger region…
Browse files Browse the repository at this point in the history
… when needed
  • Loading branch information
Joxit committed Feb 5, 2021
1 parent cb369ca commit bbf316a
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 23 deletions.
12 changes: 8 additions & 4 deletions labelGenerator.js
Original file line number Diff line number Diff line change
Expand Up @@ -105,13 +105,16 @@ function buildPrefixLabelParts(schema, record) {

}

function buildAdminLabelPart(schema, record) {
function buildAdminLabelPart(schema, record, { withOptional }) {
let labelParts = [];
const optionals = _.get(schema, 'meta.optional', {});

// iterate the schema
for (const field in schema.valueFunctions) {
const valueFunction = schema.valueFunctions[field];
labelParts.push(valueFunction(record));
if (!optionals[field] || withOptional) {
labelParts.push(valueFunction(record));
}
}

return labelParts;
Expand Down Expand Up @@ -144,13 +147,14 @@ function buildPostfixLabelParts(schema, record) {
return [record.name.default];
}

module.exports = function( record ){
module.exports = function( record , options ){
const schema = getSchema(record.country_a);
const separator = _.get(schema, ['meta','separator'], ', ');
const withOptional = _.get(options, 'withOptional', false);

// in virtually all cases, this will be the `name` field
const prefixParts = buildPrefixLabelParts(schema, record);
const adminParts = buildAdminLabelPart(schema, record);
const adminParts = buildAdminLabelPart(schema, record, { withOptional });
const postfixParts = buildPostfixLabelParts(schema, record);

let labelParts = _.concat(prefixParts, adminParts, postfixParts);
Expand Down
27 changes: 27 additions & 0 deletions labelSchema.js
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,22 @@ function getFRACountryValue() {
};
}


// this function generates the region field for FRA records.
// 1. use nothing if the record is a in the French overseas or Paris (VP),
// eg - Saint-Denis, Reunion (instead of Saint-Denis, Reunion, Reunion)
// 2. use region name, eg - Bagneux, Hauts-De-Seine, France
// 3. use this with caution, Paris is both a locality and region. This can cause label like `Tour Eiffel, Paris, Paris, France`
function getFRARegionValue() {
const _default = getFirstProperty(['region']);
return (record) => {
if (!_.isEmpty(record.region_a) && (_.includes(FRA_OVERSEAS, record.region_a[0]) || record.region_a[0] === 'VP')) {
return undefined;
}
return _default(record);
};
}

function isInNYC(record) {
const _region_a = getFirstProperty(['region_a'])(record);
const _country_a = getFirstProperty(['country_a'])(record);
Expand Down Expand Up @@ -159,6 +175,11 @@ module.exports = {
'local': getFirstProperty(['locality', 'localadmin']),
'regional': getRegionalAbbreviation,
'country': getFirstProperty(['dependency', 'country'])
},
'meta': {
'optional': {
'regional': true
}
}
},
'GBR': {
Expand Down Expand Up @@ -203,7 +224,13 @@ module.exports = {
'FRA': {
'valueFunctions': {
'local': getFirstProperty(['locality', 'localadmin']),
'region': getFRARegionValue(),
'country': getFRACountryValue()
},
'meta': {
'optional': {
'region': true
}
}
},
'ITA': {
Expand Down
51 changes: 41 additions & 10 deletions test/labelGenerator_FRA.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ module.exports.tests.united_kingdom = function(test, common) {
'country': ['France']
};
t.equal(generator(doc),'venue name, locality name, France');
t.equal(generator(doc, {withOptional: true}),'venue name, locality name, region name, France');
t.end();
});

Expand All @@ -47,7 +48,9 @@ module.exports.tests.united_kingdom = function(test, common) {
'country_a': ['FRA'],
'country': ['France']
};
t.equal(generator(doc),'venue name, locality name, Reunion');
let expected = 'venue name, locality name, Reunion';
t.equal(generator(doc), expected);
t.equal(generator(doc, { withOptional: true }), expected);
t.end();
});

Expand All @@ -67,6 +70,7 @@ module.exports.tests.united_kingdom = function(test, common) {
'country': ['France']
};
t.equal(generator(doc),'venue name, localadmin name, France');
t.equal(generator(doc, {withOptional: true}),'venue name, localadmin name, region name, France');
t.end();
});

Expand All @@ -86,7 +90,9 @@ module.exports.tests.united_kingdom = function(test, common) {
'country_a': ['FRA'],
'country': ['France']
};
t.equal(generator(doc),'venue name, localadmin name, Reunion');
let expected = 'venue name, localadmin name, Reunion';
t.equal(generator(doc), expected);
t.equal(generator(doc, { withOptional: true }), expected);
t.end();
});

Expand All @@ -107,6 +113,7 @@ module.exports.tests.united_kingdom = function(test, common) {
'country': ['France']
};
t.equal(generator(doc),'house number street name, locality name, France');
t.equal(generator(doc, {withOptional: true}),'house number street name, locality name, region name, France');
t.end();
});

Expand All @@ -127,7 +134,9 @@ module.exports.tests.united_kingdom = function(test, common) {
'country_a': ['FRA'],
'country': ['France']
};
t.equal(generator(doc),'house number street name, locality name, Martinique');
const expected = 'house number street name, locality name, Martinique';
t.equal(generator(doc), expected);
t.equal(generator(doc, {withOptional: true}), expected);
t.end();
});

Expand All @@ -146,6 +155,7 @@ module.exports.tests.united_kingdom = function(test, common) {
'country': ['France']
};
t.equal(generator(doc),'neighbourhood name, locality name, France');
t.equal(generator(doc, {withOptional: true}),'neighbourhood name, locality name, region name, France');
t.end();
});

Expand All @@ -164,7 +174,9 @@ module.exports.tests.united_kingdom = function(test, common) {
'country_a': ['FRA'],
'country': ['France']
};
t.equal(generator(doc),'neighbourhood name, locality name, Martinique');
let expected = 'neighbourhood name, locality name, Martinique';
t.equal(generator(doc), expected);
t.equal(generator(doc, { withOptional: true }), expected);
t.end();
});

Expand All @@ -182,6 +194,7 @@ module.exports.tests.united_kingdom = function(test, common) {
'country': ['France']
};
t.equal(generator(doc),'locality name, France');
t.equal(generator(doc, { withOptional: true }),'locality name, region name, France');
t.end();
});

Expand All @@ -199,7 +212,9 @@ module.exports.tests.united_kingdom = function(test, common) {
'country_a': ['FRA'],
'country': ['France']
};
t.equal(generator(doc),'locality name, Guadeloupe');
let expected = 'locality name, Guadeloupe';
t.equal(generator(doc), expected);
t.equal(generator(doc, {withOptional: true}), expected);
t.end();
});

Expand All @@ -216,6 +231,7 @@ module.exports.tests.united_kingdom = function(test, common) {
'country': ['France']
};
t.equal(generator(doc),'localadmin name, France');
t.equal(generator(doc, { withOptional: true }),'localadmin name, region name, France');
t.end();
});

Expand All @@ -232,7 +248,9 @@ module.exports.tests.united_kingdom = function(test, common) {
'country_a': ['FRA'],
'country': ['France']
};
t.equal(generator(doc),'localadmin name, French Guiana');
let expected = 'localadmin name, French Guiana';
t.equal(generator(doc), expected);
t.equal(generator(doc, { withOptional: true }), expected);
t.end();
});

Expand All @@ -248,6 +266,7 @@ module.exports.tests.united_kingdom = function(test, common) {
'country': ['France']
};
t.equal(generator(doc),'county name, France');
t.equal(generator(doc, { withOptional: true }),'county name, region name, France');
t.end();
});

Expand All @@ -263,7 +282,9 @@ module.exports.tests.united_kingdom = function(test, common) {
'country_a': ['FRA'],
'country': ['France']
};
t.equal(generator(doc),'county name, Reunion');
let expected = 'county name, Reunion';
t.equal(generator(doc), expected);
t.equal(generator(doc, { withOptional: true }), expected);
t.end();
});

Expand All @@ -278,6 +299,7 @@ module.exports.tests.united_kingdom = function(test, common) {
'country': ['France']
};
t.equal(generator(doc),'macrocounty name, France');
t.equal(generator(doc, { withOptional: true }),'macrocounty name, region name, France');
t.end();
});

Expand All @@ -292,7 +314,9 @@ module.exports.tests.united_kingdom = function(test, common) {
'country_a': ['FRA'],
'country': ['France']
};
t.equal(generator(doc),'macrocounty name, Reunion');
let expected = 'macrocounty name, Reunion';
t.equal(generator(doc), expected);
t.equal(generator(doc, { withOptional: true }), expected);
t.end();
});

Expand All @@ -306,6 +330,7 @@ module.exports.tests.united_kingdom = function(test, common) {
'country': ['France']
};
t.equal(generator(doc),'region name, France');
t.equal(generator(doc, { withOptional: true }),'region name, France');
t.end();
});

Expand All @@ -320,6 +345,7 @@ module.exports.tests.united_kingdom = function(test, common) {
'country': ['France']
};
t.equal(generator(doc),'Reunion');
t.equal(generator(doc, { withOptional: true }),'Reunion');
t.end();
});

Expand All @@ -331,7 +357,9 @@ module.exports.tests.united_kingdom = function(test, common) {
'country_a': ['FRA'],
'country': ['France']
};
t.equal(generator(doc),'macroregion name, France');
let expected = 'macroregion name, France';
t.equal(generator(doc),expected);
t.equal(generator(doc, { withOptional: true }),expected);
t.end();
});

Expand All @@ -344,7 +372,9 @@ module.exports.tests.united_kingdom = function(test, common) {
'country_a': ['FRA'],
'country': ['France']
};
t.equal(generator(doc),'dependency name');
let expected = 'dependency name';
t.equal(generator(doc),expected);
t.equal(generator(doc, { withOptional: true }),expected);
t.end();
});

Expand Down Expand Up @@ -375,6 +405,7 @@ module.exports.tests.united_kingdom = function(test, common) {
'country': ['France']
};
t.equal(generator(doc),'locality name, dependency name');
t.equal(generator(doc, { withOptional: true }),'locality name, region name, dependency name');
t.end();
});

Expand Down
28 changes: 20 additions & 8 deletions test/labelGenerator_default.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ module.exports.tests.default_country = function(test, common) {
'country_a': ['country code'],
'country': ['country name']
};
t.equal(generator(doc),'venue name, locality name, region abbrv, country name');
t.equal(generator(doc),'venue name, locality name, country name');
t.equal(generator(doc, { withOptional: true }),'venue name, locality name, region abbrv, country name');
t.end();
});

Expand All @@ -49,7 +50,8 @@ module.exports.tests.default_country = function(test, common) {
'country_a': ['country code'],
'country': ['country name']
};
t.equal(generator(doc),'venue name, localadmin name, region abbrv, country name');
t.equal(generator(doc),'venue name, localadmin name, country name');
t.equal(generator(doc, { withOptional: true }),'venue name, localadmin name, region abbrv, country name');
t.end();
});

Expand All @@ -70,7 +72,8 @@ module.exports.tests.default_country = function(test, common) {
'country_a': ['country code'],
'country': ['country name']
};
t.equal(generator(doc),'house number street name, locality name, region abbrv, country name');
t.equal(generator(doc),'house number street name, locality name, country name');
t.equal(generator(doc, { withOptional: true }),'house number street name, locality name, region abbrv, country name');
t.end();
});

Expand All @@ -89,7 +92,8 @@ module.exports.tests.default_country = function(test, common) {
'country_a': ['country code'],
'country': ['country name']
};
t.equal(generator(doc),'neighbourhood name, locality name, region abbrv, country name');
t.equal(generator(doc),'neighbourhood name, locality name, country name');
t.equal(generator(doc, { withOptional: true }),'neighbourhood name, locality name, region abbrv, country name');
t.end();
});

Expand All @@ -107,7 +111,8 @@ module.exports.tests.default_country = function(test, common) {
'country_a': ['country code'],
'country': ['country name']
};
t.equal(generator(doc),'locality name, region abbrv, country name');
t.equal(generator(doc),'locality name, country name');
t.equal(generator(doc, { withOptional: true }),'locality name, region abbrv, country name');
t.end();
});

Expand All @@ -124,7 +129,8 @@ module.exports.tests.default_country = function(test, common) {
'country_a': ['country code'],
'country': ['country name']
};
t.equal(generator(doc),'localadmin name, region abbrv, country name');
t.equal(generator(doc),'localadmin name, country name');
t.equal(generator(doc, { withOptional: true }),'localadmin name, region abbrv, country name');
t.end();
});

Expand All @@ -140,7 +146,8 @@ module.exports.tests.default_country = function(test, common) {
'country_a': ['country code'],
'country': ['country name']
};
t.equal(generator(doc),'county name, region abbrv, country name');
t.equal(generator(doc),'county name, country name');
t.equal(generator(doc, { withOptional: true }),'county name, region abbrv, country name');
t.end();
});

Expand All @@ -155,7 +162,8 @@ module.exports.tests.default_country = function(test, common) {
'country_a': ['country code'],
'country': ['country name']
};
t.equal(generator(doc),'macrocounty name, region abbrv, country name');
t.equal(generator(doc),'macrocounty name, country name');
t.equal(generator(doc, { withOptional: true }),'macrocounty name, region abbrv, country name');
t.end();
});

Expand All @@ -170,6 +178,7 @@ module.exports.tests.default_country = function(test, common) {
'country': ['country name']
};
t.equal(generator(doc),'region name, country name');
t.equal(generator(doc, { withOptional: true }),'region name, country name');
t.end();
});

Expand All @@ -182,6 +191,7 @@ module.exports.tests.default_country = function(test, common) {
'country': ['country name']
};
t.equal(generator(doc),'macroregion name, country name');
t.equal(generator(doc, { withOptional: true }),'macroregion name, country name');
t.end();
});

Expand Down Expand Up @@ -223,6 +233,7 @@ module.exports.tests.default_country = function(test, common) {
'country': ['country name']
};
t.equal(generator(doc),'locality name, dependency name');
t.equal(generator(doc, { withOptional: true }),'locality name, dependency name');
t.end();
});

Expand All @@ -235,6 +246,7 @@ module.exports.tests.default_country = function(test, common) {
//note no country_a
};
t.equal(generator(doc),'region name');
t.equal(generator(doc, { withOptional: true }),'region name');
t.end();
});

Expand Down
Loading

0 comments on commit bbf316a

Please sign in to comment.