smartystreets_ruby_sdk 0.0.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.gitignore +0 -1
- data/{LICENSE.md → LICENSE.txt} +1 -1
- data/Makefile +17 -31
- data/README.md +6 -9
- data/Rakefile +2 -5
- data/examples/us_street_multiple_address_example.rb +15 -40
- data/examples/us_street_single_address_example.rb +8 -32
- data/examples/us_zipcode_multiple_lookup_example.rb +9 -21
- data/examples/us_zipcode_single_lookup_example.rb +6 -18
- data/lib/smartystreets_ruby_sdk/batch.rb +38 -45
- data/lib/smartystreets_ruby_sdk/core_client_builder.rb +56 -0
- data/lib/smartystreets_ruby_sdk/custom_header_sender.rb +8 -10
- data/lib/smartystreets_ruby_sdk/errors.rb +11 -21
- data/lib/smartystreets_ruby_sdk/exceptions.rb +16 -27
- data/lib/smartystreets_ruby_sdk/json_able.rb +11 -13
- data/lib/smartystreets_ruby_sdk/match_type.rb +5 -0
- data/lib/smartystreets_ruby_sdk/native_sender.rb +43 -65
- data/lib/smartystreets_ruby_sdk/native_serializer.rb +7 -9
- data/lib/smartystreets_ruby_sdk/request.rb +8 -11
- data/lib/smartystreets_ruby_sdk/response.rb +7 -9
- data/lib/smartystreets_ruby_sdk/retry_sender.rb +26 -32
- data/lib/smartystreets_ruby_sdk/shared_credentials.rb +9 -11
- data/lib/smartystreets_ruby_sdk/signing_sender.rb +9 -11
- data/lib/smartystreets_ruby_sdk/sleeper.rb +3 -5
- data/lib/smartystreets_ruby_sdk/static_credentials.rb +9 -11
- data/lib/smartystreets_ruby_sdk/status_code_sender.rb +29 -33
- data/lib/smartystreets_ruby_sdk/url_prefix_sender.rb +9 -11
- data/lib/smartystreets_ruby_sdk/us_street/analysis.rb +16 -21
- data/lib/smartystreets_ruby_sdk/us_street/candidate.rb +19 -23
- data/lib/smartystreets_ruby_sdk/us_street/client.rb +47 -60
- data/lib/smartystreets_ruby_sdk/us_street/client_builder.rb +15 -0
- data/lib/smartystreets_ruby_sdk/us_street/components.rb +27 -32
- data/lib/smartystreets_ruby_sdk/us_street/lookup.rb +20 -27
- data/lib/smartystreets_ruby_sdk/us_street/metadata.rb +23 -27
- data/lib/smartystreets_ruby_sdk/us_street.rb +3 -5
- data/lib/smartystreets_ruby_sdk/us_zipcode/city.rb +8 -14
- data/lib/smartystreets_ruby_sdk/us_zipcode/client.rb +36 -51
- data/lib/smartystreets_ruby_sdk/us_zipcode/client_builder.rb +15 -0
- data/lib/smartystreets_ruby_sdk/us_zipcode/lookup.rb +9 -16
- data/lib/smartystreets_ruby_sdk/us_zipcode/result.rb +30 -34
- data/lib/smartystreets_ruby_sdk/us_zipcode/zip_code.rb +14 -32
- data/lib/smartystreets_ruby_sdk/us_zipcode.rb +3 -5
- data/lib/smartystreets_ruby_sdk/version.rb +2 -2
- data/lib/smartystreets_ruby_sdk.rb +1 -30
- data/smartystreets_ruby_sdk.gemspec +12 -3
- metadata +15 -61
- data/.github/workflows/gem-publish.yml +0 -58
- data/CHANGELOG.md +0 -5
- data/Dockerfile +0 -10
- data/docker-compose.yml +0 -12
- data/examples/international_autocomplete_example.rb +0 -47
- data/examples/international_example.rb +0 -53
- data/examples/us_autocomplete_pro_example.rb +0 -56
- data/examples/us_extract_example.rb +0 -63
- data/examples/us_reverse_geo_example.rb +0 -47
- data/lib/smartystreets_ruby_sdk/client_builder.rb +0 -188
- data/lib/smartystreets_ruby_sdk/international_autocomplete/client.rb +0 -61
- data/lib/smartystreets_ruby_sdk/international_autocomplete/lookup.rb +0 -21
- data/lib/smartystreets_ruby_sdk/international_autocomplete/suggestion.rb +0 -16
- data/lib/smartystreets_ruby_sdk/international_street/analysis.rb +0 -17
- data/lib/smartystreets_ruby_sdk/international_street/candidate.rb +0 -23
- data/lib/smartystreets_ruby_sdk/international_street/changes.rb +0 -15
- data/lib/smartystreets_ruby_sdk/international_street/client.rb +0 -63
- data/lib/smartystreets_ruby_sdk/international_street/components.rb +0 -58
- data/lib/smartystreets_ruby_sdk/international_street/language_mode.rb +0 -9
- data/lib/smartystreets_ruby_sdk/international_street/lookup.rb +0 -82
- data/lib/smartystreets_ruby_sdk/international_street/metadata.rb +0 -17
- data/lib/smartystreets_ruby_sdk/international_street/rootlevel.rb +0 -25
- data/lib/smartystreets_ruby_sdk/international_street.rb +0 -12
- data/lib/smartystreets_ruby_sdk/license_sender.rb +0 -15
- data/lib/smartystreets_ruby_sdk/logger.rb +0 -7
- data/lib/smartystreets_ruby_sdk/proxy.rb +0 -16
- data/lib/smartystreets_ruby_sdk/us_autocomplete/client.rb +0 -72
- data/lib/smartystreets_ruby_sdk/us_autocomplete/geolocation_type.rb +0 -9
- data/lib/smartystreets_ruby_sdk/us_autocomplete/lookup.rb +0 -38
- data/lib/smartystreets_ruby_sdk/us_autocomplete/suggestion.rb +0 -16
- data/lib/smartystreets_ruby_sdk/us_autocomplete.rb +0 -9
- data/lib/smartystreets_ruby_sdk/us_autocomplete_pro/client.rb +0 -78
- data/lib/smartystreets_ruby_sdk/us_autocomplete_pro/geolocation_type.rb +0 -8
- data/lib/smartystreets_ruby_sdk/us_autocomplete_pro/lookup.rb +0 -63
- data/lib/smartystreets_ruby_sdk/us_autocomplete_pro/suggestion.rb +0 -18
- data/lib/smartystreets_ruby_sdk/us_autocomplete_pro.rb +0 -10
- data/lib/smartystreets_ruby_sdk/us_extract/address.rb +0 -24
- data/lib/smartystreets_ruby_sdk/us_extract/client.rb +0 -49
- data/lib/smartystreets_ruby_sdk/us_extract/lookup.rb +0 -22
- data/lib/smartystreets_ruby_sdk/us_extract/metadata.rb +0 -17
- data/lib/smartystreets_ruby_sdk/us_extract/result.rb +0 -21
- data/lib/smartystreets_ruby_sdk/us_extract.rb +0 -10
- data/lib/smartystreets_ruby_sdk/us_reverse_geo/address.rb +0 -16
- data/lib/smartystreets_ruby_sdk/us_reverse_geo/client.rb +0 -38
- data/lib/smartystreets_ruby_sdk/us_reverse_geo/coordinate.rb +0 -25
- data/lib/smartystreets_ruby_sdk/us_reverse_geo/lookup.rb +0 -21
- data/lib/smartystreets_ruby_sdk/us_reverse_geo/result.rb +0 -20
- data/lib/smartystreets_ruby_sdk/us_reverse_geo/us_reverse_geo_response.rb +0 -17
- data/lib/smartystreets_ruby_sdk/us_reverse_geo.rb +0 -12
- data/lib/smartystreets_ruby_sdk/us_street/match_type.rb +0 -10
- data/lib/smartystreets_ruby_sdk/us_zipcode/alternate_county.rb +0 -15
- data/ruby-sdk-demo.json +0 -354
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 06e2310024c72482dc0038e5cdd34585b1785c3f
|
|
4
|
+
data.tar.gz: 40495a70b76067b52485cbb8212fb61056bac537
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 14ed487aeeba73664aa271b85672e28058dec66d3fac29972e2030e16c4b1237db046733c7d87f2f60f8887d8b665fabd0f5c6c66accbd5be577ad03d92af461
|
|
7
|
+
data.tar.gz: bfe3fadf0b7a177b529453754efde3a641f6b4c50cb58612aeac4b4d75a8421367d00bb953c62ab721da286dc0200896d3967289dbcb6f28ef2b93ad118f909d
|
data/.gitignore
CHANGED
data/{LICENSE.md → LICENSE.txt}
RENAMED
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
same "printed page" as the copyright notice for easier
|
|
188
188
|
identification within third-party archives.
|
|
189
189
|
|
|
190
|
-
Copyright
|
|
190
|
+
Copyright SmartyStreets
|
|
191
191
|
|
|
192
192
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
193
193
|
you may not use this file except in compliance with the License.
|
data/Makefile
CHANGED
|
@@ -1,33 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/make -f
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
publish: package
|
|
22
|
-
chmod 0600 /root/.gem/credentials
|
|
23
|
-
gem push *.gem
|
|
24
|
-
|
|
25
|
-
#####################################################################
|
|
26
|
-
|
|
27
|
-
workspace:
|
|
28
|
-
docker-compose run sdk /bin/sh
|
|
29
|
-
|
|
30
|
-
release:
|
|
31
|
-
docker-compose run sdk make publish && tagit -p && git push origin --tags
|
|
32
|
-
|
|
33
|
-
.PHONY: clean test dependencies package publish workspace release
|
|
3
|
+
SOURCE_VERSION := 1.0
|
|
4
|
+
|
|
5
|
+
publish: version
|
|
6
|
+
git push origin --tags
|
|
7
|
+
gem build smartystreets_ruby_sdk.gemspec
|
|
8
|
+
gem push smartystreets_ruby_sdk-$(shell git describe).gem
|
|
9
|
+
git checkout lib/smartystreets_ruby_sdk/version.rb
|
|
10
|
+
|
|
11
|
+
version: tag
|
|
12
|
+
@sed -i -r "s/0\.0\.0/$(shell git describe)/g" lib/smartystreets_ruby_sdk/version.rb
|
|
13
|
+
|
|
14
|
+
tag:
|
|
15
|
+
$(eval PREFIX := $(SOURCE_VERSION).)
|
|
16
|
+
$(eval CURRENT := $(shell git describe 2>/dev/null))
|
|
17
|
+
$(eval EXPECTED := $(PREFIX)$(shell git tag -l "$(PREFIX)*" | wc -l | xargs expr -1 +))
|
|
18
|
+
$(eval INCREMENTED := $(PREFIX)$(shell git tag -l "$(PREFIX)*" | wc -l | xargs expr 0 +))
|
|
19
|
+
@if [ "$(CURRENT)" != "$(EXPECTED)" ]; then git tag -a "$(INCREMENTED)" -m "" 2>/dev/null || true; fi
|
data/README.md
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# SMARTY DISCLAIMER: Subject to the terms of the associated license agreement, this software is freely available for your use. This software is FREE, AS IN PUPPIES, and is a gift. Enjoy your new responsibility. This means that while we may consider enhancement requests, we may or may not choose to entertain requests at our sole and absolute discretion.
|
|
2
|
-
|
|
3
1
|
# SmartyStreets Ruby SDK
|
|
4
2
|
|
|
5
3
|
The official client libraries for accessing SmartyStreets APIs from Ruby
|
|
@@ -8,12 +6,6 @@ You may have noticed this page is curiously sparse. Don't panic, there's [docume
|
|
|
8
6
|
|
|
9
7
|
[Apache 2.0 License](LICENSE.txt)
|
|
10
8
|
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
[](https://asciinema.org/a/124457)
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
9
|
## Installation
|
|
18
10
|
|
|
19
11
|
Add this line to your application's Gemfile:
|
|
@@ -28,4 +20,9 @@ And then execute:
|
|
|
28
20
|
|
|
29
21
|
Or install it yourself as:
|
|
30
22
|
|
|
31
|
-
$ gem install smartystreets_ruby_sdk
|
|
23
|
+
$ gem install smartystreets_ruby_sdk
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
data/Rakefile
CHANGED
|
@@ -1,77 +1,52 @@
|
|
|
1
1
|
require 'smartystreets_ruby_sdk/static_credentials'
|
|
2
|
-
require 'smartystreets_ruby_sdk/client_builder'
|
|
3
|
-
require 'smartystreets_ruby_sdk/batch'
|
|
2
|
+
require 'smartystreets_ruby_sdk/us_street/client_builder'
|
|
4
3
|
require 'smartystreets_ruby_sdk/us_street/lookup'
|
|
5
4
|
|
|
6
5
|
class USStreetMultipleAddressExample
|
|
7
|
-
Lookup = SmartyStreets::USStreet::Lookup
|
|
8
|
-
|
|
9
6
|
def run
|
|
10
|
-
|
|
11
|
-
# auth_token = 'Your SmartyStreets Auth Token here'
|
|
12
|
-
|
|
13
|
-
# We recommend storing your secret keys in environment variables instead---it's safer!
|
|
14
|
-
auth_id = ENV['SMARTY_AUTH_ID']
|
|
7
|
+
auth_id = ENV['SMARTY_AUTH_ID'] # We recommend storing your keys in environment variables
|
|
15
8
|
auth_token = ENV['SMARTY_AUTH_TOKEN']
|
|
9
|
+
credentials = StaticCredentials.new(auth_id, auth_token)
|
|
16
10
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
# The appropriate license values to be used for your subscriptions
|
|
20
|
-
# can be found on the Subscriptions page of the account dashboard.
|
|
21
|
-
# https://www.smartystreets.com/docs/cloud/licensing
|
|
22
|
-
client = SmartyStreets::ClientBuilder.new(credentials).with_licenses(['us-core-cloud'])
|
|
23
|
-
.build_us_street_api_client
|
|
24
|
-
batch = SmartyStreets::Batch.new
|
|
25
|
-
|
|
26
|
-
# Documentation for input fields can be found at:
|
|
27
|
-
# https://smartystreets.com/docs/cloud/us-street-api
|
|
11
|
+
client = USStreet::ClientBuilder.new(credentials).build
|
|
12
|
+
batch = Batch.new
|
|
28
13
|
|
|
29
|
-
batch.add(Lookup.new)
|
|
30
|
-
batch[0].input_id = '8675309' # Optional ID from your system
|
|
31
|
-
batch[0].addressee = 'John Doe'
|
|
14
|
+
batch.add(USStreet::Lookup.new)
|
|
32
15
|
batch[0].street = '1600 amphitheatre parkway'
|
|
33
|
-
batch[0].
|
|
34
|
-
batch[0].
|
|
35
|
-
batch[0].urbanization = '' # Only applies to Puerto Rico addresses
|
|
36
|
-
batch[0].lastline = 'Mountain view, California'
|
|
37
|
-
batch[0].zipcode = '21229'
|
|
38
|
-
batch[0].candidates = 3
|
|
39
|
-
batch[0].match = Lookup.INVALID # "invalid" is the most permissive match,
|
|
40
|
-
# this will always return at least one result even if the address is invalid.
|
|
41
|
-
# Refer to the documentation for additional Match Strategy options.
|
|
16
|
+
batch[0].city = 'Mountain view'
|
|
17
|
+
batch[0].state = 'california'
|
|
42
18
|
|
|
43
|
-
batch.add(Lookup.new('1 Rosedale, Baltimore, Maryland')) # Freeform addresses work too.
|
|
19
|
+
batch.add(USStreet::Lookup.new('1 Rosedale, Baltimore, Maryland')) # Freeform addresses work too.
|
|
44
20
|
batch[1].candidates = 10 # Allows up to ten possible matches to be returned (default is 1).
|
|
45
21
|
|
|
46
|
-
batch.add(Lookup.new('123 Bogus Street, Pretend Lake, Oklahoma'))
|
|
22
|
+
batch.add(USStreet::Lookup.new('123 Bogus Street, Pretend Lake, Oklahoma'))
|
|
47
23
|
|
|
48
|
-
batch.add(Lookup.new)
|
|
24
|
+
batch.add(USStreet::Lookup.new)
|
|
49
25
|
batch[3].street = '1 Infinite Loop'
|
|
50
26
|
batch[3].zipcode = '95014' # You can just input the street and ZIP if you want.
|
|
51
27
|
|
|
52
28
|
begin
|
|
53
29
|
client.send_batch(batch)
|
|
54
|
-
rescue
|
|
55
|
-
|
|
30
|
+
rescue SmartyException => err
|
|
31
|
+
print(err)
|
|
56
32
|
return
|
|
57
33
|
end
|
|
58
34
|
|
|
59
35
|
batch.each_with_index do |lookup, i|
|
|
60
36
|
candidates = lookup.result
|
|
61
37
|
|
|
62
|
-
if candidates.
|
|
38
|
+
if candidates.length == 0
|
|
63
39
|
puts "Address #{i} is invalid.\n\n"
|
|
64
40
|
next
|
|
65
41
|
end
|
|
66
42
|
|
|
67
|
-
puts "Address #{i}
|
|
43
|
+
puts "Address #{i} is valid. (There is at least one candidate)"
|
|
68
44
|
|
|
69
45
|
candidates.each do |candidate|
|
|
70
46
|
components = candidate.components
|
|
71
47
|
metadata = candidate.metadata
|
|
72
48
|
|
|
73
49
|
puts "\nCandidate #{candidate.candidate_index} : "
|
|
74
|
-
puts "Input ID: #{candidate.input_id}"
|
|
75
50
|
puts "Delivery line 1: #{candidate.delivery_line_1}"
|
|
76
51
|
puts "Last line: #{candidate.last_line}"
|
|
77
52
|
puts "ZIP Code: #{components.zipcode}-#{components.plus4_code}"
|
|
@@ -1,61 +1,37 @@
|
|
|
1
1
|
require 'smartystreets_ruby_sdk/static_credentials'
|
|
2
|
-
require 'smartystreets_ruby_sdk/client_builder'
|
|
2
|
+
require 'smartystreets_ruby_sdk/us_street/client_builder'
|
|
3
3
|
require 'smartystreets_ruby_sdk/us_street/lookup'
|
|
4
4
|
|
|
5
5
|
class USStreetSingleAddressExample
|
|
6
6
|
def run
|
|
7
|
-
|
|
8
|
-
# auth_token = 'Your SmartyStreets Auth Token here'
|
|
9
|
-
|
|
10
|
-
# We recommend storing your secret keys in environment variables instead---it's safer!
|
|
11
|
-
auth_id = ENV['SMARTY_AUTH_ID']
|
|
7
|
+
auth_id = ENV['SMARTY_AUTH_ID'] # We recommend storing your keys in environment variables
|
|
12
8
|
auth_token = ENV['SMARTY_AUTH_TOKEN']
|
|
9
|
+
credentials = StaticCredentials.new(auth_id, auth_token)
|
|
13
10
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
# The appropriate license values to be used for your subscriptions
|
|
17
|
-
# can be found on the Subscriptions page of the account dashboard.
|
|
18
|
-
# https://www.smartystreets.com/docs/cloud/licensing
|
|
19
|
-
client = SmartyStreets::ClientBuilder.new(credentials).with_licenses(['us-core-cloud'])
|
|
20
|
-
# with_proxy('localhost', 8080, 'proxyUser', 'proxyPassword'). # Uncomment this line to try it with a proxy
|
|
21
|
-
build_us_street_api_client
|
|
22
|
-
|
|
23
|
-
# Documentation for input fields can be found at:
|
|
24
|
-
# https://smartystreets.com/docs/cloud/us-street-api
|
|
11
|
+
client = USStreet::ClientBuilder.new(credentials).build
|
|
25
12
|
|
|
26
|
-
lookup =
|
|
27
|
-
lookup.input_id = '24601' # Optional ID from your system
|
|
28
|
-
lookup.addressee = 'John Doe'
|
|
13
|
+
lookup = USStreet::Lookup.new
|
|
29
14
|
lookup.street = '1600 Amphitheatre Pkwy'
|
|
30
|
-
lookup.street2 = 'closet under the stairs'
|
|
31
|
-
lookup.secondary = 'APT 2'
|
|
32
|
-
lookup.urbanization = '' # Only applies to Puerto Rico addresses
|
|
33
15
|
lookup.city = 'Mountain View'
|
|
34
16
|
lookup.state = 'CA'
|
|
35
|
-
lookup.zipcode = '21229'
|
|
36
|
-
lookup.candidates = 3
|
|
37
|
-
lookup.match = Lookup.INVALID # "invalid" is the most permissive match,
|
|
38
|
-
# this will always return at least one result even if the address is invalid.
|
|
39
|
-
# Refer to the documentation for additional Match Strategy options.
|
|
40
17
|
|
|
41
18
|
begin
|
|
42
19
|
client.send_lookup(lookup)
|
|
43
|
-
rescue
|
|
20
|
+
rescue SmartyException => err
|
|
44
21
|
puts err
|
|
45
22
|
return
|
|
46
23
|
end
|
|
47
24
|
|
|
48
25
|
result = lookup.result
|
|
49
26
|
|
|
50
|
-
if result
|
|
27
|
+
if result == nil
|
|
51
28
|
puts 'No candidates. This means the address is not valid.'
|
|
52
29
|
return
|
|
53
30
|
end
|
|
54
31
|
|
|
55
32
|
first_candidate = result[0]
|
|
56
33
|
|
|
57
|
-
puts "There is at least one candidate
|
|
58
|
-
puts "Input ID: #{first_candidate.input_id}"
|
|
34
|
+
puts "Address is valid. (There is at least one candidate)\n"
|
|
59
35
|
puts "ZIP Code: #{first_candidate.components.zipcode}"
|
|
60
36
|
puts "County: #{first_candidate.metadata.county_name}"
|
|
61
37
|
puts "Latitude: #{first_candidate.metadata.latitude}"
|
|
@@ -1,41 +1,29 @@
|
|
|
1
1
|
require 'smartystreets_ruby_sdk/static_credentials'
|
|
2
|
-
require 'smartystreets_ruby_sdk/client_builder'
|
|
3
|
-
require 'smartystreets_ruby_sdk/batch'
|
|
2
|
+
require 'smartystreets_ruby_sdk/us_zipcode/client_builder'
|
|
4
3
|
require 'smartystreets_ruby_sdk/us_zipcode/lookup'
|
|
5
4
|
|
|
6
5
|
class USZipcodeMultipleLookupExample
|
|
7
|
-
Lookup = SmartyStreets::USZipcode::Lookup
|
|
8
|
-
|
|
9
6
|
def run
|
|
10
|
-
|
|
11
|
-
# auth_token = 'Your SmartyStreets Auth Token here'
|
|
12
|
-
|
|
13
|
-
# We recommend storing your secret keys in environment variables instead---it's safer!
|
|
14
|
-
auth_id = ENV['SMARTY_AUTH_ID']
|
|
7
|
+
auth_id = ENV['SMARTY_AUTH_ID'] # We recommend storing your keys in environment variables
|
|
15
8
|
auth_token = ENV['SMARTY_AUTH_TOKEN']
|
|
9
|
+
credentials = StaticCredentials.new(auth_id, auth_token)
|
|
16
10
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
client = SmartyStreets::ClientBuilder.new(credentials).build_us_zipcode_api_client
|
|
20
|
-
batch = SmartyStreets::Batch.new
|
|
21
|
-
|
|
22
|
-
# Documentation for input fields can be found at:
|
|
23
|
-
# https://smartystreets.com/docs/cloud/us-zipcode-api
|
|
11
|
+
client = USZipcode::ClientBuilder.new(credentials).build
|
|
12
|
+
batch = Batch.new
|
|
24
13
|
|
|
25
|
-
batch.add(Lookup.new)
|
|
26
|
-
batch[0].input_id = '01189998819991197253' # Optional ID from your system
|
|
14
|
+
batch.add(USZipcode::Lookup.new)
|
|
27
15
|
batch[0].zipcode = '12345' # A Lookup may have a ZIP Code, city and state, or city, state, and ZIP Code
|
|
28
16
|
|
|
29
|
-
batch.add(Lookup.new)
|
|
17
|
+
batch.add(USZipcode::Lookup.new)
|
|
30
18
|
batch[1].city = 'Phoenix'
|
|
31
19
|
batch[1].state = 'Arizona'
|
|
32
20
|
|
|
33
|
-
batch.add(Lookup.new('cupertino', 'CA', '95014')) # You can also set these with arguments
|
|
21
|
+
batch.add(USZipcode::Lookup.new('cupertino', 'CA', '95014')) # You can also set these with arguments
|
|
34
22
|
|
|
35
23
|
|
|
36
24
|
begin
|
|
37
25
|
client.send_batch(batch)
|
|
38
|
-
rescue
|
|
26
|
+
rescue SmartyException => err
|
|
39
27
|
puts err
|
|
40
28
|
return
|
|
41
29
|
end
|
|
@@ -1,32 +1,22 @@
|
|
|
1
1
|
require 'smartystreets_ruby_sdk/static_credentials'
|
|
2
|
-
require 'smartystreets_ruby_sdk/client_builder'
|
|
2
|
+
require 'smartystreets_ruby_sdk/us_zipcode/client_builder'
|
|
3
3
|
require 'smartystreets_ruby_sdk/us_zipcode/lookup'
|
|
4
4
|
|
|
5
5
|
class UsZipcodeSingleLookupExample
|
|
6
6
|
def run
|
|
7
|
-
|
|
8
|
-
# auth_token = 'Your SmartyStreets Auth Token here'
|
|
9
|
-
|
|
10
|
-
# We recommend storing your secret keys in environment variables instead---it's safer!
|
|
11
|
-
auth_id = ENV['SMARTY_AUTH_ID']
|
|
7
|
+
auth_id = ENV['SMARTY_AUTH_ID'] # We recommend storing your keys in environment variables
|
|
12
8
|
auth_token = ENV['SMARTY_AUTH_TOKEN']
|
|
9
|
+
credentials = StaticCredentials.new(auth_id, auth_token)
|
|
13
10
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
client = SmartyStreets::ClientBuilder.new(credentials).build_us_zipcode_api_client
|
|
11
|
+
client = USZipcode::ClientBuilder.new(credentials).build
|
|
17
12
|
|
|
18
|
-
|
|
19
|
-
# https://smartystreets.com/docs/cloud/us-zipcode-api
|
|
20
|
-
|
|
21
|
-
lookup = SmartyStreets::USZipcode::Lookup.new
|
|
22
|
-
lookup.input_id = 'dfc33cb6-829e-4fea-aa1b-b6d6580f0817' # Optional ID from your system
|
|
13
|
+
lookup = USZipcode::Lookup.new
|
|
23
14
|
lookup.city = 'Mountain View'
|
|
24
15
|
lookup.state = 'California'
|
|
25
|
-
lookup.zipcode = '94043'
|
|
26
16
|
|
|
27
17
|
begin
|
|
28
18
|
client.send_lookup(lookup)
|
|
29
|
-
rescue
|
|
19
|
+
rescue SmartyException => err
|
|
30
20
|
puts err
|
|
31
21
|
return
|
|
32
22
|
end
|
|
@@ -35,8 +25,6 @@ class UsZipcodeSingleLookupExample
|
|
|
35
25
|
zipcodes = result.zipcodes
|
|
36
26
|
cities = result.cities
|
|
37
27
|
|
|
38
|
-
puts "Input ID: #{result.input_id}"
|
|
39
|
-
|
|
40
28
|
cities.each do |city|
|
|
41
29
|
puts "\nCity: #{city.city}"
|
|
42
30
|
puts "State: #{city.state}"
|
|
@@ -1,59 +1,52 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
include Enumerable
|
|
5
|
-
MAX_BATCH_SIZE = 100
|
|
1
|
+
class Batch
|
|
2
|
+
include Enumerable
|
|
3
|
+
MAX_BATCH_SIZE = 100
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
attr_reader :all_lookups, :named_lookups
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def add(lookup)
|
|
15
|
-
return false if full?
|
|
16
|
-
|
|
17
|
-
@all_lookups.push(lookup)
|
|
7
|
+
def initialize
|
|
8
|
+
@named_lookups = {}
|
|
9
|
+
@all_lookups = []
|
|
10
|
+
end
|
|
18
11
|
|
|
19
|
-
|
|
12
|
+
def add(lookup)
|
|
13
|
+
return false if is_full
|
|
20
14
|
|
|
21
|
-
|
|
22
|
-
true
|
|
23
|
-
end
|
|
15
|
+
@all_lookups.push(lookup)
|
|
24
16
|
|
|
25
|
-
|
|
26
|
-
@named_lookups.clear
|
|
27
|
-
@all_lookups.clear
|
|
28
|
-
end
|
|
17
|
+
return true if lookup.input_id == nil
|
|
29
18
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
19
|
+
@named_lookups[lookup.input_id] = lookup
|
|
20
|
+
true
|
|
21
|
+
end
|
|
33
22
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
23
|
+
def clear
|
|
24
|
+
@named_lookups.clear
|
|
25
|
+
@all_lookups.clear
|
|
26
|
+
end
|
|
37
27
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
28
|
+
def is_full
|
|
29
|
+
size >= MAX_BATCH_SIZE
|
|
30
|
+
end
|
|
41
31
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
32
|
+
def size
|
|
33
|
+
@all_lookups.length
|
|
34
|
+
end
|
|
45
35
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
36
|
+
def get_by_input_id(input_id)
|
|
37
|
+
@named_lookups[input_id]
|
|
38
|
+
end
|
|
49
39
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
40
|
+
def get_by_index(index)
|
|
41
|
+
@all_lookups[index]
|
|
42
|
+
end
|
|
53
43
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
44
|
+
def each(&block)
|
|
45
|
+
@all_lookups.each(&block)
|
|
46
|
+
end
|
|
57
47
|
|
|
48
|
+
def [](index)
|
|
49
|
+
@all_lookups[index]
|
|
58
50
|
end
|
|
59
|
-
|
|
51
|
+
|
|
52
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require_relative 'native_serializer'
|
|
2
|
+
require_relative 'native_sender'
|
|
3
|
+
require_relative 'status_code_sender'
|
|
4
|
+
require_relative 'signing_sender'
|
|
5
|
+
require_relative 'retry_sender'
|
|
6
|
+
require_relative 'url_prefix_sender'
|
|
7
|
+
require_relative 'sleeper'
|
|
8
|
+
|
|
9
|
+
class CoreClientBuilder
|
|
10
|
+
def initialize(signer)
|
|
11
|
+
@signer = signer
|
|
12
|
+
@serializer = NativeSerializer.new
|
|
13
|
+
@http_sender = nil
|
|
14
|
+
@max_retries = 5
|
|
15
|
+
@max_timeout = 10000
|
|
16
|
+
@url_prefix = ''
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def retry_at_most(max_retries)
|
|
20
|
+
@max_retries = max_retries
|
|
21
|
+
self
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def with_max_timeout(max_timeout)
|
|
25
|
+
@max_timeout = max_timeout
|
|
26
|
+
self
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def with_serializer(serializer)
|
|
30
|
+
@serializer = serializer
|
|
31
|
+
self
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def with_url(url_prefix)
|
|
35
|
+
@url_prefix = url_prefix
|
|
36
|
+
self
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def build
|
|
40
|
+
# Implemented in child classes
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def build_sender
|
|
44
|
+
return @http_sender if @http_sender != nil
|
|
45
|
+
|
|
46
|
+
sender = NativeSender.new(@max_timeout)
|
|
47
|
+
|
|
48
|
+
sender = StatusCodeSender.new(sender)
|
|
49
|
+
|
|
50
|
+
sender = SigningSender.new(@signer, sender) if @signer != nil
|
|
51
|
+
|
|
52
|
+
sender = RetrySender.new(@max_retries, sender, Sleeper.new) if @max_retries > 0
|
|
53
|
+
|
|
54
|
+
URLPrefixSender.new(@url_prefix, sender)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
end
|
|
1
|
+
class CustomHeaderSender
|
|
2
|
+
def initialize(inner, headers)
|
|
3
|
+
@inner = inner
|
|
4
|
+
@headers = headers
|
|
5
|
+
end
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
end
|
|
7
|
+
def send(request)
|
|
8
|
+
request.headers = @headers
|
|
9
|
+
@inner.send(request)
|
|
12
10
|
end
|
|
13
11
|
end
|
|
@@ -1,27 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
active credentials.'.freeze
|
|
1
|
+
BAD_CREDENTIALS = 'Unauthorized: The credentials were provided incorrectly or did not match any existing,
|
|
2
|
+
active credentials.'
|
|
4
3
|
|
|
5
|
-
|
|
6
|
-
for the account associated with the credentials submitted with the request.'
|
|
4
|
+
PAYMENT_REQUIRED = 'Payment Required: There is no active subscription
|
|
5
|
+
for the account associated with the credentials submitted with the request.'
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
' may access the service.'.freeze
|
|
7
|
+
REQUEST_ENTITY_TOO_LARGE = 'Request Entity Too Large: The request body has exceeded the maximum size.'
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
BAD_REQUEST = 'Bad Request (Malformed Payload): A GET request lacked a street field or the request body of a
|
|
10
|
+
POST request contained malformed JSON.'
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
TOO_MANY_REQUESTS = 'When using public "website key" authentication,
|
|
13
|
+
we restrict the number of requests coming from a given source over too short of a time.'
|
|
15
14
|
|
|
16
|
-
|
|
15
|
+
INTERNAL_SERVER_ERROR = 'Internal Server Error.'
|
|
17
16
|
|
|
18
|
-
|
|
19
|
-
we restrict the number of requests coming from a given source over too short of a time.'.freeze
|
|
20
|
-
|
|
21
|
-
INTERNAL_SERVER_ERROR = 'Internal Server Error.'.freeze
|
|
22
|
-
|
|
23
|
-
SERVICE_UNAVAILABLE = 'Service Unavailable. Try again later.'.freeze
|
|
24
|
-
|
|
25
|
-
GATEWAY_TIMEOUT = 'The upstream data provider did not respond in a timely fashion and the request failed. ' \
|
|
26
|
-
'A serious, yet rare occurrence indeed.'.freeze
|
|
27
|
-
end
|
|
17
|
+
SERVICE_UNAVAILABLE = 'Service Unavailable. Try again later.'
|
|
@@ -1,39 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
class SmartyError < StandardError
|
|
4
|
-
end
|
|
1
|
+
class SmartyException < Exception
|
|
2
|
+
end
|
|
5
3
|
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
class BadCredentialsError < SmartyException
|
|
5
|
+
end
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
class PaymentRequiredError < SmartyException
|
|
8
|
+
end
|
|
11
9
|
|
|
12
|
-
class PaymentRequiredError < SmartyError
|
|
13
|
-
end
|
|
14
10
|
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
class RequestEntityTooLargeError < SmartyException
|
|
12
|
+
end
|
|
17
13
|
|
|
18
|
-
class BadRequestError < SmartyError
|
|
19
|
-
end
|
|
20
14
|
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
class BadRequestError < SmartyException
|
|
16
|
+
end
|
|
23
17
|
|
|
24
|
-
class TooManyRequestsError < SmartyError
|
|
25
|
-
end
|
|
26
18
|
|
|
27
|
-
|
|
28
|
-
|
|
19
|
+
class TooManyRequestsError < SmartyException
|
|
20
|
+
end
|
|
29
21
|
|
|
30
|
-
class ServiceUnavailableError < SmartyError
|
|
31
|
-
end
|
|
32
22
|
|
|
33
|
-
|
|
34
|
-
|
|
23
|
+
class InternalServerError < SmartyException
|
|
24
|
+
end
|
|
35
25
|
|
|
36
|
-
class BatchFullError < SmartyError
|
|
37
|
-
end
|
|
38
26
|
|
|
39
|
-
|
|
27
|
+
class ServiceUnavailableError < SmartyException
|
|
28
|
+
end
|