Skip to content

Commit

Permalink
Merge pull request #75 from smarty/duncan/update-apis
Browse files Browse the repository at this point in the history
Standardized International Autocomplete, US Autocomplete Pro and US Extract input data population with other APIs
  • Loading branch information
ducanbeu committed Nov 28, 2023
2 parents 0f279c4 + 70015f4 commit c0c58d1
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 61 deletions.
7 changes: 6 additions & 1 deletion src/InputData.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,12 @@ class InputData {
}

add(apiField, lookupField) {
if (this.lookupFieldIsPopulated(lookupField)) this.data[apiField] = this.lookup[lookupField];
if (this.lookupFieldIsPopulated(lookupField)) this.data[apiField] = this.formatData(this.lookup[lookupField]);
}

formatData(field) {
if (Array.isArray(field)) return field.join(";");
else return field;
}

lookupFieldIsPopulated(lookupField) {
Expand Down
10 changes: 3 additions & 7 deletions src/international_address_autocomplete/Client.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
const Errors = require("../Errors");
const Request = require("../Request");
const Suggestion = require("./Suggestion");
const buildInputData = require("../util/buildInputData");
const keyTranslationFormat = require("../util/apiToSDKKeyMap").internationalAddressAutocomplete;

class Client {
constructor(sender) {
Expand All @@ -11,13 +13,7 @@ class Client {
if (typeof lookup === "undefined") throw new Errors.UndefinedLookupError();

let request = new Request();
request.parameters = {
search: lookup.search,
country: lookup.country,
max_results: lookup.maxResults,
include_only_locality: lookup.includeOnlyLocality,
include_only_postal_code: lookup.includeOnlyPostalCode,
};
request.parameters = buildInputData(lookup, keyTranslationFormat);

if (lookup.addressId) {
request.baseUrlParam = lookup.addressId;
Expand Down
26 changes: 3 additions & 23 deletions src/us_autocomplete_pro/Client.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
const Errors = require("../Errors");
const Request = require("../Request");
const Suggestion = require("./Suggestion");
const buildInputData = require("../util/buildInputData");
const keyTranslationFormat = require("../util/apiToSDKKeyMap").usAutocompletePro;

/**
* This client sends lookups to the Smarty US Autocomplete Pro API, <br>
Expand All @@ -15,7 +17,7 @@ class Client {
if (typeof lookup === "undefined") throw new Errors.UndefinedLookupError();

let request = new Request();
request.parameters = buildRequestParameters(lookup);
request.parameters = buildInputData(lookup, keyTranslationFormat);

return new Promise((resolve, reject) => {
this.sender.send(request)
Expand All @@ -28,28 +30,6 @@ class Client {
.catch(reject);
});

function buildRequestParameters(lookup) {
return {
search: lookup.search,
selected: lookup.selected,
max_results: lookup.maxResults,
include_only_cities: joinFieldWith(lookup.includeOnlyCities, ";"),
include_only_states: joinFieldWith(lookup.includeOnlyStates, ";"),
include_only_zip_codes: joinFieldWith(lookup.includeOnlyZIPCodes, ";"),
exclude_states: joinFieldWith(lookup.excludeStates, ";"),
prefer_cities: joinFieldWith(lookup.preferCities, ";"),
prefer_states: joinFieldWith(lookup.preferStates, ";"),
prefer_zip_codes: joinFieldWith(lookup.preferZIPCodes, ";"),
prefer_ratio: lookup.preferRatio,
prefer_geolocation: lookup.preferGeolocation,
source: lookup.source,
};

function joinFieldWith(field, delimiter) {
if (field.length) return field.join(delimiter);
}
}

function buildSuggestionsFromResponse(payload) {
if (payload.suggestions === null) return [];

Expand Down
13 changes: 3 additions & 10 deletions src/us_extract/Client.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
const Errors = require("../Errors");
const Request = require("../Request");
const Result = require("./Result");
const buildInputData = require("../util/buildInputData");
const keyTranslationFormat = require("../util/apiToSDKKeyMap").usExtract;

/**
* This client sends lookups to the Smarty US Extract API, <br>
Expand All @@ -15,7 +17,7 @@ class Client {
if (typeof lookup === "undefined") throw new Errors.UndefinedLookupError();

let request = new Request(lookup.text);
request.parameters = buildRequestParams(lookup);
request.parameters = buildInputData(lookup, keyTranslationFormat);

return new Promise((resolve, reject) => {
this.sender.send(request)
Expand All @@ -27,15 +29,6 @@ class Client {
})
.catch(reject);
});

function buildRequestParams(lookup) {
return {
html: lookup.html,
aggressive: lookup.aggressive,
addr_line_breaks: lookup.addressesHaveLineBreaks,
addr_per_line: lookup.addressesPerLine,
};
}
}
}

Expand Down
29 changes: 29 additions & 0 deletions src/util/apiToSDKKeyMap.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,21 @@ module.exports = {
"format": "format",
"candidates": "maxCandidates",
},
usAutocompletePro: {
search: "search",
selected: "selected",
max_results: "maxResults",
include_only_cities: "includeOnlyCities",
include_only_states: "includeOnlyStates",
include_only_zip_codes: "includeOnlyZIPCodes",
exclude_states: "excludeStates",
prefer_cities: "preferCities",
prefer_states: "preferStates",
prefer_zip_codes: "preferZIPCodes",
prefer_ratio: "preferRatio",
prefer_geolocation: "preferGeolocation",
source: "source",
},
usZipcode: {
"city": "city",
"state": "state",
Expand All @@ -32,9 +47,23 @@ module.exports = {
"geocode": "geocode",
"language": "language",
},
internationalAddressAutocomplete: {
search: "search",
country: "country",
max_results: "maxResults",
include_only_administrative_area: "includeOnlyAdministrativeArea",
include_only_locality: "includeOnlyLocality",
include_only_postal_code: "includeOnlyPostalCode",
},
usReverseGeo: {
"latitude": "latitude",
"longitude": "longitude",
"source": "source"
},
usExtract: {
html: "html",
aggressive: "aggressive",
addr_line_breaks: "addressesHaveLineBreaks",
addr_per_line: "addressesPerLine",
}
};
8 changes: 0 additions & 8 deletions tests/international_address_autocomplete/test_Client.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,6 @@ describe("An International Address Autocomplete Client", function () {
let search = "(";
let lookup = new Lookup({search});
let expectedParameters = {
country: undefined,
include_only_locality: undefined,
include_only_postal_code: undefined,
max_results: 5,
search: "(",
};
Expand All @@ -35,8 +32,6 @@ describe("An International Address Autocomplete Client", function () {
let expectedParameters = {
country: "Russia",
max_results: 5,
include_only_locality: undefined,
include_only_postal_code: undefined,
search: search,
};

Expand All @@ -52,10 +47,7 @@ describe("An International Address Autocomplete Client", function () {
lookup.search = search;
lookup.maxResults = 10;
let expectedParameters = {
country: undefined,
max_results: 10,
include_only_locality: undefined,
include_only_postal_code: undefined,
search: search,
};

Expand Down
19 changes: 7 additions & 12 deletions tests/us_autocomplete_pro/test_Client.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,14 @@ describe("A US Autocomplete Pro Client", function () {
let search = '(>")>#';
let lookup = new Lookup(search);
let expectedParameters = {
exclude_states: "",
include_only_cities: "",
include_only_states: "",
include_only_zip_codes: "",
prefer_cities: "",
prefer_states: "",
prefer_zip_codes: "",
search: search,
selected: undefined,
max_results: undefined,
include_only_cities: undefined,
include_only_states: undefined,
include_only_zip_codes: undefined,
exclude_states: undefined,
prefer_cities: undefined,
prefer_states: undefined,
prefer_zip_codes: undefined,
prefer_ratio: undefined,
prefer_geolocation: undefined,
source: undefined,
};

client.send(lookup);
Expand Down

0 comments on commit c0c58d1

Please sign in to comment.