smartystreets_ruby_sdk 9.0.0 → 9.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1f80a7994c3b9e2b9c0936875503a6fe6751db574e64861014ead029f5e1079e
4
- data.tar.gz: d488f5c6698c089bc147d562793d67e5478b70c23da9d76e8607fe03111b0a93
3
+ metadata.gz: f033c107bfea0fb806b080faed0a58d7d9e2a062acc88f74b162fd0b2f4db73a
4
+ data.tar.gz: eb2ec5974ad3143e1abd197daea71fb6ac817eaf9bc2b4e84a1cd34d2c621012
5
5
  SHA512:
6
- metadata.gz: 739c0edcc1fc7e0a6d4cff83ec12adb0f2f146518e211fe981988d2d4dc18921c16866e911de63612df5e3638a72835bdf6f74a69a8b218c459211941a257c3b
7
- data.tar.gz: 1f8de619ff3655c99a97d7acb5a3c95d892451c7aab832dd8e0cc88c32ecb12a8b1d6e8237cb3f9032ca7fee8573c43cbdcf805313f10b3c67de8fab42317484
6
+ metadata.gz: 4d6cdd50b585f1bec44a2ca6cf8391613774c9bea95f6537343f9565f884fd56a976cc91ebb089c9d426b3f762e0fb4bf23ec3c2e0084bbadc3179234ab3108d
7
+ data.tar.gz: 2c45d8292d54cf45b2f1add26eecc7ba8de652f4668d448fcf404b9371910ba9e9638e5804fae06d8decd3e70dd1dbb95abe67c1e7ada889076cb4fe71adc90f
data/CLAUDE.md CHANGED
@@ -58,7 +58,7 @@ URLPrefixSender → CustomQuerySender → LicenseSender → RetrySender → Sign
58
58
 
59
59
  ### Supported APIs
60
60
 
61
- - US Street, US ZipCode, US Autocomplete Pro, US Extract, US Reverse Geo, US Enrichment
61
+ - US Street, US ZipCode, US Autocomplete, US Autocomplete Pro, US Extract, US Reverse Geo, US Enrichment
62
62
  - International Street, International Autocomplete, International Postal Code
63
63
 
64
64
  ### Test Structure
data/Makefile CHANGED
@@ -33,6 +33,9 @@ international_postal_code_api:
33
33
  international_street_api:
34
34
  cd examples && ruby international_example.rb
35
35
 
36
+ us_autocomplete_api:
37
+ cd examples && ruby us_autocomplete_example.rb
38
+
36
39
  us_autocomplete_pro_api:
37
40
  cd examples && ruby us_autocomplete_pro_example.rb
38
41
 
@@ -54,6 +57,6 @@ us_street_match_strategy_api:
54
57
  us_zipcode_api:
55
58
  cd examples && ruby us_zipcode_single_lookup_example.rb && ruby us_zipcode_multiple_lookup_example.rb
56
59
 
57
- examples: international_autocomplete_api international_postal_code_api international_street_api us_autocomplete_pro_api us_enrichment_api us_extract_api us_reverse_geo_api us_street_api us_zipcode_api
60
+ examples: international_autocomplete_api international_postal_code_api international_street_api us_autocomplete_pro_api us_autocomplete_api us_enrichment_api us_extract_api us_reverse_geo_api us_street_api us_zipcode_api
58
61
 
59
- .PHONY: clean test dependencies package publish international_autocomplete_api international_postal_code_api international_street_api us_autocomplete_pro_api us_enrichment_api us_extract_api us_reverse_geo_api us_street_api us_street_match_strategy_api us_zipcode_api examples
62
+ .PHONY: clean test dependencies package publish international_autocomplete_api international_postal_code_api international_street_api us_autocomplete_pro_api us_autocomplete_api us_enrichment_api us_extract_api us_reverse_geo_api us_street_api us_street_match_strategy_api us_zipcode_api examples
@@ -0,0 +1,69 @@
1
+ require '../lib/smartystreets_ruby_sdk/shared_credentials'
2
+ require '../lib/smartystreets_ruby_sdk/static_credentials'
3
+ require '../lib/smartystreets_ruby_sdk/basic_auth_credentials'
4
+ require '../lib/smartystreets_ruby_sdk/client_builder'
5
+ require '../lib/smartystreets_ruby_sdk/us_autocomplete/lookup'
6
+ require '../lib/smartystreets_ruby_sdk/us_autocomplete/source_type'
7
+
8
+ # This example is for US Autocomplete (V2). It has the same name as a previous product
9
+ # which has been deprecated since 2022, which we refer to as US Autocomplete Basic.
10
+ # If you are still using US Autocomplete Basic, this SDK will not work.
11
+ class USAutocompleteExample
12
+ Lookup = SmartyStreets::USAutocomplete::Lookup
13
+ SourceType = SmartyStreets::USAutocomplete::SourceType
14
+
15
+ def run
16
+ # key = 'Your SmartyStreets Auth Key here'
17
+ # referer = 'Your host name here'
18
+ # We recommend storing your secret keys in environment variables instead---it's safer!
19
+ # key = ENV['SMARTY_AUTH_WEB']
20
+ # referer = ENV['SMARTY_AUTH_REFERER']
21
+ # credentials = SmartyStreets::SharedCredentials.new(key, referer)
22
+
23
+ id = ENV['SMARTY_AUTH_ID']
24
+ token = ENV['SMARTY_AUTH_TOKEN']
25
+ credentials = SmartyStreets::BasicAuthCredentials.new(id, token)
26
+
27
+ client = SmartyStreets::ClientBuilder.new(credentials).build_us_autocomplete_api_client
28
+
29
+ # Documentation for input fields can be found at:
30
+ # https://www.smarty.com/docs/apis/us-autocomplete-v2/reference#http-request-input-fields
31
+
32
+ lookup = Lookup.new('1042 W Center')
33
+ lookup.add_city_filter('Denver,Aurora,CO')
34
+ lookup.add_city_filter('Orem,UT')
35
+ lookup.max_results = 5
36
+ lookup.prefer_ratio = 3
37
+ lookup.source = SourceType::ALL
38
+
39
+ # lookup.add_custom_parameter('parameter', 'value')
40
+
41
+ suggestions = client.send(lookup) # The client will also return the suggestions directly
42
+
43
+ puts
44
+ puts '*** Result with some filters ***'
45
+ puts
46
+
47
+ entry_id = nil
48
+ suggestions.each do |suggestion|
49
+ puts "#{suggestion.street_line} #{suggestion.city}, #{suggestion.state}"
50
+ entry_id = suggestion.entry_id if suggestion.entry_id && !suggestion.entry_id.empty?
51
+ end
52
+
53
+ # Expand the secondaries of a result that has an entry_id by passing it back as the selected address.
54
+ if entry_id && !entry_id.empty?
55
+ lookup.selected = entry_id
56
+ suggestions = client.send(lookup)
57
+
58
+ puts
59
+ puts '*** Secondaries ***'
60
+ puts
61
+
62
+ suggestions.each do |suggestion|
63
+ puts "#{suggestion.street_line} #{suggestion.city}, #{suggestion.state}"
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ USAutocompleteExample.new.run
@@ -17,6 +17,7 @@ require_relative 'international_street/client'
17
17
  require_relative 'international_autocomplete/client'
18
18
  require_relative 'us_reverse_geo/client'
19
19
  require_relative 'us_autocomplete_pro/client'
20
+ require_relative 'us_autocomplete/client'
20
21
  require_relative 'us_enrichment/client'
21
22
  require_relative 'international_postal_code/client'
22
23
 
@@ -28,6 +29,7 @@ module SmartyStreets
28
29
  INTERNATIONAL_STREET_API_URL = 'https://international-street.api.smarty.com/verify'.freeze
29
30
  INTERNATIONAL_AUTOCOMPLETE_API_URL = "https://international-autocomplete.api.smarty.com/v2/lookup".freeze
30
31
  US_AUTOCOMPLETE_PRO_API_URL = 'https://us-autocomplete-pro.api.smarty.com/lookup'.freeze
32
+ US_AUTOCOMPLETE_API_URL = 'https://us-autocomplete.api.smarty.com/v2/lookup'.freeze
31
33
  US_EXTRACT_API_URL = 'https://us-extract.api.smarty.com/'.freeze
32
34
  US_STREET_API_URL = 'https://us-street.api.smarty.com/street-address'.freeze
33
35
  US_ZIP_CODE_API_URL = 'https://us-zipcode.api.smarty.com/lookup'.freeze
@@ -185,6 +187,11 @@ module SmartyStreets
185
187
  USAutocompletePro::Client.new(build_sender, @serializer)
186
188
  end
187
189
 
190
+ def build_us_autocomplete_api_client
191
+ ensure_url_prefix_not_null(US_AUTOCOMPLETE_API_URL)
192
+ USAutocomplete::Client.new(build_sender, @serializer)
193
+ end
194
+
188
195
  def build_us_extract_api_client
189
196
  ensure_url_prefix_not_null(US_EXTRACT_API_URL)
190
197
  USExtract::Client.new(build_sender, @serializer)
@@ -0,0 +1,82 @@
1
+ require_relative '../request'
2
+ require_relative '../exceptions'
3
+ require_relative 'geolocation_type'
4
+ require_relative 'suggestion'
5
+
6
+ module SmartyStreets
7
+ module USAutocomplete
8
+ # It is recommended to instantiate this class using ClientBuilder.build_us_autocomplete_api_client
9
+ class Client
10
+ def initialize(sender, serializer)
11
+ @sender = sender
12
+ @serializer = serializer
13
+ end
14
+
15
+ # Sends a Lookup object to the US Autocomplete API and stores the result in the Lookup's result field.
16
+ def send(lookup)
17
+ if not lookup or not lookup.search
18
+ raise SmartyStreets::SmartyError, 'Send() must be passed a Lookup with the search field set.'
19
+ end
20
+
21
+ request = build_request(lookup)
22
+
23
+ response = @sender.send(request)
24
+
25
+ raise response.error if response.error
26
+
27
+ result = @serializer.deserialize(response.payload)
28
+ suggestions = convert_suggestions(result.fetch('suggestions', []))
29
+ lookup.result = suggestions
30
+ end
31
+
32
+
33
+ def build_request(lookup)
34
+ request = Request.new
35
+
36
+ add_parameter(request, 'search', lookup.search)
37
+ add_parameter(request, 'max_results', lookup.max_results.to_s)
38
+ add_parameter(request, 'include_only_cities', build_filter_string(lookup.city_filter))
39
+ add_parameter(request, 'include_only_states', build_filter_string(lookup.state_filter))
40
+ add_parameter(request, 'include_only_zip_codes', build_filter_string(lookup.zip_filter))
41
+ add_parameter(request, 'exclude_states', build_filter_string(lookup.exclude_states))
42
+ add_parameter(request, 'prefer_cities', build_filter_string(lookup.prefer_cities))
43
+ add_parameter(request, 'prefer_states', build_filter_string(lookup.prefer_states))
44
+ add_parameter(request, 'prefer_zip_codes', build_filter_string(lookup.prefer_zip_codes))
45
+ add_parameter(request, 'prefer_ratio', lookup.prefer_ratio.to_s)
46
+ add_parameter(request, 'source', lookup.source)
47
+ if lookup.prefer_zip_codes.any? || lookup.zip_filter.any?
48
+ request.parameters['prefer_geolocation'] = GeolocationType::NONE
49
+ else
50
+ add_parameter(request, 'prefer_geolocation', lookup.prefer_geolocation)
51
+ end
52
+ add_parameter(request, 'selected', lookup.selected)
53
+ add_parameter(request, 'exclude', build_filter_string(lookup.exclude, ','))
54
+
55
+ for key in lookup.custom_param_hash.keys do
56
+ add_parameter(request, key, lookup.custom_param_hash[key])
57
+ end
58
+
59
+ request
60
+ end
61
+
62
+ def build_filter_string(filter_list, separator=';')
63
+ filter_list ? filter_list.join(separator) : nil
64
+ end
65
+
66
+ def convert_suggestions(suggestion_hashes)
67
+ converted_suggestions = []
68
+ return converted_suggestions if suggestion_hashes.nil?
69
+
70
+ suggestion_hashes.each do |suggestion|
71
+ converted_suggestions.push(USAutocomplete::Suggestion.new(suggestion))
72
+ end
73
+
74
+ converted_suggestions
75
+ end
76
+
77
+ def add_parameter(request, key, value)
78
+ request.parameters[key] = value unless value.nil? or value.empty?
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,8 @@
1
+ module SmartyStreets
2
+ module USAutocomplete
3
+ module GeolocationType
4
+ CITY = 'city'
5
+ NONE = 'none'
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,73 @@
1
+ require_relative '../json_able'
2
+
3
+ module SmartyStreets
4
+ module USAutocomplete
5
+ # In addition to holding all of the input data for this lookup, this class also will contain the result
6
+ # of the lookup after it comes back from the API.
7
+ #
8
+ # See "https://www.smarty.com/docs/apis/us-autocomplete-v2/reference#http-request-input-fields"
9
+ class Lookup < JSONAble
10
+
11
+ attr_accessor :result, :search, :max_results, :city_filter, :state_filter, :zip_filter,
12
+ :exclude_states, :prefer_cities, :prefer_states, :prefer_zip_codes, :prefer_ratio,
13
+ :prefer_geolocation, :selected, :exclude, :source, :custom_param_hash
14
+
15
+ def initialize(search=nil, max_results=nil, city_filter=nil, state_filter=nil, zip_filter=nil,
16
+ exclude_states=nil, prefer_cities=nil, prefer_states=nil, prefer_zips=nil, prefer_ratio=nil,
17
+ prefer_geolocation=nil, selected=nil, exclude=nil, source=nil, custom_param_hash=nil)
18
+ @result = []
19
+ @search = search
20
+ @max_results = max_results
21
+ @city_filter = city_filter ? city_filter : []
22
+ @state_filter = state_filter ? state_filter : []
23
+ @zip_filter = zip_filter ? zip_filter : []
24
+ @exclude_states = exclude_states ? exclude_states : []
25
+ @prefer_cities = prefer_cities ? prefer_cities : []
26
+ @prefer_states = prefer_states ? prefer_states : []
27
+ @prefer_zip_codes = prefer_zips ? prefer_zips : []
28
+ @prefer_ratio = prefer_ratio
29
+ @prefer_geolocation = prefer_geolocation
30
+ @selected = selected
31
+ @exclude = exclude ? exclude : []
32
+ @source = source
33
+ @custom_param_hash = {}
34
+ end
35
+
36
+ def add_custom_parameter(parameter, value)
37
+ @custom_param_hash[parameter] = value
38
+ end
39
+
40
+ def add_city_filter(city)
41
+ @city_filter.push(city)
42
+ end
43
+
44
+ def add_state_filter(state)
45
+ @state_filter.push(state)
46
+ end
47
+
48
+ def add_zip_filter(zip)
49
+ @zip_filter.push(zip)
50
+ end
51
+
52
+ def add_state_exclusion(state)
53
+ @exclude_states.push(state)
54
+ end
55
+
56
+ def add_preferred_city(city)
57
+ @prefer_cities.push(city)
58
+ end
59
+
60
+ def add_preferred_state(state)
61
+ @prefer_states.push(state)
62
+ end
63
+
64
+ def add_preferred_zip(zip)
65
+ @prefer_zip_codes.push(zip)
66
+ end
67
+
68
+ def add_exclude(exclude_type)
69
+ @exclude.push(exclude_type)
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,8 @@
1
+ module SmartyStreets
2
+ module USAutocomplete
3
+ module SourceType
4
+ ALL = 'all'.freeze
5
+ POSTAL = 'postal'.freeze
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,21 @@
1
+ module SmartyStreets
2
+ module USAutocomplete
3
+ # See "https://www.smarty.com/docs/apis/us-autocomplete-v2/reference#http-response-status"
4
+ class Suggestion
5
+
6
+ attr_reader :smarty_key, :entry_id, :street_line, :secondary, :city, :state, :zipcode, :entries, :source
7
+
8
+ def initialize(obj)
9
+ @smarty_key = obj.fetch('smarty_key', nil)
10
+ @entry_id = obj.fetch('entry_id', nil)
11
+ @street_line = obj.fetch('street_line', nil)
12
+ @secondary = obj.fetch('secondary', nil)
13
+ @city = obj.fetch('city', nil)
14
+ @state = obj.fetch('state', nil)
15
+ @zipcode = obj.fetch('zipcode', nil)
16
+ @entries = obj.fetch('entries', 0)
17
+ @source = obj.fetch('source', nil)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,10 @@
1
+ require_relative './us_autocomplete/lookup'
2
+ require_relative './us_autocomplete/geolocation_type'
3
+ require_relative './us_autocomplete/source_type'
4
+ require_relative './us_autocomplete/suggestion'
5
+ require_relative './us_autocomplete/client'
6
+
7
+ module SmartyStreets
8
+ module USAutocomplete
9
+ end
10
+ end
@@ -1,3 +1,3 @@
1
1
  module SmartyStreets
2
- VERSION = '9.0.0' # DO NOT EDIT (this is updated by a build job when a new release is published)
2
+ VERSION = '9.1.0' # DO NOT EDIT (this is updated by a build job when a new release is published)
3
3
  end
@@ -24,6 +24,7 @@ require 'smartystreets_ruby_sdk/us_extract'
24
24
  require 'smartystreets_ruby_sdk/us_street'
25
25
  require 'smartystreets_ruby_sdk/us_zipcode'
26
26
  require 'smartystreets_ruby_sdk/us_autocomplete_pro'
27
+ require 'smartystreets_ruby_sdk/us_autocomplete'
27
28
  require 'smartystreets_ruby_sdk/international_street'
28
29
  require 'smartystreets_ruby_sdk/international_autocomplete'
29
30
  require 'smartystreets_ruby_sdk/international_postal_code'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smartystreets_ruby_sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.0.0
4
+ version: 9.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - SmartyStreets SDK Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-06-23 00:00:00.000000000 Z
11
+ date: 2026-06-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -98,6 +98,7 @@ files:
98
98
  - examples/international_autocomplete_example.rb
99
99
  - examples/international_example.rb
100
100
  - examples/international_postal_code_example.rb
101
+ - examples/us_autocomplete_example.rb
101
102
  - examples/us_autocomplete_pro_example.rb
102
103
  - examples/us_enrichment_business_example.rb
103
104
  - examples/us_enrichment_business_name_search_example.rb
@@ -153,6 +154,12 @@ files:
153
154
  - lib/smartystreets_ruby_sdk/static_credentials.rb
154
155
  - lib/smartystreets_ruby_sdk/status_code_sender.rb
155
156
  - lib/smartystreets_ruby_sdk/url_prefix_sender.rb
157
+ - lib/smartystreets_ruby_sdk/us_autocomplete.rb
158
+ - lib/smartystreets_ruby_sdk/us_autocomplete/client.rb
159
+ - lib/smartystreets_ruby_sdk/us_autocomplete/geolocation_type.rb
160
+ - lib/smartystreets_ruby_sdk/us_autocomplete/lookup.rb
161
+ - lib/smartystreets_ruby_sdk/us_autocomplete/source_type.rb
162
+ - lib/smartystreets_ruby_sdk/us_autocomplete/suggestion.rb
156
163
  - lib/smartystreets_ruby_sdk/us_autocomplete_pro.rb
157
164
  - lib/smartystreets_ruby_sdk/us_autocomplete_pro/client.rb
158
165
  - lib/smartystreets_ruby_sdk/us_autocomplete_pro/geolocation_type.rb