smartystreets_ruby_sdk 2.0.2 → 3.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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1 -1
  3. data/Vagrantfile +4 -2
  4. data/examples/international_example.rb +31 -0
  5. data/examples/us_autocomplete_example.rb +38 -0
  6. data/examples/us_extract_example.rb +52 -0
  7. data/examples/us_street_multiple_address_example.rb +11 -9
  8. data/examples/us_street_single_address_example.rb +3 -3
  9. data/examples/us_zipcode_multiple_lookup_example.rb +7 -5
  10. data/examples/us_zipcode_single_lookup_example.rb +3 -3
  11. data/lib/smartystreets_ruby_sdk/batch.rb +7 -3
  12. data/lib/smartystreets_ruby_sdk/client_builder.rb +118 -0
  13. data/lib/smartystreets_ruby_sdk/errors.rb +15 -7
  14. data/lib/smartystreets_ruby_sdk/exceptions.rb +12 -5
  15. data/lib/smartystreets_ruby_sdk/international_street.rb +10 -0
  16. data/lib/smartystreets_ruby_sdk/international_street/analysis.rb +13 -0
  17. data/lib/smartystreets_ruby_sdk/international_street/candidate.rb +33 -0
  18. data/lib/smartystreets_ruby_sdk/international_street/client.rb +56 -0
  19. data/lib/smartystreets_ruby_sdk/international_street/components.rb +55 -0
  20. data/lib/smartystreets_ruby_sdk/international_street/language_mode.rb +5 -0
  21. data/lib/smartystreets_ruby_sdk/international_street/lookup.rb +80 -0
  22. data/lib/smartystreets_ruby_sdk/international_street/metadata.rb +14 -0
  23. data/lib/smartystreets_ruby_sdk/json_able.rb +3 -3
  24. data/lib/smartystreets_ruby_sdk/native_sender.rb +6 -2
  25. data/lib/smartystreets_ruby_sdk/request.rb +2 -1
  26. data/lib/smartystreets_ruby_sdk/retry_sender.rb +5 -7
  27. data/lib/smartystreets_ruby_sdk/us_autocomplete.rb +7 -0
  28. data/lib/smartystreets_ruby_sdk/us_autocomplete/client.rb +66 -0
  29. data/lib/smartystreets_ruby_sdk/us_autocomplete/geolocation_type.rb +5 -0
  30. data/lib/smartystreets_ruby_sdk/us_autocomplete/lookup.rb +34 -0
  31. data/lib/smartystreets_ruby_sdk/us_autocomplete/suggestion.rb +14 -0
  32. data/lib/smartystreets_ruby_sdk/us_extract.rb +8 -0
  33. data/lib/smartystreets_ruby_sdk/us_extract/address.rb +22 -0
  34. data/lib/smartystreets_ruby_sdk/us_extract/client.rb +46 -0
  35. data/lib/smartystreets_ruby_sdk/us_extract/lookup.rb +20 -0
  36. data/lib/smartystreets_ruby_sdk/us_extract/metadata.rb +15 -0
  37. data/lib/smartystreets_ruby_sdk/us_extract/result.rb +19 -0
  38. data/lib/smartystreets_ruby_sdk/us_street.rb +1 -1
  39. data/lib/smartystreets_ruby_sdk/us_street/analysis.rb +1 -0
  40. data/lib/smartystreets_ruby_sdk/us_street/candidate.rb +1 -0
  41. data/lib/smartystreets_ruby_sdk/us_street/client.rb +9 -5
  42. data/lib/smartystreets_ruby_sdk/us_street/components.rb +3 -0
  43. data/lib/smartystreets_ruby_sdk/us_street/lookup.rb +6 -0
  44. data/lib/smartystreets_ruby_sdk/us_street/match_type.rb +5 -0
  45. data/lib/smartystreets_ruby_sdk/us_street/metadata.rb +1 -0
  46. data/lib/smartystreets_ruby_sdk/us_zipcode.rb +1 -1
  47. data/lib/smartystreets_ruby_sdk/us_zipcode/alternate_county.rb +13 -0
  48. data/lib/smartystreets_ruby_sdk/us_zipcode/city.rb +2 -0
  49. data/lib/smartystreets_ruby_sdk/us_zipcode/client.rb +12 -4
  50. data/lib/smartystreets_ruby_sdk/us_zipcode/lookup.rb +4 -0
  51. data/lib/smartystreets_ruby_sdk/us_zipcode/result.rb +3 -2
  52. data/lib/smartystreets_ruby_sdk/us_zipcode/zip_code.rb +16 -3
  53. data/lib/smartystreets_ruby_sdk/version.rb +1 -1
  54. metadata +28 -7
  55. data/lib/smartystreets_ruby_sdk/core_client_builder.rb +0 -57
  56. data/lib/smartystreets_ruby_sdk/match_type.rb +0 -5
  57. data/lib/smartystreets_ruby_sdk/us_street/client_builder.rb +0 -15
  58. data/lib/smartystreets_ruby_sdk/us_zipcode/client_builder.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 665c822316222777a6640d2c0c922eed97f710fa
4
- data.tar.gz: f3246443b089ecef2430faef09d6e0d36aaf2726
3
+ metadata.gz: 64962ee9e3575877e78359805f3a0aad0bb6ab33
4
+ data.tar.gz: a7fe26f68f4dc756ae3955aca126fba7c4c3f0c4
5
5
  SHA512:
6
- metadata.gz: 4016e6992d6917bee97a08b448288c2fcdbc3b3a57e4e69cde85225eaf90c9defc4e52fa3eeebf4c6ce3b0240de379c122982a9970b65cc80b6f233801c3059f
7
- data.tar.gz: 7618b81a005957429f37e371e1c9170e20967daabe3cbd0ee23a4c41cc33b5071bb7d43c14486f4167520ba633ca579e3f300a7ce923f8c6cadc9973c0aefe3e
6
+ metadata.gz: 5aeb2e1c9161f295dd43400ae198147e357628740c6432c1ee25f28e51d4d89fcf79c4533f89d720bdfc4ec0d1a1cc1cee5d1e6c122fac49c22d67f66bcf18bf
7
+ data.tar.gz: dc7caf151400097419930d2b8009b6fa7e8b94eef69000c3d0f5287cc4a5266c36f7d78993f6e44efd20205defaf81257d92e31ee01788d0f12c755201637cbb
data/Makefile CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/make -f
2
2
 
3
- SOURCE_VERSION := 2.0
3
+ SOURCE_VERSION := 3.0
4
4
 
5
5
  tests:
6
6
  ruby -Ilib -e 'ARGV.each { |f| require f }' ./test/smartystreets_ruby_sdk/test*.rb ./test/smartystreets_ruby_sdk/us_street/test*.rb ./test/smartystreets_ruby_sdk/us_zipcode/test*.rb
data/Vagrantfile CHANGED
@@ -4,10 +4,12 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
4
4
  config.vm.box = "boxcutter/ubuntu1404"
5
5
  config.vm.synced_folder "~/.identity", "/home/vagrant/.identity", create: true
6
6
  config.vm.synced_folder "~/.gnupg", "/home/vagrant/.gnupg", create: true
7
- config.vm.provision "shell", path: "https://s3-us-west-1.amazonaws.com/raptr-us-west-1/bootstrap"
8
7
 
9
8
  # box-specific
10
- config.vm.provision "shell", inline: "apt-get install -y ruby"
9
+ config.vm.provision "shell", inline: "apt-get update"
10
+ config.vm.provision "shell", inline: "apt-get install -y ruby" # Installs ruby 1.9 but we should install ruby 2.4...
11
+ config.vm.provision "shell", inline: "apt-get install -y ruby git"
12
+ config.vm.provision "shell", inline: "gem install minitest"
11
13
  config.vm.synced_folder "~/.gem", "/home/vagrant/.gem", create: true
12
14
 
13
15
  config.vm.provider "virtualbox" do |vb|
@@ -0,0 +1,31 @@
1
+ require 'smartystreets_ruby_sdk/static_credentials'
2
+ require 'smartystreets_ruby_sdk/client_builder'
3
+ require 'smartystreets_ruby_sdk/international_street/lookup'
4
+
5
+ class InternationalExample
6
+ Lookup = InternationalStreet::Lookup
7
+
8
+ def run
9
+ auth_id = ENV['SMARTY_AUTH_ID'] # We recommend storing your keys in environment variables
10
+ auth_token = ENV['SMARTY_AUTH_TOKEN']
11
+ credentials = StaticCredentials.new(auth_id, auth_token)
12
+ client = ClientBuilder.new(credentials).build_international_street_api_client
13
+
14
+ lookup = Lookup.new("Rua Padre Antonio D'Angelo 121 Casa Verde, Sao Paulo", 'Brazil')
15
+ lookup.geocode = true # Must be expressly set to get latitude and longitude.
16
+
17
+ candidates = client.send(lookup) # The candidates are also stored in the lookup's 'result' field.
18
+
19
+ first_candidate = candidates[0]
20
+ puts "Address is #{first_candidate.analysis.verification_status}"
21
+ puts "Address precision: #{first_candidate.analysis.address_precision}\n\n"
22
+ puts "First Line: #{first_candidate.address1}"
23
+ puts "Second Line: #{first_candidate.address2}"
24
+ puts "Third Line: #{first_candidate.address3}"
25
+ puts "Fourth Line: #{first_candidate.address4}"
26
+ puts "Latitude: #{first_candidate.metadata.latitude}"
27
+ puts "Longitude: #{first_candidate.metadata.longitude}"
28
+ end
29
+ end
30
+
31
+ InternationalExample.new.run
@@ -0,0 +1,38 @@
1
+ require 'smartystreets_ruby_sdk/static_credentials'
2
+ require 'smartystreets_ruby_sdk/client_builder'
3
+ require 'smartystreets_ruby_sdk/us_autocomplete/lookup'
4
+
5
+ class USAutocompleteExample
6
+ Lookup = USAutocomplete::Lookup
7
+
8
+ def run
9
+ auth_id = ENV['SMARTY_AUTH_ID'] # We recommend storing your keys in environment variables
10
+ auth_token = ENV['SMARTY_AUTH_TOKEN']
11
+ credentials = StaticCredentials.new(auth_id, auth_token)
12
+ client = ClientBuilder.new(credentials).build_us_autocomplete_api_client
13
+ lookup = Lookup.new('4770 Lincoln Ave O')
14
+
15
+ client.send(lookup)
16
+
17
+ puts '*** Result with no filter ***'
18
+ puts
19
+ lookup.result.each do |suggestion|
20
+ puts suggestion.text
21
+ end
22
+
23
+ lookup.add_state_filter('IL')
24
+ lookup.max_suggestions = 5
25
+
26
+ suggestions = client.send(lookup) # The client will also return the suggestions directly
27
+
28
+ puts
29
+ puts '*** Result with some filters ***'
30
+
31
+ suggestions.each do |suggestion|
32
+ puts suggestion.text
33
+ end
34
+
35
+ end
36
+ end
37
+
38
+ USAutocompleteExample.new.run
@@ -0,0 +1,52 @@
1
+ require 'smartystreets_ruby_sdk/static_credentials'
2
+ require 'smartystreets_ruby_sdk/client_builder'
3
+ require 'smartystreets_ruby_sdk/us_extract/lookup'
4
+
5
+ class USExtractExample
6
+ Lookup = USExtract::Lookup
7
+
8
+ def run
9
+ auth_id = ENV['SMARTY_AUTH_ID'] # We recommend storing your keys in environment variables
10
+ auth_token = ENV['SMARTY_AUTH_TOKEN']
11
+ credentials = StaticCredentials.new(auth_id, auth_token)
12
+
13
+ client = ClientBuilder.new(credentials).build_us_extract_api_client
14
+
15
+ text = "Here is some text.\r\nMy address is 3785 Las Vegs Av." \
16
+ "\r\nLos Vegas, Nevada." \
17
+ "\r\nMeet me at 1 Rosedale Baltimore Maryland, not at 123 Phony Street, Boise Idaho."
18
+
19
+ lookup = Lookup.new(text)
20
+
21
+ result = client.send(lookup)
22
+
23
+ metadata = result.metadata
24
+ puts "Found #{metadata.address_count} addresses."
25
+ puts "#{metadata.verified_count} of them were valid."
26
+ puts
27
+
28
+ addresses = result.addresses
29
+
30
+ puts "Addresses: \r\n**********************\r\n"
31
+ addresses.each do |address|
32
+ puts "\"#{address.text}\"\n\n"
33
+ puts "Verified? #{address.verified}"
34
+ if address.candidates.any?
35
+ puts("\nMatches:")
36
+
37
+ address.candidates.each do |candidate|
38
+ puts candidate.delivery_line_1
39
+ puts candidate.last_line
40
+ puts
41
+ end
42
+
43
+ else
44
+ puts
45
+ end
46
+
47
+ puts "**********************\n"
48
+ end
49
+ end
50
+ end
51
+
52
+ USExtractExample.new.run
@@ -1,41 +1,43 @@
1
1
  require 'smartystreets_ruby_sdk/static_credentials'
2
- require 'smartystreets_ruby_sdk/us_street/client_builder'
2
+ require 'smartystreets_ruby_sdk/client_builder'
3
3
  require 'smartystreets_ruby_sdk/us_street/lookup'
4
4
 
5
5
  class USStreetMultipleAddressExample
6
+ Lookup = USStreet::Lookup
7
+
6
8
  def run
7
- auth_id = ENV['SMARTY_AUTH_ID'] # We recommend storing your keys in environment variables
9
+ auth_id = ENV['SMARTY_AUTH_ID'] # We recommend storing your keys in environment variables.
8
10
  auth_token = ENV['SMARTY_AUTH_TOKEN']
9
11
  credentials = StaticCredentials.new(auth_id, auth_token)
10
12
 
11
- client = USStreet::ClientBuilder.new(credentials).build
13
+ client = ClientBuilder.new(credentials).build_us_street_api_client
12
14
  batch = Batch.new
13
15
 
14
- batch.add(USStreet::Lookup.new)
16
+ batch.add(Lookup.new)
15
17
  batch[0].street = '1600 amphitheatre parkway'
16
18
  batch[0].city = 'Mountain view'
17
19
  batch[0].state = 'california'
18
20
 
19
- batch.add(USStreet::Lookup.new('1 Rosedale, Baltimore, Maryland')) # Freeform addresses work too.
21
+ batch.add(Lookup.new('1 Rosedale, Baltimore, Maryland')) # Freeform addresses work too.
20
22
  batch[1].candidates = 10 # Allows up to ten possible matches to be returned (default is 1).
21
23
 
22
- batch.add(USStreet::Lookup.new('123 Bogus Street, Pretend Lake, Oklahoma'))
24
+ batch.add(Lookup.new('123 Bogus Street, Pretend Lake, Oklahoma'))
23
25
 
24
- batch.add(USStreet::Lookup.new)
26
+ batch.add(Lookup.new)
25
27
  batch[3].street = '1 Infinite Loop'
26
28
  batch[3].zipcode = '95014' # You can just input the street and ZIP if you want.
27
29
 
28
30
  begin
29
31
  client.send_batch(batch)
30
32
  rescue SmartyException => err
31
- print(err)
33
+ puts err
32
34
  return
33
35
  end
34
36
 
35
37
  batch.each_with_index do |lookup, i|
36
38
  candidates = lookup.result
37
39
 
38
- if candidates.length == 0
40
+ if candidates.empty?
39
41
  puts "Address #{i} is invalid.\n\n"
40
42
  next
41
43
  end
@@ -1,5 +1,5 @@
1
1
  require 'smartystreets_ruby_sdk/static_credentials'
2
- require 'smartystreets_ruby_sdk/us_street/client_builder'
2
+ require 'smartystreets_ruby_sdk/client_builder'
3
3
  require 'smartystreets_ruby_sdk/us_street/lookup'
4
4
 
5
5
  class USStreetSingleAddressExample
@@ -8,7 +8,7 @@ class USStreetSingleAddressExample
8
8
  auth_token = ENV['SMARTY_AUTH_TOKEN']
9
9
  credentials = StaticCredentials.new(auth_id, auth_token)
10
10
 
11
- client = USStreet::ClientBuilder.new(credentials).build
11
+ client = ClientBuilder.new(credentials).build_us_street_api_client
12
12
 
13
13
  lookup = USStreet::Lookup.new
14
14
  lookup.street = '1600 Amphitheatre Pkwy'
@@ -24,7 +24,7 @@ class USStreetSingleAddressExample
24
24
 
25
25
  result = lookup.result
26
26
 
27
- if result == nil
27
+ if result nil?
28
28
  puts 'No candidates. This means the address is not valid.'
29
29
  return
30
30
  end
@@ -1,24 +1,26 @@
1
1
  require 'smartystreets_ruby_sdk/static_credentials'
2
- require 'smartystreets_ruby_sdk/us_zipcode/client_builder'
2
+ require 'smartystreets_ruby_sdk/client_builder'
3
3
  require 'smartystreets_ruby_sdk/us_zipcode/lookup'
4
4
 
5
5
  class USZipcodeMultipleLookupExample
6
+ Lookup = USZipcode::Lookup
7
+
6
8
  def run
7
9
  auth_id = ENV['SMARTY_AUTH_ID'] # We recommend storing your keys in environment variables
8
10
  auth_token = ENV['SMARTY_AUTH_TOKEN']
9
11
  credentials = StaticCredentials.new(auth_id, auth_token)
10
12
 
11
- client = USZipcode::ClientBuilder.new(credentials).build
13
+ client = ClientBuilder.new(credentials).build_us_zipcode_api_client
12
14
  batch = Batch.new
13
15
 
14
- batch.add(USZipcode::Lookup.new)
16
+ batch.add(Lookup.new)
15
17
  batch[0].zipcode = '12345' # A Lookup may have a ZIP Code, city and state, or city, state, and ZIP Code
16
18
 
17
- batch.add(USZipcode::Lookup.new)
19
+ batch.add(Lookup.new)
18
20
  batch[1].city = 'Phoenix'
19
21
  batch[1].state = 'Arizona'
20
22
 
21
- batch.add(USZipcode::Lookup.new('cupertino', 'CA', '95014')) # You can also set these with arguments
23
+ batch.add(Lookup.new('cupertino', 'CA', '95014')) # You can also set these with arguments
22
24
 
23
25
 
24
26
  begin
@@ -1,14 +1,14 @@
1
1
  require 'smartystreets_ruby_sdk/static_credentials'
2
- require 'smartystreets_ruby_sdk/us_zipcode/client_builder'
2
+ require 'smartystreets_ruby_sdk/client_builder'
3
3
  require 'smartystreets_ruby_sdk/us_zipcode/lookup'
4
4
 
5
5
  class UsZipcodeSingleLookupExample
6
6
  def run
7
- auth_id = ENV['SMARTY_AUTH_ID'] # We recommend storing your keys in environment variables
7
+ auth_id = ENV['SMARTY_AUTH_ID'] # We recommend storing your keys in environment variables.
8
8
  auth_token = ENV['SMARTY_AUTH_TOKEN']
9
9
  credentials = StaticCredentials.new(auth_id, auth_token)
10
10
 
11
- client = USZipcode::ClientBuilder.new(credentials).build
11
+ client = ClientBuilder.new(credentials).build_us_zipcode_api_client
12
12
 
13
13
  lookup = USZipcode::Lookup.new
14
14
  lookup.city = 'Mountain View'
@@ -10,11 +10,11 @@ class Batch
10
10
  end
11
11
 
12
12
  def add(lookup)
13
- return false if is_full
13
+ return false if full?
14
14
 
15
15
  @all_lookups.push(lookup)
16
16
 
17
- return true if lookup.input_id == nil
17
+ return true if lookup.input_id.nil?
18
18
 
19
19
  @named_lookups[lookup.input_id] = lookup
20
20
  true
@@ -25,10 +25,14 @@ class Batch
25
25
  @all_lookups.clear
26
26
  end
27
27
 
28
- def is_full
28
+ def full?
29
29
  size >= MAX_BATCH_SIZE
30
30
  end
31
31
 
32
+ def empty?
33
+ size.zero?
34
+ end
35
+
32
36
  def size
33
37
  @all_lookups.length
34
38
  end
@@ -0,0 +1,118 @@
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
+ require_relative 'logger'
9
+ require_relative 'us_street/client'
10
+ require_relative 'us_zipcode/client'
11
+ require_relative 'us_extract/client'
12
+ require_relative 'us_autocomplete/client'
13
+ require_relative 'international_street/client'
14
+
15
+ # The ClientBuilder class helps you build a client object for one of the supported SmartyStreets APIs.
16
+ # You can use ClientBuilder's methods to customize settings like maximum retries or timeout duration.
17
+ # These methods are chainable, so you can usually get set up with one line of code.
18
+ class ClientBuilder
19
+ INTERNATIONAL_STREET_API_URL = 'https://international-street.api.smartystreets.com/verify'.freeze
20
+ US_AUTOCOMPLETE_API_URL = 'https://us-autocomplete.api.smartystreets.com/suggest'.freeze
21
+ US_EXTRACT_API_URL = 'https://us-extract.api.smartystreets.com/'.freeze
22
+ US_STREET_API_URL = 'https://us-street.api.smartystreets.com/street-address'.freeze
23
+ US_ZIP_CODE_API_URL = 'https://us-zipcode.api.smartystreets.com/lookup'.freeze
24
+
25
+ def initialize(signer)
26
+ @signer = signer
27
+ @serializer = NativeSerializer.new
28
+ @http_sender = nil
29
+ @max_retries = 5
30
+ @max_timeout = 10000
31
+ @url_prefix = nil
32
+ end
33
+
34
+ # Sets the maximum number of times to retry sending the request to the API. (Default is 5)
35
+ #
36
+ # Returns self to accommodate method chaining.
37
+ def retry_at_most(max_retries)
38
+ @max_retries = max_retries
39
+ self
40
+ end
41
+
42
+ # The maximum time (in milliseconds) to wait for a connection, and also to wait for
43
+ # the response to be read. (Default is 10000)
44
+ #
45
+ # Returns self to accommodate method chaining.
46
+ def with_max_timeout(max_timeout)
47
+ @max_timeout = max_timeout
48
+ self
49
+ end
50
+
51
+ # Default is a series of nested senders. (See build_sender()
52
+ #
53
+ # Returns self to accommodate method chaining.
54
+ def with_sender(sender)
55
+ @http_sender = sender
56
+ self
57
+ end
58
+
59
+ # Changes the Serializer from the default.
60
+ #
61
+ # Returns self to accommodate method chaining.
62
+ def with_serializer(serializer)
63
+ @serializer = serializer
64
+ self
65
+ end
66
+
67
+ # This may be useful when using a local installation of the SmartyStreets APIs.
68
+ # base_url is a string that defaults to the URL for the API corresponding to the Client object being built.
69
+ #
70
+ # Returns self to accommodate method chaining.
71
+ def with_base_url(base_url)
72
+ @url_prefix = base_url
73
+ self
74
+ end
75
+
76
+ def build_international_street_api_client
77
+ ensure_url_prefix_not_null(INTERNATIONAL_STREET_API_URL)
78
+ InternationalStreet::Client.new(build_sender, @serializer)
79
+ end
80
+
81
+ def build_us_autocomplete_api_client
82
+ ensure_url_prefix_not_null(US_AUTOCOMPLETE_API_URL)
83
+ USAutocomplete::Client.new(build_sender, @serializer)
84
+ end
85
+
86
+ def build_us_extract_api_client
87
+ ensure_url_prefix_not_null(US_EXTRACT_API_URL)
88
+ USExtract::Client.new(build_sender, @serializer)
89
+ end
90
+
91
+ def build_us_street_api_client
92
+ ensure_url_prefix_not_null(US_STREET_API_URL)
93
+ USStreet::Client.new(build_sender, @serializer)
94
+ end
95
+
96
+ def build_us_zipcode_api_client
97
+ ensure_url_prefix_not_null(US_ZIP_CODE_API_URL)
98
+ USZipcode::Client.new(build_sender, @serializer)
99
+ end
100
+
101
+ def build_sender
102
+ return @http_sender unless @http_sender.nil?
103
+
104
+ sender = NativeSender.new(@max_timeout)
105
+
106
+ sender = StatusCodeSender.new(sender)
107
+
108
+ sender = SigningSender.new(@signer, sender) unless @signer.nil?
109
+
110
+ sender = RetrySender.new(@max_retries, sender, SmartystreetsRubySdk::Sleeper.new, SmartystreetsRubySdk::Logger.new) if @max_retries > 0
111
+
112
+ URLPrefixSender.new(@url_prefix, sender)
113
+ end
114
+
115
+ def ensure_url_prefix_not_null(url)
116
+ @url_prefix = url if @url_prefix.nil?
117
+ end
118
+ end
@@ -1,17 +1,25 @@
1
1
  BAD_CREDENTIALS = 'Unauthorized: The credentials were provided incorrectly or did not match any existing,
2
- active credentials.'
2
+ active credentials.'.freeze
3
3
 
4
4
  PAYMENT_REQUIRED = 'Payment Required: There is no active subscription
5
- for the account associated with the credentials submitted with the request.'
5
+ for the account associated with the credentials submitted with the request.'.freeze
6
6
 
7
- REQUEST_ENTITY_TOO_LARGE = 'Request Entity Too Large: The request body has exceeded the maximum size.'
7
+ FORBIDDEN = 'Because the international service is currently in a limited release phase, only approved accounts' \
8
+ ' may access the service.'.freeze
9
+
10
+ REQUEST_ENTITY_TOO_LARGE = 'Request Entity Too Large: The request body has exceeded the maximum size.'.freeze
8
11
 
9
12
  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.'
13
+ POST request contained malformed JSON.'.freeze
14
+
15
+ UNPROCESSABLE_ENTITY = 'GET request lacked required fields.'.freeze
11
16
 
12
17
  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.'
18
+ we restrict the number of requests coming from a given source over too short of a time.'.freeze
19
+
20
+ INTERNAL_SERVER_ERROR = 'Internal Server Error.'.freeze
14
21
 
15
- INTERNAL_SERVER_ERROR = 'Internal Server Error.'
22
+ SERVICE_UNAVAILABLE = 'Service Unavailable. Try again later.'.freeze
16
23
 
17
- SERVICE_UNAVAILABLE = 'Service Unavailable. Try again later.'
24
+ GATEWAY_TIMEOUT = 'The upstream data provider did not respond in a timely fashion and the request failed. ' \
25
+ 'A serious, yet rare occurrence indeed.'.freeze