smartystreets_ruby_sdk 6.4.1 → 6.5.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: 6e9036bc90b5244c404d1969ebeaf73fbf2579be9a2a0346faecd9a65e1fd138
4
- data.tar.gz: eb1968e810a46432866e5309c75dc5e3438c4441c1cf13ca3190b813aba96d58
3
+ metadata.gz: 4580e181f2c397b9abcf2c155562d3032f9bf3982b3e09cfba587d86013f9e16
4
+ data.tar.gz: 1640dbc717b3098f3f9e4f5883b3aa9879ef657cb1aeee4aac4747fce3b913db
5
5
  SHA512:
6
- metadata.gz: c20f5407fde9a7b7b01125e8cc1868c21957df86594baf04e4924d32ae7d37ab28de8b78590859eda5b249ea3ecb0245d62d612f92990fb2783559d33d3e708f
7
- data.tar.gz: 797f184b4fa722e8f9bea76a448558723a6da6bcab86d64fc00f563cd80c29b5969396b11eb51c9b89a01f801f660713439298429a5f2948b2188e10b111b87b
6
+ metadata.gz: 44c218c01469fa611468c4aa448094954c7e3a6ebca1e0e662763d7c214406247cbd257e672b4d507008bd307fada6030b0f39eae0485ec9e5427ee60b8ad665
7
+ data.tar.gz: 569f4edfb672b87d3d4b165f74af82bcee8b45b43a41fcca24000a43da1509f07f0748479bd793695aac33827fd812a40b08cc61f254db1e2ae5fc70b6c9fffd
@@ -0,0 +1,14 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Edit",
5
+ "Write",
6
+ "Bash(rm:./*)",
7
+ "Bash(git *)",
8
+ "Bash(make *)",
9
+ "Bash(gem *)",
10
+ "Bash(rake *)",
11
+ "Bash(ruby *)"
12
+ ]
13
+ }
14
+ }
data/CLAUDE.md ADDED
@@ -0,0 +1,70 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Build and Test Commands
6
+
7
+ ```bash
8
+ # Run all tests
9
+ rake test
10
+ # or
11
+ make test
12
+
13
+ # Run a single test file
14
+ ruby -Ilib:test test/smartystreets_ruby_sdk/test_batch.rb
15
+
16
+ # Install dependencies
17
+ gem install minitest
18
+
19
+ # Build the gem (used by CI, requires VERSION env var)
20
+ make package
21
+
22
+ # Run all example scripts (requires SMARTY_AUTH_ID and SMARTY_AUTH_TOKEN env vars)
23
+ make examples
24
+ ```
25
+
26
+ ## Architecture
27
+
28
+ This is the official SmartyStreets Ruby SDK for address verification APIs. It uses pure Ruby with Net::HTTP (no external runtime dependencies).
29
+
30
+ ### Core Design Patterns
31
+
32
+ **Builder Pattern**: `ClientBuilder` provides a fluent interface for configuring API clients:
33
+ ```ruby
34
+ credentials = SmartyStreets::StaticCredentials.new(auth_id, auth_token)
35
+ client = SmartyStreets::ClientBuilder.new(credentials)
36
+ .retry_at_most(5)
37
+ .with_licenses(['us-rooftop-geocoding-cloud'])
38
+ .build_us_street_api_client
39
+ ```
40
+
41
+ **Chain of Responsibility**: HTTP requests flow through a middleware chain of "Sender" objects. Each sender wraps an inner sender:
42
+ ```
43
+ URLPrefixSender → LicenseSender → RetrySender → SigningSender → StatusCodeSender → NativeSender
44
+ ```
45
+
46
+ ### Key Components
47
+
48
+ - **lib/smartystreets_ruby_sdk.rb**: Main entry point, requires all modules
49
+ - **client_builder.rb**: Constructs sender chains and API clients
50
+ - **Sender classes**: Middleware for URL prefixing, retries, authentication, status code handling
51
+ - **API modules** (us_street/, us_zipcode/, international_street/, etc.): Each contains:
52
+ - `client.rb`: API client with `send_lookup()` and `send_batch()` methods
53
+ - `lookup.rb`: Input model (JSONAble mixin for serialization)
54
+ - Response classes (candidate.rb, result.rb, etc.)
55
+
56
+ ### Supported APIs
57
+
58
+ - US Street, US ZipCode, US Autocomplete Pro, US Extract, US Reverse Geo, US Enrichment
59
+ - International Street, International Autocomplete, International Postal Code
60
+
61
+ ### Test Structure
62
+
63
+ Tests use Minitest with mock objects in `test/mocks/`. Test files mirror the lib structure under `test/smartystreets_ruby_sdk/`.
64
+
65
+ ### Adding New API Support
66
+
67
+ 1. Create new directory under `lib/smartystreets_ruby_sdk/` with client, lookup, and response classes
68
+ 2. Add `build_[api]_client` method to `client_builder.rb`
69
+ 3. Add requires to main `smartystreets_ruby_sdk.rb`
70
+ 4. Create corresponding test files and example script
data/Makefile CHANGED
@@ -46,7 +46,7 @@ us_reverse_geo_api:
46
46
  cd examples && ruby us_reverse_geo_example.rb
47
47
 
48
48
  us_street_api:
49
- cd examples && ruby us_street_single_address_example.rb && ruby us_street_multiple_address_example.rb && ruby us_street_component_analysis.rb && ruby us_street_component_analysis_example.rb
49
+ cd examples && ruby us_street_single_address_example.rb && ruby us_street_multiple_address_example.rb && ruby us_street_component_analysis_example.rb && ruby us_street_component_analysis_example.rb
50
50
 
51
51
  us_zipcode_api:
52
52
  cd examples && ruby us_zipcode_single_lookup_example.rb && ruby us_zipcode_multiple_lookup_example.rb
@@ -1,5 +1,6 @@
1
1
  require '../lib/smartystreets_ruby_sdk/shared_credentials'
2
2
  require '../lib/smartystreets_ruby_sdk/static_credentials'
3
+ require '../lib/smartystreets_ruby_sdk/basic_auth_credentials'
3
4
  require '../lib/smartystreets_ruby_sdk/client_builder'
4
5
  require '../lib/smartystreets_ruby_sdk/international_autocomplete/lookup'
5
6
  require '../lib/smartystreets_ruby_sdk/international_autocomplete/client'
@@ -11,13 +12,13 @@ class InternationalAutocompleteExample
11
12
  # key = 'Your SmartyStreets Auth Key here'
12
13
  # referer = 'Your host name here'
13
14
  # We recommend storing your secret keys in environment variables instead---it's safer!
14
- key = ENV['SMARTY_AUTH_WEB']
15
- referer = ENV['SMARTY_AUTH_REFERER']
16
- credentials = SmartyStreets::SharedCredentials.new(key, referer)
15
+ # key = ENV['SMARTY_AUTH_WEB']
16
+ # referer = ENV['SMARTY_AUTH_REFERER']
17
+ # credentials = SmartyStreets::SharedCredentials.new(key, referer)
17
18
 
18
- # id = ENV['SMARTY_AUTH_ID']
19
- # token = ENV['SMARTY_AUTH_TOKEN']
20
- # credentials = SmartyStreets::StaticCredentials.new(id, token)
19
+ id = ENV['SMARTY_AUTH_ID']
20
+ token = ENV['SMARTY_AUTH_TOKEN']
21
+ credentials = SmartyStreets::BasicAuthCredentials.new(id, token)
21
22
 
22
23
  client = SmartyStreets::ClientBuilder.new(credentials).build_international_autocomplete_api_client
23
24
 
@@ -1,5 +1,6 @@
1
1
  require '../lib/smartystreets_ruby_sdk/static_credentials'
2
2
  require '../lib/smartystreets_ruby_sdk/shared_credentials'
3
+ require '../lib/smartystreets_ruby_sdk/basic_auth_credentials'
3
4
  require '../lib/smartystreets_ruby_sdk/client_builder'
4
5
  require '../lib/smartystreets_ruby_sdk/international_street/lookup'
5
6
 
@@ -10,13 +11,13 @@ class InternationalExample
10
11
  # key = 'Your SmartyStreets Auth Key here'
11
12
  # referer = 'Your host name here'
12
13
  # We recommend storing your secret keys in environment variables instead---it's safer!
13
- key = ENV['SMARTY_AUTH_WEB']
14
- referer = ENV['SMARTY_AUTH_REFERER']
15
- credentials = SmartyStreets::SharedCredentials.new(key, referer)
14
+ # key = ENV['SMARTY_AUTH_WEB']
15
+ # referer = ENV['SMARTY_AUTH_REFERER']
16
+ # credentials = SmartyStreets::SharedCredentials.new(key, referer)
16
17
 
17
- # id = ENV['SMARTY_AUTH_ID']
18
- # token = ENV['SMARTY_AUTH_TOKEN']
19
- # credentials = SmartyStreets::StaticCredentials.new(id, token)
18
+ id = ENV['SMARTY_AUTH_ID']
19
+ token = ENV['SMARTY_AUTH_TOKEN']
20
+ credentials = SmartyStreets::BasicAuthCredentials.new(id, token)
20
21
 
21
22
  client = SmartyStreets::ClientBuilder.new(credentials).build_international_street_api_client
22
23
 
@@ -1,5 +1,6 @@
1
1
  require '../lib/smartystreets_ruby_sdk/static_credentials'
2
2
  require '../lib/smartystreets_ruby_sdk/shared_credentials'
3
+ require '../lib/smartystreets_ruby_sdk/basic_auth_credentials'
3
4
  require '../lib/smartystreets_ruby_sdk/client_builder'
4
5
  require '../lib/smartystreets_ruby_sdk/international_postal_code/lookup'
5
6
 
@@ -12,11 +13,11 @@ class InternationalPostalCodeExample
12
13
  # referer = ENV['SMARTY_AUTH_REFERER']
13
14
  # credentials = SmartyStreets::SharedCredentials.new(key, referer)
14
15
 
15
- id = ENV['SMARTY_AUTH_ID_DEV']
16
- token = ENV['SMARTY_AUTH_TOKEN_DEV']
17
- credentials = SmartyStreets::StaticCredentials.new(id, token)
16
+ id = ENV['SMARTY_AUTH_ID']
17
+ token = ENV['SMARTY_AUTH_TOKEN']
18
+ credentials = SmartyStreets::BasicAuthCredentials.new(id, token)
18
19
 
19
- client = SmartyStreets::ClientBuilder.new(credentials).with_base_url("https://international-postal-code.api.rivendell.smartyops.net/lookup").build_international_postal_code_api_client
20
+ client = SmartyStreets::ClientBuilder.new(credentials).build_international_postal_code_api_client
20
21
 
21
22
  # Documentation for input fields can be found at:
22
23
  # https://smartystreets.com/docs/cloud/international-postal-code-api
@@ -1,5 +1,6 @@
1
1
  require '../lib/smartystreets_ruby_sdk/shared_credentials'
2
2
  require '../lib/smartystreets_ruby_sdk/static_credentials'
3
+ require '../lib/smartystreets_ruby_sdk/basic_auth_credentials'
3
4
  require '../lib/smartystreets_ruby_sdk/client_builder'
4
5
  require '../lib/smartystreets_ruby_sdk/us_autocomplete_pro/lookup'
5
6
 
@@ -10,18 +11,13 @@ class USAutocompleteProExample
10
11
  # key = 'Your SmartyStreets Auth Key here'
11
12
  # referer = 'Your host name here'
12
13
  # We recommend storing your secret keys in environment variables instead---it's safer!
13
- key = ENV['SMARTY_AUTH_WEB']
14
- referer = ENV['SMARTY_AUTH_REFERER']
15
- credentials = SmartyStreets::SharedCredentials.new(key, referer)
16
-
17
- # id = ENV['SMARTY_AUTH_ID']
18
- # token = ENV['SMARTY_AUTH_TOKEN']
19
- # credentials = SmartyStreets::StaticCredentials.new(id, token)
20
-
21
- # auth_id = ENV['SMARTY_AUTH_ID']
22
- # auth_token = ENV['SMARTY_AUTH_TOKEN']
23
- #
24
- # credentials = SmartyStreets::StaticCredentials.new(auth_id, auth_token)
14
+ # key = ENV['SMARTY_AUTH_WEB']
15
+ # referer = ENV['SMARTY_AUTH_REFERER']
16
+ # credentials = SmartyStreets::SharedCredentials.new(key, referer)
17
+
18
+ id = ENV['SMARTY_AUTH_ID']
19
+ token = ENV['SMARTY_AUTH_TOKEN']
20
+ credentials = SmartyStreets::BasicAuthCredentials.new(id, token)
25
21
 
26
22
  client = SmartyStreets::ClientBuilder.new(credentials).build_us_autocomplete_pro_api_client
27
23
 
@@ -1,5 +1,6 @@
1
1
  require '../lib/smartystreets_ruby_sdk/static_credentials'
2
2
  require '../lib/smartystreets_ruby_sdk/shared_credentials'
3
+ require '../lib/smartystreets_ruby_sdk/basic_auth_credentials'
3
4
  require '../lib/smartystreets_ruby_sdk/client_builder'
4
5
  require '../lib/smartystreets_ruby_sdk/us_enrichment/lookup'
5
6
 
@@ -14,7 +15,7 @@ class USEnrichmentAddressExample
14
15
 
15
16
  id = ENV['SMARTY_AUTH_ID']
16
17
  token = ENV['SMARTY_AUTH_TOKEN']
17
- credentials = SmartyStreets::StaticCredentials.new(id, token)
18
+ credentials = SmartyStreets::BasicAuthCredentials.new(id, token)
18
19
 
19
20
  # The appropriate license values to be used for your subscriptions
20
21
  # can be found on the Subscriptions page of the account dashboard.
@@ -1,5 +1,6 @@
1
1
  require '../lib/smartystreets_ruby_sdk/static_credentials'
2
2
  require '../lib/smartystreets_ruby_sdk/shared_credentials'
3
+ require '../lib/smartystreets_ruby_sdk/basic_auth_credentials'
3
4
  require '../lib/smartystreets_ruby_sdk/client_builder'
4
5
  require '../lib/smartystreets_ruby_sdk/us_extract/lookup'
5
6
  require '../lib/smartystreets_ruby_sdk/us_street/match_type'
@@ -12,13 +13,13 @@ class USExtractExample
12
13
  # key = 'Your SmartyStreets Auth Key here'
13
14
  # referer = 'Your host name here'
14
15
  # We recommend storing your secret keys in environment variables instead---it's safer!
15
- key = ENV['SMARTY_AUTH_WEB']
16
- referer = ENV['SMARTY_AUTH_REFERER']
17
- credentials = SmartyStreets::SharedCredentials.new(key, referer)
16
+ # key = ENV['SMARTY_AUTH_WEB']
17
+ # referer = ENV['SMARTY_AUTH_REFERER']
18
+ # credentials = SmartyStreets::SharedCredentials.new(key, referer)
18
19
 
19
- # id = ENV['SMARTY_AUTH_ID']
20
- # token = ENV['SMARTY_AUTH_TOKEN']
21
- # credentials = SmartyStreets::StaticCredentials.new(id, token)
20
+ id = ENV['SMARTY_AUTH_ID']
21
+ token = ENV['SMARTY_AUTH_TOKEN']
22
+ credentials = SmartyStreets::BasicAuthCredentials.new(id, token)
22
23
 
23
24
  client = SmartyStreets::ClientBuilder.new(credentials).build_us_extract_api_client
24
25
 
@@ -1,5 +1,6 @@
1
1
  require '../lib/smartystreets_ruby_sdk/static_credentials'
2
2
  require '../lib/smartystreets_ruby_sdk/shared_credentials'
3
+ require '../lib/smartystreets_ruby_sdk/basic_auth_credentials'
3
4
  require '../lib/smartystreets_ruby_sdk/client_builder'
4
5
  require '../lib/smartystreets_ruby_sdk/us_reverse_geo/lookup'
5
6
 
@@ -10,13 +11,13 @@ class USReverseGeoExample
10
11
  # key = 'Your SmartyStreets Auth Key here'
11
12
  # referer = 'Your host name here'
12
13
  # We recommend storing your secret keys in environment variables instead---it's safer!
13
- key = ENV['SMARTY_AUTH_WEB']
14
- referer = ENV['SMARTY_AUTH_REFERER']
15
- credentials = SmartyStreets::SharedCredentials.new(key, referer)
14
+ # key = ENV['SMARTY_AUTH_WEB']
15
+ # referer = ENV['SMARTY_AUTH_REFERER']
16
+ # credentials = SmartyStreets::SharedCredentials.new(key, referer)
16
17
 
17
- # id = ENV['SMARTY_AUTH_ID']
18
- # token = ENV['SMARTY_AUTH_TOKEN']
19
- # credentials = SmartyStreets::StaticCredentials.new(id, token)
18
+ id = ENV['SMARTY_AUTH_ID']
19
+ token = ENV['SMARTY_AUTH_TOKEN']
20
+ credentials = SmartyStreets::BasicAuthCredentials.new(id, token)
20
21
 
21
22
  client = SmartyStreets::ClientBuilder.new(credentials).build_us_reverse_geo_api_client
22
23
 
@@ -1,5 +1,6 @@
1
1
  require '../lib/smartystreets_ruby_sdk/static_credentials'
2
2
  require '../lib/smartystreets_ruby_sdk/shared_credentials'
3
+ require '../lib/smartystreets_ruby_sdk/basic_auth_credentials'
3
4
  require '../lib/smartystreets_ruby_sdk/client_builder'
4
5
  require '../lib/smartystreets_ruby_sdk/us_street/lookup'
5
6
  require '../lib/smartystreets_ruby_sdk/us_street/match_type'
@@ -14,7 +15,7 @@ class USStreetComponentAnalysisExample
14
15
  # For server-to-server requests, use this code:
15
16
  id = ENV['SMARTY_AUTH_ID']
16
17
  token = ENV['SMARTY_AUTH_TOKEN']
17
- credentials = SmartyStreets::StaticCredentials.new(id, token)
18
+ credentials = SmartyStreets::BasicAuthCredentials.new(id, token)
18
19
 
19
20
  client = SmartyStreets::ClientBuilder.new(credentials)
20
21
  .with_feature_component_analysis() # To add component analysis feature you need to specify when you create the client.
@@ -1,5 +1,6 @@
1
1
  require '../lib/smartystreets_ruby_sdk/static_credentials'
2
2
  require '../lib/smartystreets_ruby_sdk/shared_credentials'
3
+ require '../lib/smartystreets_ruby_sdk/basic_auth_credentials'
3
4
  require '../lib/smartystreets_ruby_sdk/client_builder'
4
5
  require '../lib/smartystreets_ruby_sdk/batch'
5
6
  require '../lib/smartystreets_ruby_sdk/us_street/lookup'
@@ -12,13 +13,13 @@ class USStreetMultipleAddressExample
12
13
  # key = 'Your SmartyStreets Auth Key here'
13
14
  # referer = 'Your host name here'
14
15
  # We recommend storing your secret keys in environment variables instead---it's safer!
15
- key = ENV['SMARTY_AUTH_WEB']
16
- referer = ENV['SMARTY_AUTH_REFERER']
17
- credentials = SmartyStreets::SharedCredentials.new(key, referer)
16
+ # key = ENV['SMARTY_AUTH_WEB']
17
+ # referer = ENV['SMARTY_AUTH_REFERER']
18
+ # credentials = SmartyStreets::SharedCredentials.new(key, referer)
18
19
 
19
- # id = ENV['SMARTY_AUTH_ID']
20
- # token = ENV['SMARTY_AUTH_TOKEN']
21
- # credentials = SmartyStreets::StaticCredentials.new(id, token)
20
+ id = ENV['SMARTY_AUTH_ID']
21
+ token = ENV['SMARTY_AUTH_TOKEN']
22
+ credentials = SmartyStreets::BasicAuthCredentials.new(id, token)
22
23
 
23
24
  client = SmartyStreets::ClientBuilder.new(credentials).build_us_street_api_client
24
25
  batch = SmartyStreets::Batch.new
@@ -1,5 +1,6 @@
1
1
  require '../lib/smartystreets_ruby_sdk/static_credentials'
2
2
  require '../lib/smartystreets_ruby_sdk/shared_credentials'
3
+ require '../lib/smartystreets_ruby_sdk/basic_auth_credentials'
3
4
  require '../lib/smartystreets_ruby_sdk/client_builder'
4
5
  require '../lib/smartystreets_ruby_sdk/us_street/lookup'
5
6
  require '../lib/smartystreets_ruby_sdk/us_street/match_type'
@@ -9,13 +10,13 @@ class USStreetSingleAddressExample
9
10
  # key = 'Your SmartyStreets Auth Key here'
10
11
  # referer = 'Your host name here'
11
12
  # We recommend storing your secret keys in environment variables instead---it's safer!
12
- key = ENV['SMARTY_AUTH_WEB']
13
- referer = ENV['SMARTY_AUTH_REFERER']
14
- credentials = SmartyStreets::SharedCredentials.new(key, referer)
13
+ # key = ENV['SMARTY_AUTH_WEB']
14
+ # referer = ENV['SMARTY_AUTH_REFERER']
15
+ # credentials = SmartyStreets::SharedCredentials.new(key, referer)
15
16
 
16
- # id = ENV['SMARTY_AUTH_ID']
17
- # token = ENV['SMARTY_AUTH_TOKEN']
18
- # credentials = SmartyStreets::StaticCredentials.new(id, token)
17
+ id = ENV['SMARTY_AUTH_ID']
18
+ token = ENV['SMARTY_AUTH_TOKEN']
19
+ credentials = SmartyStreets::BasicAuthCredentials.new(id, token)
19
20
 
20
21
  # To try with a proxy, add this method before build_us_street_api_client
21
22
  # with_proxy('localhost', 8080, 'proxyUser', 'proxyPassword')
@@ -1,5 +1,6 @@
1
1
  require '../lib/smartystreets_ruby_sdk/static_credentials'
2
2
  require '../lib/smartystreets_ruby_sdk/shared_credentials'
3
+ require '../lib/smartystreets_ruby_sdk/basic_auth_credentials'
3
4
  require '../lib/smartystreets_ruby_sdk/client_builder'
4
5
  require '../lib/smartystreets_ruby_sdk/batch'
5
6
  require '../lib/smartystreets_ruby_sdk/us_zipcode/lookup'
@@ -11,13 +12,13 @@ class USZipcodeMultipleLookupExample
11
12
  # key = 'Your SmartyStreets Auth Key here'
12
13
  # referer = 'Your host name here'
13
14
  # We recommend storing your secret keys in environment variables instead---it's safer!
14
- key = ENV['SMARTY_AUTH_WEB']
15
- referer = ENV['SMARTY_AUTH_REFERER']
16
- credentials = SmartyStreets::SharedCredentials.new(key, referer)
15
+ # key = ENV['SMARTY_AUTH_WEB']
16
+ # referer = ENV['SMARTY_AUTH_REFERER']
17
+ # credentials = SmartyStreets::SharedCredentials.new(key, referer)
17
18
 
18
- # id = ENV['SMARTY_AUTH_ID']
19
- # token = ENV['SMARTY_AUTH_TOKEN']
20
- # credentials = SmartyStreets::StaticCredentials.new(id, token)
19
+ id = ENV['SMARTY_AUTH_ID']
20
+ token = ENV['SMARTY_AUTH_TOKEN']
21
+ credentials = SmartyStreets::BasicAuthCredentials.new(id, token)
21
22
 
22
23
  client = SmartyStreets::ClientBuilder.new(credentials).build_us_zipcode_api_client
23
24
  batch = SmartyStreets::Batch.new
@@ -1,5 +1,6 @@
1
1
  require '../lib/smartystreets_ruby_sdk/static_credentials'
2
2
  require '../lib/smartystreets_ruby_sdk/shared_credentials'
3
+ require '../lib/smartystreets_ruby_sdk/basic_auth_credentials'
3
4
  require '../lib/smartystreets_ruby_sdk/client_builder'
4
5
  require '../lib/smartystreets_ruby_sdk/us_zipcode/lookup'
5
6
 
@@ -8,13 +9,13 @@ class UsZipcodeSingleLookupExample
8
9
  # key = 'Your SmartyStreets Auth Key here'
9
10
  # referer = 'Your host name here'
10
11
  # We recommend storing your secret keys in environment variables instead---it's safer!
11
- key = ENV['SMARTY_AUTH_WEB']
12
- referer = ENV['SMARTY_AUTH_REFERER']
13
- credentials = SmartyStreets::SharedCredentials.new(key, referer)
12
+ # key = ENV['SMARTY_AUTH_WEB']
13
+ # referer = ENV['SMARTY_AUTH_REFERER']
14
+ # credentials = SmartyStreets::SharedCredentials.new(key, referer)
14
15
 
15
- # id = ENV['SMARTY_AUTH_ID']
16
- # token = ENV['SMARTY_AUTH_TOKEN']
17
- # credentials = SmartyStreets::StaticCredentials.new(id, token)
16
+ id = ENV['SMARTY_AUTH_ID']
17
+ token = ENV['SMARTY_AUTH_TOKEN']
18
+ credentials = SmartyStreets::BasicAuthCredentials.new(id, token)
18
19
 
19
20
  client = SmartyStreets::ClientBuilder.new(credentials).build_us_zipcode_api_client
20
21
 
@@ -0,0 +1,14 @@
1
+ module SmartyStreets
2
+ class BasicAuthCredentials
3
+ def initialize(auth_id, auth_token)
4
+ raise ArgumentError, 'credentials (auth id, auth token) required' if auth_id.nil? || auth_id.empty? || auth_token.nil? || auth_token.empty?
5
+
6
+ @auth_id = auth_id
7
+ @auth_token = auth_token
8
+ end
9
+
10
+ def sign(request)
11
+ request.basic_auth = [@auth_id, @auth_token]
12
+ end
13
+ end
14
+ end
@@ -47,6 +47,7 @@ module SmartyStreets
47
47
  request.body = smarty_request.payload
48
48
  request['User-Agent'] = "smartystreets (sdk:ruby@#{SmartyStreets::VERSION})"
49
49
  request['Referer'] = smarty_request.referer unless smarty_request.referer.nil?
50
+ request.basic_auth(smarty_request.basic_auth[0], smarty_request.basic_auth[1]) unless smarty_request.basic_auth.nil?
50
51
  set_custom_headers(smarty_request.header, request)
51
52
  request
52
53
  end
@@ -1,6 +1,6 @@
1
1
  module SmartyStreets
2
2
  class Request
3
- attr_accessor :parameters, :payload, :url_components, :url_prefix, :referer, :header, :content_type
3
+ attr_accessor :parameters, :payload, :url_components, :url_prefix, :referer, :header, :content_type, :basic_auth
4
4
 
5
5
  def initialize
6
6
  @parameters = {}
@@ -10,6 +10,7 @@ module SmartyStreets
10
10
  @referer = nil
11
11
  @header = {}
12
12
  @content_type = 'application/json'
13
+ @basic_auth = nil
13
14
  end
14
15
  end
15
16
  end
@@ -47,7 +47,16 @@ module SmartyStreets
47
47
  converted_obj = []
48
48
  obj.each do |lookup|
49
49
  converted_lookup = {}
50
- lookup.candidates = 5 if lookup.match == "enhanced" && lookup.candidates == 0
50
+ match_strategy = lookup.match
51
+ match_strategy = MatchType::ENHANCED if match_strategy.nil? || match_strategy.empty?
52
+
53
+ if lookup.candidates > 0
54
+ converted_lookup['candidates'] = lookup.candidates
55
+ elsif match_strategy == MatchType::ENHANCED
56
+ converted_lookup['candidates'] = 5
57
+ end
58
+
59
+ converted_lookup['match'] = match_strategy if match_strategy != MatchType::STRICT
51
60
 
52
61
  converted_lookup['input_id'] = lookup.input_id
53
62
  converted_lookup['street'] = lookup.street
@@ -59,8 +68,6 @@ module SmartyStreets
59
68
  converted_lookup['lastline'] = lookup.lastline
60
69
  converted_lookup['addressee'] = lookup.addressee
61
70
  converted_lookup['urbanization'] = lookup.urbanization
62
- converted_lookup['match'] = lookup.match
63
- converted_lookup['candidates'] = lookup.candidates
64
71
  converted_lookup['format'] = lookup.format
65
72
  converted_lookup['county_source'] = lookup.county_source
66
73
 
@@ -1,3 +1,3 @@
1
1
  module SmartyStreets
2
- VERSION = '6.4.1' # DO NOT EDIT (this is updated by a build job when a new release is published)
2
+ VERSION = '6.5.0' # DO NOT EDIT (this is updated by a build job when a new release is published)
3
3
  end
@@ -17,6 +17,7 @@ require 'smartystreets_ruby_sdk/license_sender'
17
17
  require 'smartystreets_ruby_sdk/shared_credentials'
18
18
  require 'smartystreets_ruby_sdk/signing_sender'
19
19
  require 'smartystreets_ruby_sdk/static_credentials'
20
+ require 'smartystreets_ruby_sdk/basic_auth_credentials'
20
21
  require 'smartystreets_ruby_sdk/status_code_sender'
21
22
  require 'smartystreets_ruby_sdk/url_prefix_sender'
22
23
  require 'smartystreets_ruby_sdk/us_extract'
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: 6.4.1
4
+ version: 6.5.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: 2025-11-22 00:00:00.000000000 Z
11
+ date: 2026-01-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -79,9 +79,11 @@ executables: []
79
79
  extensions: []
80
80
  extra_rdoc_files: []
81
81
  files:
82
+ - ".claude/settings.json"
82
83
  - ".github/workflows/gem-publish.yml"
83
84
  - ".gitignore"
84
85
  - CHANGELOG.md
86
+ - CLAUDE.md
85
87
  - Dockerfile
86
88
  - Gemfile
87
89
  - LICENSE.md
@@ -104,6 +106,7 @@ files:
104
106
  - examples/us_zipcode_multiple_lookup_example.rb
105
107
  - examples/us_zipcode_single_lookup_example.rb
106
108
  - lib/smartystreets_ruby_sdk.rb
109
+ - lib/smartystreets_ruby_sdk/basic_auth_credentials.rb
107
110
  - lib/smartystreets_ruby_sdk/batch.rb
108
111
  - lib/smartystreets_ruby_sdk/client_builder.rb
109
112
  - lib/smartystreets_ruby_sdk/custom_header_sender.rb