From 8356c4d6f687a8478b3798f2381485b44602cdc0 Mon Sep 17 00:00:00 2001 From: Cameron Batt Date: Fri, 8 Jun 2018 15:57:37 +1000 Subject: [PATCH] feat(extract-tz-data): move locationDisplayName into extract-tz-data as it's generically useful --- .../test-extracted-data.ts | 1 + src/extract-tz-data/extract-tz-data.spec.ts | 2 + src/extract-tz-data/extract-tz-data.ts | 13 ++++-- src/extract-tz-data/format-location.spec.ts | 14 ++++++ src/extract-tz-data/format-location.ts | 6 +++ src/template-tests/group-by-region.spec.ts | 42 ++++++++--------- src/types-for-ts-templates.ts | 5 +- templates/group-by-region/group-by-region.ts | 46 +++++-------------- .../group-by-region/group-by-region.type.ts | 17 +++++++ 9 files changed, 80 insertions(+), 66 deletions(-) create mode 100644 src/extract-tz-data/format-location.spec.ts create mode 100644 src/extract-tz-data/format-location.ts create mode 100644 templates/group-by-region/group-by-region.type.ts diff --git a/src/create-json-from-templates-and-zone-data/test-extracted-data.ts b/src/create-json-from-templates-and-zone-data/test-extracted-data.ts index f45a899..f91b26f 100644 --- a/src/create-json-from-templates-and-zone-data/test-extracted-data.ts +++ b/src/create-json-from-templates-and-zone-data/test-extracted-data.ts @@ -28,6 +28,7 @@ export const sampleExtractedData: IExtractedTimezoneData = { geographicArea: 'Australia', geographicAreaDisplayName: 'Australia', location: 'Sydney', + locationDisplayName: 'Sydney', comments: 'New South Wales (most areas)' } ], diff --git a/src/extract-tz-data/extract-tz-data.spec.ts b/src/extract-tz-data/extract-tz-data.spec.ts index a935da4..952b6d0 100644 --- a/src/extract-tz-data/extract-tz-data.spec.ts +++ b/src/extract-tz-data/extract-tz-data.spec.ts @@ -30,6 +30,7 @@ describe('extractTzData', () => { geographicAreaDisplayName: 'Indian Ocean', geographicArea: 'Indian', location: 'Test', + locationDisplayName: 'Test', comments: 'Foo' }; @@ -60,6 +61,7 @@ describe('extractTzData', () => { geographicArea: 'Cameron', geographicAreaDisplayName: 'Cameron', location: 'TestA', + locationDisplayName: 'TestA', comments: null }; diff --git a/src/extract-tz-data/extract-tz-data.ts b/src/extract-tz-data/extract-tz-data.ts index 2744278..b21de90 100644 --- a/src/extract-tz-data/extract-tz-data.ts +++ b/src/extract-tz-data/extract-tz-data.ts @@ -6,7 +6,8 @@ import {removeLineBreaks} from '../util/util'; import * as math from 'mathjs' import {isValidZoneTabRow} from './is-valid-zone-tab-row'; import {extractGeographicAreaAndLocation} from './extract-geographic-area-and-location'; -import {ICoordinates, IExtractedTimezoneData} from '../types-for-ts-templates'; +import {ICoordinates, IExtractedTimezone, IExtractedTimezoneData} from '../types-for-ts-templates'; +import {formatLocation} from './format-location'; export function extractTzData(zoneData: any, zoneFileName: string): IExtractedTimezoneData { const separator = '\t'; @@ -14,21 +15,23 @@ export function extractTzData(zoneData: any, zoneFileName: string): IExtractedTi const filteredZoneData = parsedCSV.filter(isValidZoneTabRow); - const zones = filteredZoneData + const zones: IExtractedTimezone[] = filteredZoneData .map(zoneData => { const [countryCodes , coordinates, timezoneName, comments] = zoneData; const allCodes = countryCodes.split(','); const {geographicArea, location} = extractGeographicAreaAndLocation(timezoneName); - return { + const extractedTimezone: IExtractedTimezone = { countryCodes: allCodes, coordinates: parseCoordinates(coordinates), timezoneName: removeLineBreaks(timezoneName), geographicArea: geographicArea, geographicAreaDisplayName: geographicAreaDisplayName(geographicArea), - location: location, + location, + locationDisplayName: formatLocation(location), comments: comments || null - } + }; + return extractedTimezone }); return { diff --git a/src/extract-tz-data/format-location.spec.ts b/src/extract-tz-data/format-location.spec.ts new file mode 100644 index 0000000..15b3569 --- /dev/null +++ b/src/extract-tz-data/format-location.spec.ts @@ -0,0 +1,14 @@ +import {formatLocation} from './format-location'; + +describe('formatLocation', () => { + it('should turn a location string into a location object', () => { + expect(formatLocation('Sydney')) + .toEqual('Sydney'); + + expect(formatLocation('Argentina/Tucuman')) + .toEqual('Argentina - Tucuman'); + + expect(formatLocation('Cape_Verde')) + .toEqual('Cape Verde'); + }) +}); \ No newline at end of file diff --git a/src/extract-tz-data/format-location.ts b/src/extract-tz-data/format-location.ts new file mode 100644 index 0000000..94db9c8 --- /dev/null +++ b/src/extract-tz-data/format-location.ts @@ -0,0 +1,6 @@ +export function formatLocation(location: string): string { + const displayName = location + .replace('/', ' - ') + .replace('_', ' '); + return displayName +} diff --git a/src/template-tests/group-by-region.spec.ts b/src/template-tests/group-by-region.spec.ts index 72c9756..224740b 100644 --- a/src/template-tests/group-by-region.spec.ts +++ b/src/template-tests/group-by-region.spec.ts @@ -1,22 +1,8 @@ import { alphabeticGeographicAreaNameSort, createFiles as groupByRegionCreateFiles, - formatLocation } from '../../templates/group-by-region/group-by-region' -describe('formatLocation', () => { - it('should turn a location string into a location object', () => { - expect(formatLocation('Sydney')) - .toEqual({location: 'Sydney', displayName: 'Sydney'}); - - expect(formatLocation('Argentina/Tucuman')) - .toEqual({location: 'Argentina/Tucuman', displayName: 'Argentina - Tucuman'}); - - expect(formatLocation('Cape_Verde')) - .toEqual({location: 'Cape_Verde', displayName: 'Cape Verde'}); - }) -}); - describe('group-by-region template', () => { it('should convert the data into the correct files', () => { const [america, atlantic, australia, europe, indian, pacific, geographicList] = groupByRegionCreateFiles(groupByRegionSampleExtractedData as any) @@ -25,26 +11,27 @@ describe('group-by-region template', () => { const americaValues = JSON.parse(america.json); const atlanticValues = JSON.parse(atlantic.json); + americaValues.locationList //? expect(americaValues.locationList).toEqual([ - {"location": 'Argentina/Tucuman', "displayName": "Argentina - Tucuman"} + {"location": 'Argentina/Tucuman', "locationDisplayName": "Argentina - Tucuman"} ]); expect(atlanticValues.locationList).toEqual([ - {"location": 'Cape_Verde', "displayName": "Cape Verde"} + {"location": 'Cape_Verde', "locationDisplayName": "Cape Verde"} ]); expect(australiaValues.locationList).toEqual([ - {"location": 'Sydney', "displayName": "Sydney"}, - {"location": 'Melbourne', "displayName": "Melbourne"} + {"location": 'Sydney', "locationDisplayName": "Sydney"}, + {"location": 'Melbourne', "locationDisplayName": "Melbourne"} ]); const expectedGeographicList = [ - {"geographicAreaName":"America","geographicAreaDisplayName":"America"}, - {"geographicAreaName":"Atlantic","geographicAreaDisplayName":"Atlantic Ocean"}, - {"geographicAreaName":"Australia","geographicAreaDisplayName":"Australia"}, - {"geographicAreaName":"Europe","geographicAreaDisplayName":"Europe"}, - {"geographicAreaName":"Indian","geographicAreaDisplayName":"Indian Ocean"}, - {"geographicAreaName":"Pacific","geographicAreaDisplayName":"Pacific Ocean"} + {"geographicArea":"America","geographicAreaDisplayName":"America"}, + {"geographicArea":"Atlantic","geographicAreaDisplayName":"Atlantic Ocean"}, + {"geographicArea":"Australia","geographicAreaDisplayName":"Australia"}, + {"geographicArea":"Europe","geographicAreaDisplayName":"Europe"}, + {"geographicArea":"Indian","geographicAreaDisplayName":"Indian Ocean"}, + {"geographicArea":"Pacific","geographicAreaDisplayName":"Pacific Ocean"} ]; const geographicValues = JSON.parse(geographicList.json); @@ -82,6 +69,7 @@ const groupByRegionSampleExtractedData = { geographicArea: 'Australia', geographicAreaDisplayName: 'Australia', location: 'Sydney', + locationDisplayName: 'Sydney', comments: 'New South Wales (most areas)' }, { @@ -92,6 +80,7 @@ const groupByRegionSampleExtractedData = { timezoneName: 'Australia/Melbourne', geographicAreaDisplayName: 'Australia', location: 'Melbourne', + locationDisplayName: 'Melbourne', comments: 'Victoria' }, { @@ -102,6 +91,7 @@ const groupByRegionSampleExtractedData = { geographicArea: 'America', geographicAreaDisplayName: 'America', location: 'Argentina/Tucuman', + locationDisplayName: 'Argentina - Tucuman', comments: 'Tucumán (TM)' }, { @@ -115,6 +105,7 @@ const groupByRegionSampleExtractedData = { geographicArea: 'Europe', geographicAreaDisplayName: 'Europe', location: 'London', + locationDisplayName: 'London', comments: null }, { @@ -125,6 +116,7 @@ const groupByRegionSampleExtractedData = { geographicArea: "Indian", geographicAreaDisplayName: "Indian Ocean", location: "Cocos", + locationDisplayName: "Cocos", comments: null }, { @@ -135,6 +127,7 @@ const groupByRegionSampleExtractedData = { geographicArea: "Atlantic", geographicAreaDisplayName: "Atlantic Ocean", location: "Cape_Verde", + locationDisplayName: "Cape Verde", comments: null }, { @@ -145,6 +138,7 @@ const groupByRegionSampleExtractedData = { geographicArea: "Pacific", geographicAreaDisplayName: "Pacific Ocean", location: "Galapagos", + locationDisplayName: "Galapgaos", comments: "Galápagos Islands" }, ], diff --git a/src/types-for-ts-templates.ts b/src/types-for-ts-templates.ts index 7b75846..efc8d90 100644 --- a/src/types-for-ts-templates.ts +++ b/src/types-for-ts-templates.ts @@ -20,12 +20,13 @@ export interface ICoordinates { } export interface IExtractedTimezone { - countryCodes: string[], + countryCodes: string[] coordinates: ICoordinates timezoneName: string geographicArea: string - geographicAreaDisplayName: string, + geographicAreaDisplayName: string location: string + locationDisplayName: string comments: string | null } diff --git a/templates/group-by-region/group-by-region.ts b/templates/group-by-region/group-by-region.ts index e30cb1a..60f8a04 100644 --- a/templates/group-by-region/group-by-region.ts +++ b/templates/group-by-region/group-by-region.ts @@ -1,38 +1,19 @@ import {FileToBeCreated, IExtractedTimezoneData} from '../../src/types-for-ts-templates'; - -interface GeographicAreaMap { - [geographicAreaName: string]: { - geographicAreaDisplayName: string, - geographicAreaName: string; - locationList: LocationListValue[] - } -} - -interface LocationListValue { - location: string, - displayName: string -} - -export interface GeographicAreaListValue { - geographicAreaName: string, - geographicAreaDisplayName: string -} +import {GeographicAreaListValue, GeographicAreaMap} from './group-by-region.type'; export function createFiles(extractedTimezoneData: IExtractedTimezoneData): FileToBeCreated[] { const geographicAreas = extractedTimezoneData.zones.reduce((acc, zone) => { - const {geographicArea, location, geographicAreaDisplayName} = zone; - - const _location = formatLocation(location); + const {geographicArea, location, locationDisplayName, geographicAreaDisplayName} = zone; if(!acc[geographicArea]) { acc[geographicArea] = { - geographicAreaName: geographicArea, + geographicArea, geographicAreaDisplayName, - locationList: [_location], + locationList: [{location, locationDisplayName}], } } else { const geoArea = acc[geographicArea]; - geoArea.locationList.push(_location); + geoArea.locationList.push({location, locationDisplayName}); } return acc; @@ -40,9 +21,9 @@ export function createFiles(extractedTimezoneData: IExtractedTimezoneData): File const areaList: GeographicAreaListValue[] = Object.keys(geographicAreas) .map(areaKey => { - const {geographicAreaDisplayName, geographicAreaName} = geographicAreas[areaKey]; + const {geographicAreaDisplayName, geographicArea} = geographicAreas[areaKey]; const result = { - geographicAreaName, + geographicArea, geographicAreaDisplayName }; return result @@ -50,10 +31,10 @@ export function createFiles(extractedTimezoneData: IExtractedTimezoneData): File .sort(alphabeticGeographicAreaNameSort); const files = areaList - .map(({geographicAreaName}) => { + .map(({geographicArea}) => { return { - fileName: geographicAreaName, - json: JSON.stringify(geographicAreas[geographicAreaName]) + fileName: geographicArea, + json: JSON.stringify(geographicAreas[geographicArea]) } }); @@ -79,9 +60,4 @@ export function alphabeticGeographicAreaNameSort(a: GeographicAreaListValue, b: return 0; } -export function formatLocation(location: string) { - const displayName = location - .replace('/', ' - ') - .replace('_', ' '); - return {location, displayName} -} + diff --git a/templates/group-by-region/group-by-region.type.ts b/templates/group-by-region/group-by-region.type.ts new file mode 100644 index 0000000..cedafa4 --- /dev/null +++ b/templates/group-by-region/group-by-region.type.ts @@ -0,0 +1,17 @@ +export interface GeographicAreaMap { + [geographicArea: string]: { + geographicAreaDisplayName: string, + geographicArea: string; + locationList: LocationListValue[] + } +} + +export interface LocationListValue { + location: string, + locationDisplayName: string +} + +export interface GeographicAreaListValue { + geographicArea: string, + geographicAreaDisplayName: string +} \ No newline at end of file