Skip to content

Commit

Permalink
- Added custom parameter funcitonality for all APIs
Browse files Browse the repository at this point in the history
 - Added county_soruce parameter for the US Street Address API
 - updated tests to reflect the above functionalities
  • Loading branch information
smartyeric committed Jan 23, 2025
1 parent cc493c5 commit 2b27bf4
Showing 41 changed files with 191 additions and 28 deletions.
Original file line number Diff line number Diff line change
@@ -51,6 +51,9 @@ public class InternationalAutocompleteClient: NSObject {
request.setValue(value: lookup.maxResults.flatMap { String($0) } ?? "10", HTTPParameterField: "max_results")
request.setValue(value: lookup.locality ?? "", HTTPParameterField: "include_only_locality")
request.setValue(value: lookup.postalCode ?? "", HTTPParameterField: "include_only_postal_code")
for key in lookup.getCustomParamArray().keys {
request.setValue(value: lookup.getCustomParamArray()[key] ?? "", HTTPParameterField: key)
}

return request
}
Original file line number Diff line number Diff line change
@@ -8,6 +8,7 @@ import Foundation

static let SSMaxResults = 10

private var customParamArray: [String: String] = [:]
public var result:InternationalAutocompleteResult?
public var country:String?
public var search:String?
@@ -42,6 +43,14 @@ import Foundation
}
}

public func getCustomParamArray() -> [String: String] {
return self.customParamArray
}

public func addCustomParameter(parameter: String, value: String) {
self.customParamArray.updateValue(value, forKey: parameter)
}

public func setMaxResults(maxResults: Int, error: inout NSError?) {
if maxResults > 0 && maxResults <= 10 {
self.maxResults = maxResults
Original file line number Diff line number Diff line change
@@ -50,6 +50,10 @@ public class InternationalStreetClient: NSObject {
request.setValue(value: lookup.administrativeArea ?? "", HTTPParameterField: "administrative_area")
request.setValue(value: lookup.postalCode ?? "", HTTPParameterField: "postal_code")

for key in lookup.getCustomParamArray().keys {
request.setValue(value: lookup.getCustomParamArray()[key] ?? "", HTTPParameterField: key)
}

return request
}

Original file line number Diff line number Diff line change
@@ -13,6 +13,7 @@ import Foundation
// When set to language_mode.Native, the results will always be in the language of the output country.
// When set to language_mode.Latin, the results will always be provided using a Latin character set.

private var customParamArray: [String: String] = [:]
public var result:[InternationalStreetCandidate]?
public var inputId:String?
public var country:String?
@@ -99,4 +100,12 @@ import Foundation
self.geocode = "false"
}
}

public func getCustomParamArray() -> [String: String] {
return self.customParamArray
}

public func addCustomParameter(parameter: String, value: String) {
self.customParamArray.updateValue(value, forKey: parameter)
}
}
Original file line number Diff line number Diff line change
@@ -59,6 +59,10 @@ public class USAutocompleteProClient: NSObject {
request.setValue(value: lookup.preferGeolocation!.name, HTTPParameterField: "prefer_geolocation")
}

for key in lookup.getCustomParamArray().keys {
request.setValue(value: lookup.getCustomParamArray()[key] ?? "", HTTPParameterField: key)
}

return request
}

Original file line number Diff line number Diff line change
@@ -19,6 +19,7 @@ import Foundation
let SSMaxResults = 10
let SSPreferRatio = 3

private var customParamArray: [String: String] = [:]
public var result:USAutocompleteProResult?
public var search:String?
public var selected:String?
@@ -90,6 +91,10 @@ import Foundation
}
}

public func getCustomParamArray() -> [String: String] {
return self.customParamArray
}

public func setMaxResults(maxResults: Int, error: inout NSError?) {
if maxResults > 0 && maxResults <= 10 {
self.maxResults = maxResults
@@ -122,4 +127,8 @@ import Foundation
public func addPreferZIPCode(zipcode:String) {
self.preferZIPCodes?.append(zipcode)
}

public func addCustomParameter(parameter: String, value: String) {
self.customParamArray.updateValue(value, forKey: parameter)
}
}
Original file line number Diff line number Diff line change
@@ -12,6 +12,7 @@ public class EnrichmentLookup: Encodable {
private var zipcode: String
private var freeform: String
private var etag: String
private var custom_param_array: [String: String] = [:]

public init(smartyKey: String, datasetName: String, dataSubsetName: String) {
self.smarty_key = smartyKey
@@ -85,6 +86,10 @@ public class EnrichmentLookup: Encodable {
return self.etag
}

public func getCustomParamArray() -> [String: String] {
return self.custom_param_array
}

public func setSmartyKey(smarty_key: String) {
self.smarty_key = smarty_key
}
@@ -120,6 +125,10 @@ public class EnrichmentLookup: Encodable {
public func setEtag(etag: String) {
self.etag = etag
}

public func addCustomParameter(parameter: String, value: String) {
self.custom_param_array.updateValue(value, forKey: parameter)
}

public func deserializeAndSetResults(serializer: SmartySerializer, payload: Data, error: UnsafeMutablePointer<NSError?>) {
fatalError("You must use a Lookup subclass with an implemented version of deserializeAndSetResults")
Original file line number Diff line number Diff line change
@@ -24,6 +24,9 @@ public class GeoReferenceEnrichmentLookup: EnrichmentLookup {
self.setZipcode(zipcode: lookup.getZipcode())
self.setFreeform(freeform: lookup.getFreeform())
self.setEtag(etag: lookup.getEtag())
for key in lookup.getCustomParamArray().keys {
self.addCustomParameter(parameter: key, value: lookup.getCustomParamArray()[key] ?? "")
}
}

override public func deserializeAndSetResults(serializer: SmartySerializer, payload: Data, error: UnsafeMutablePointer<NSError?>) {
Original file line number Diff line number Diff line change
@@ -24,6 +24,9 @@ public class PropertyFinancialEnrichmentLookup: EnrichmentLookup {
self.setZipcode(zipcode: lookup.getZipcode())
self.setFreeform(freeform: lookup.getFreeform())
self.setEtag(etag: lookup.getEtag())
for key in lookup.getCustomParamArray().keys {
self.addCustomParameter(parameter: key, value: lookup.getCustomParamArray()[key] ?? "")
}
}

override public func deserializeAndSetResults(serializer: SmartySerializer, payload: Data, error: UnsafeMutablePointer<NSError?>) {
Original file line number Diff line number Diff line change
@@ -24,6 +24,9 @@ public class PropertyPrincipalEnrichmentLookup: EnrichmentLookup {
self.setZipcode(zipcode: lookup.getZipcode())
self.setFreeform(freeform: lookup.getFreeform())
self.setEtag(etag: lookup.getEtag())
for key in lookup.getCustomParamArray().keys {
self.addCustomParameter(parameter: key, value: lookup.getCustomParamArray()[key] ?? "")
}
}

override public func deserializeAndSetResults(serializer: SmartySerializer, payload: Data, error: UnsafeMutablePointer<NSError?>) {
Original file line number Diff line number Diff line change
@@ -24,6 +24,9 @@ public class SecondaryCountEnrichmentLookup: EnrichmentLookup {
self.setZipcode(zipcode: lookup.getZipcode())
self.setFreeform(freeform: lookup.getFreeform())
self.setEtag(etag: lookup.getEtag())
for key in lookup.getCustomParamArray().keys {
self.addCustomParameter(parameter: key, value: lookup.getCustomParamArray()[key] ?? "")
}
}

override public func deserializeAndSetResults(serializer: SmartySerializer, payload: Data, error: UnsafeMutablePointer<NSError?>) {
Original file line number Diff line number Diff line change
@@ -24,6 +24,9 @@ public class SecondaryEnrichmentLookup: EnrichmentLookup {
self.setZipcode(zipcode: lookup.getZipcode())
self.setFreeform(freeform: lookup.getFreeform())
self.setEtag(etag: lookup.getEtag())
for key in lookup.getCustomParamArray().keys {
self.addCustomParameter(parameter: key, value: lookup.getCustomParamArray()[key] ?? "")
}
}

override public func deserializeAndSetResults(serializer: SmartySerializer, payload: Data, error: UnsafeMutablePointer<NSError?>) {
3 changes: 3 additions & 0 deletions Sources/SmartyStreets/USEnrichment/USEnrichmentClient.swift
Original file line number Diff line number Diff line change
@@ -197,6 +197,9 @@ public class USEnrichmentClient: NSObject {
if (lookup.getFreeform() != "") {
request.setValue(value: lookup.getFreeform(), HTTPParameterField: "freeform")
}
for key in lookup.getCustomParamArray().keys {
request.setValue(value: lookup.getCustomParamArray()[key] ?? "", HTTPParameterField: key)
}
return request
}

3 changes: 3 additions & 0 deletions Sources/SmartyStreets/USExtract/USExtractClient.swift
Original file line number Diff line number Diff line change
@@ -51,6 +51,9 @@ import Foundation
if lookup.match != USExtractLookup.MatchStrategy.strict {
request.setValue(value: lookup.match?.rawValue ?? "", HTTPParameterField: "match")
}
for key in lookup.getCustomParamArray().keys {
request.setValue(value: lookup.getCustomParamArray()[key] ?? "", HTTPParameterField: key)
}
return request
}
}
9 changes: 9 additions & 0 deletions Sources/SmartyStreets/USExtract/USExtractLookup.swift
Original file line number Diff line number Diff line change
@@ -12,6 +12,7 @@ import Foundation
case enhanced
}

private var customParamArray: [String: String] = [:]
public var result:USExtractResult?
public var html:Bool?
public var aggressive:Bool?
@@ -55,4 +56,12 @@ import Foundation
return false
}
}

public func getCustomParamArray() -> [String: String] {
return self.customParamArray
}

public func addCustomParameter(parameter: String, value: String) {
self.customParamArray.updateValue(value, forKey: parameter)
}
}
3 changes: 3 additions & 0 deletions Sources/SmartyStreets/USReverseGeo/USReverseGeoClient.swift
Original file line number Diff line number Diff line change
@@ -38,6 +38,9 @@ public class USReverseGeoClient: NSObject {
request.setValue(value: lookup.latitude, HTTPParameterField: "latitude")
request.setValue(value: lookup.longitude, HTTPParameterField: "longitude")
request.setValue(value: lookup.source, HTTPParameterField: "source")
for key in lookup.getCustomParamArray().keys {
request.setValue(value: lookup.getCustomParamArray()[key] ?? "", HTTPParameterField: key)
}

return request
}
9 changes: 9 additions & 0 deletions Sources/SmartyStreets/USReverseGeo/USReverseGeoLookup.swift
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@ import Foundation
//
// See "https://smartystreets.com/docs/cloud/us-reverse-geo-api"

private var customParamArray: [String: String] = [:]
public var latitude:String
public var longitude:String
public var source:String
@@ -16,4 +17,12 @@ import Foundation
self.longitude = String(format: "%.8f", longitude)
self.source = source
}

public func getCustomParamArray() -> [String: String] {
return self.customParamArray
}

public func addCustomParameter(parameter: String, value: String) {
self.customParamArray.updateValue(value, forKey: parameter)
}
}
4 changes: 4 additions & 0 deletions Sources/SmartyStreets/USStreet/USStreetClient.swift
Original file line number Diff line number Diff line change
@@ -80,8 +80,12 @@ public class USStreetClient: NSObject {
populate(value: lookup.lastline, field: "lastline", request: request)
populate(value: lookup.addressee, field: "addressee", request: request)
populate(value: lookup.urbanization, field: "urbanization", request: request)
populate(value: lookup.countySource, field: "county_source", request: request)
populate(value: lookup.matchStrategy, field: "match", request: request)
populate(value: lookup.outputFormat, field: "format", request: request)
for key in lookup.getCustomParamArray().keys {
populate(value: lookup.getCustomParamArray()[key], field: key, request: request)
}

}

11 changes: 11 additions & 0 deletions Sources/SmartyStreets/USStreet/USStreetLookup.swift
Original file line number Diff line number Diff line change
@@ -8,6 +8,7 @@ import Foundation
//
// match: Must be set to 'strict', 'enhanced', or 'invalid'.

private var customParamArray: [String: String] = [:]
public var result:[USStreetCandidate]!
public var inputId:String?
public var street:String?
@@ -20,6 +21,7 @@ import Foundation
public var addressee:String?
public var urbanization:String?
public var maxCandidates:Int?
public var countySource:String?
public var objcMaxCandidates:NSNumber? {
get {
return maxCandidates as NSNumber?
@@ -47,6 +49,14 @@ import Foundation
return self.result[index]
}

public func getCustomParamArray() -> [String: String] {
return self.customParamArray
}

public func addCustomParameter(parameter: String, value: String) {
self.customParamArray.updateValue(value, forKey: parameter)
}

public func setMaxCandidates(max:Int, error: inout NSError?) {
if max > 0 {
self.maxCandidates = max
@@ -70,6 +80,7 @@ import Foundation
dictionary = addValueToDictionary(value: self.addressee, key: "addressee", dictionary: dictionary)
dictionary = addValueToDictionary(value: self.urbanization, key: "urbanization", dictionary: dictionary)
dictionary = addValueToDictionary(value: self.maxCandidates, key: "candidates", dictionary: dictionary)
dictionary = addValueToDictionary(value: self.countySource, key: "county_source", dictionary: dictionary)
dictionary = addValueToDictionary(value: self.matchStrategy, key: "match", dictionary: dictionary)
dictionary = addValueToDictionary(value: self.outputFormat, key: "format", dictionary: dictionary)
return dictionary
3 changes: 3 additions & 0 deletions Sources/SmartyStreets/USZipCode/USZipCodeClient.swift
Original file line number Diff line number Diff line change
@@ -68,6 +68,9 @@ import Foundation
populate(value: lookup.city, field: "city", request: request)
populate(value: lookup.state, field: "state", request: request)
populate(value: lookup.zipcode, field: "zipcode", request: request)
for key in lookup.getCustomParamArray().keys {
populate(value: lookup.getCustomParamArray()[key], field: key, request: request)
}
}

func populate(value:String!, field:String, request:SmartyRequest) {
9 changes: 9 additions & 0 deletions Sources/SmartyStreets/USZipCode/USZipCodeLookup.swift
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@ import Foundation
//
// See "https://smartystreets.com/docs/cloud/us-zipcode-api#http-request-input-fields"

private var customParamArray: [String: String] = [:]
public var result:USZipCodeResult!
public var inputId:String?
public var city:String?
@@ -37,6 +38,14 @@ import Foundation
}
}

public func getCustomParamArray() -> [String: String] {
return self.customParamArray
}

public func addCustomParameter(parameter: String, value: String) {
self.customParamArray.updateValue(value, forKey: parameter)
}

public func toDictionary() -> NSDictionary {
var dictionary = NSDictionary()

Original file line number Diff line number Diff line change
@@ -29,6 +29,7 @@ class InternationalAutocompleteClientTests: XCTestCase {
lookup.maxResults = 4
lookup.postalCode = "5"
lookup.addressID = "6"
lookup.addCustomParameter(parameter: "custom", value: "7")

_ = client.sendLookup(lookup:&lookup, error:&error)

@@ -38,6 +39,7 @@ class InternationalAutocompleteClientTests: XCTestCase {
XCTAssertEqual("4", capturingSender.request.parameters["max_results"])
XCTAssertEqual("5", capturingSender.request.parameters["include_only_postal_code"])
XCTAssertEqual("http://localhost/6", capturingSender.request.urlPrefix)
XCTAssertEqual("7", capturingSender.request.parameters["custom"])
XCTAssertNil(self.error)
}

Original file line number Diff line number Diff line change
@@ -51,11 +51,23 @@ class InternationalStreetClientTests: XCTestCase {
lookup.locality = "7"
lookup.administrativeArea = "8"
lookup.postalCode = "9"
lookup.addCustomParameter(parameter: "custom", value: "10")

_ = client.sendLookup(lookup: &lookup, error: &self.error)

XCTAssertNil(self.error)
XCTAssertNotNil(capturingSender.request.getUrl())
XCTAssertEqual("0" , capturingSender.request.parameters["country"])
XCTAssertEqual("1" , capturingSender.request.parameters["freeform"])
XCTAssertEqual("2" , capturingSender.request.parameters["address1"])
XCTAssertEqual("3" , capturingSender.request.parameters["address2"])
XCTAssertEqual("4" , capturingSender.request.parameters["address3"])
XCTAssertEqual("5" , capturingSender.request.parameters["address4"])
XCTAssertEqual("6" , capturingSender.request.parameters["organization"])
XCTAssertEqual("7" , capturingSender.request.parameters["locality"])
XCTAssertEqual("8" , capturingSender.request.parameters["administrative_area"])
XCTAssertEqual("9" , capturingSender.request.parameters["postal_code"])
XCTAssertEqual("10" , capturingSender.request.parameters["custom"])
}

func testEmptyLookupRejected() {
2 changes: 1 addition & 1 deletion Tests/SmartyStreetsTests/SerializerTests.swift
Original file line number Diff line number Diff line change
@@ -76,7 +76,7 @@ class SerializerTests: XCTestCase {

func testSerialize() {
let expectedOutput = """
[{"city":"01","inputId":"04","state":"02","zipcode":"03"},{"city":"05","inputId":"08","state":"06","zipcode":"07"}]
[{"city":"01","customParamArray":{},"inputId":"04","state":"02","zipcode":"03"},{"city":"05","customParamArray":{},"inputId":"08","state":"06","zipcode":"07"}]
"""
let lookup1 = USZipCodeLookup(city: "01", state: "02", zipcode: "03", inputId: "04")
let lookup2 = USZipCodeLookup(city: "05", state: "06", zipcode: "07", inputId: "08")
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@ class USEnrichmentFinancialResultTest: XCTestCase {
override func setUp() {
super.setUp()
expectedJsonInput = """
{"city":"2","data_set_name":"property","data_subset_name":"financial","etag":"6","exclude_array":["9","10"],"freeform":"5","include_array":["7","8"],"smarty_key":"xxx","state":"3","street":"1","zipcode":"4"}
{"city":"2","custom_param_array":{},"data_set_name":"property","data_subset_name":"financial","etag":"6","exclude_array":["9","10"],"freeform":"5","include_array":["7","8"],"smarty_key":"xxx","state":"3","street":"1","zipcode":"4"}
"""

sobj = """
Loading

0 comments on commit 2b27bf4

Please sign in to comment.