smartystreets_ruby_sdk 3.1.0 → 4.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 (65) hide show
  1. data/Makefile +1 -1
  2. data/examples/international_example.rb +3 -3
  3. data/examples/us_autocomplete_example.rb +3 -3
  4. data/examples/us_extract_example.rb +3 -3
  5. data/examples/us_street_multiple_address_example.rb +6 -5
  6. data/examples/us_street_single_address_example.rb +5 -5
  7. data/examples/us_zipcode_multiple_lookup_example.rb +6 -5
  8. data/examples/us_zipcode_single_lookup_example.rb +4 -4
  9. data/lib/smartystreets_ruby_sdk.rb +26 -4
  10. data/lib/smartystreets_ruby_sdk/batch.rb +44 -41
  11. data/lib/smartystreets_ruby_sdk/client_builder.rb +115 -113
  12. data/lib/smartystreets_ruby_sdk/custom_header_sender.rb +10 -8
  13. data/lib/smartystreets_ruby_sdk/errors.rb +13 -11
  14. data/lib/smartystreets_ruby_sdk/exceptions.rb +27 -23
  15. data/lib/smartystreets_ruby_sdk/international_street.rb +3 -1
  16. data/lib/smartystreets_ruby_sdk/international_street/analysis.rb +11 -9
  17. data/lib/smartystreets_ruby_sdk/international_street/candidate.rb +28 -26
  18. data/lib/smartystreets_ruby_sdk/international_street/client.rb +45 -43
  19. data/lib/smartystreets_ruby_sdk/international_street/components.rb +53 -51
  20. data/lib/smartystreets_ruby_sdk/international_street/language_mode.rb +7 -3
  21. data/lib/smartystreets_ruby_sdk/international_street/lookup.rb +63 -61
  22. data/lib/smartystreets_ruby_sdk/international_street/metadata.rb +12 -10
  23. data/lib/smartystreets_ruby_sdk/json_able.rb +13 -11
  24. data/lib/smartystreets_ruby_sdk/logger.rb +2 -2
  25. data/lib/smartystreets_ruby_sdk/native_sender.rb +58 -56
  26. data/lib/smartystreets_ruby_sdk/native_serializer.rb +9 -7
  27. data/lib/smartystreets_ruby_sdk/proxy.rb +2 -2
  28. data/lib/smartystreets_ruby_sdk/request.rb +11 -9
  29. data/lib/smartystreets_ruby_sdk/response.rb +9 -7
  30. data/lib/smartystreets_ruby_sdk/retry_sender.rb +26 -24
  31. data/lib/smartystreets_ruby_sdk/shared_credentials.rb +11 -9
  32. data/lib/smartystreets_ruby_sdk/signing_sender.rb +11 -9
  33. data/lib/smartystreets_ruby_sdk/sleeper.rb +1 -1
  34. data/lib/smartystreets_ruby_sdk/static_credentials.rb +11 -9
  35. data/lib/smartystreets_ruby_sdk/status_code_sender.rb +31 -29
  36. data/lib/smartystreets_ruby_sdk/url_prefix_sender.rb +11 -9
  37. data/lib/smartystreets_ruby_sdk/us_autocomplete.rb +3 -1
  38. data/lib/smartystreets_ruby_sdk/us_autocomplete/client.rb +47 -45
  39. data/lib/smartystreets_ruby_sdk/us_autocomplete/geolocation_type.rb +9 -5
  40. data/lib/smartystreets_ruby_sdk/us_autocomplete/lookup.rb +26 -24
  41. data/lib/smartystreets_ruby_sdk/us_autocomplete/suggestion.rb +11 -9
  42. data/lib/smartystreets_ruby_sdk/us_extract.rb +4 -2
  43. data/lib/smartystreets_ruby_sdk/us_extract/address.rb +18 -16
  44. data/lib/smartystreets_ruby_sdk/us_extract/client.rb +34 -32
  45. data/lib/smartystreets_ruby_sdk/us_extract/lookup.rb +16 -14
  46. data/lib/smartystreets_ruby_sdk/us_extract/metadata.rb +13 -11
  47. data/lib/smartystreets_ruby_sdk/us_extract/result.rb +13 -11
  48. data/lib/smartystreets_ruby_sdk/us_street.rb +4 -2
  49. data/lib/smartystreets_ruby_sdk/us_street/analysis.rb +19 -17
  50. data/lib/smartystreets_ruby_sdk/us_street/candidate.rb +19 -17
  51. data/lib/smartystreets_ruby_sdk/us_street/client.rb +51 -49
  52. data/lib/smartystreets_ruby_sdk/us_street/components.rb +32 -30
  53. data/lib/smartystreets_ruby_sdk/us_street/lookup.rb +27 -26
  54. data/lib/smartystreets_ruby_sdk/us_street/match_type.rb +9 -5
  55. data/lib/smartystreets_ruby_sdk/us_street/metadata.rb +26 -24
  56. data/lib/smartystreets_ruby_sdk/us_zipcode.rb +4 -2
  57. data/lib/smartystreets_ruby_sdk/us_zipcode/alternate_county.rb +12 -10
  58. data/lib/smartystreets_ruby_sdk/us_zipcode/city.rb +13 -11
  59. data/lib/smartystreets_ruby_sdk/us_zipcode/client.rb +46 -44
  60. data/lib/smartystreets_ruby_sdk/us_zipcode/lookup.rb +16 -13
  61. data/lib/smartystreets_ruby_sdk/us_zipcode/result.rb +33 -31
  62. data/lib/smartystreets_ruby_sdk/us_zipcode/zip_code.rb +24 -21
  63. data/lib/smartystreets_ruby_sdk/version.rb +2 -2
  64. data/smartystreets_ruby_sdk.gemspec +1 -1
  65. metadata +2 -2
@@ -1,11 +1,13 @@
1
- class SharedCredentials
2
- def initialize(id, host_name)
3
- @id = id
4
- @host_name = host_name
5
- end
1
+ module SmartyStreets
2
+ class SharedCredentials
3
+ def initialize(id, host_name)
4
+ @id = id
5
+ @host_name = host_name
6
+ end
6
7
 
7
- def sign(request)
8
- request.parameters['auth-id'] = @id
9
- request.referer = @host_name
8
+ def sign(request)
9
+ request.parameters['auth-id'] = @id
10
+ request.referer = @host_name
11
+ end
10
12
  end
11
- end
13
+ end
@@ -1,11 +1,13 @@
1
- class SigningSender
2
- def initialize(signer, inner)
3
- @signer = signer
4
- @inner = inner
5
- end
1
+ module SmartyStreets
2
+ class SigningSender
3
+ def initialize(signer, inner)
4
+ @signer = signer
5
+ @inner = inner
6
+ end
6
7
 
7
- def send(request)
8
- @signer.sign(request)
9
- @inner.send(request)
8
+ def send(request)
9
+ @signer.sign(request)
10
+ @inner.send(request)
11
+ end
10
12
  end
11
- end
13
+ end
@@ -1,4 +1,4 @@
1
- module SmartystreetsRubySdk
1
+ module SmartyStreets
2
2
  class Sleeper
3
3
  def sleep(seconds)
4
4
  Kernel::sleep(seconds)
@@ -1,11 +1,13 @@
1
- class StaticCredentials
2
- def initialize(auth_id, auth_token)
3
- @auth_id = auth_id
4
- @auth_token = auth_token
5
- end
1
+ module SmartyStreets
2
+ class StaticCredentials
3
+ def initialize(auth_id, auth_token)
4
+ @auth_id = auth_id
5
+ @auth_token = auth_token
6
+ end
6
7
 
7
- def sign(request)
8
- request.parameters['auth-id'] = @auth_id
9
- request.parameters['auth-token'] = @auth_token
8
+ def sign(request)
9
+ request.parameters['auth-id'] = @auth_id
10
+ request.parameters['auth-token'] = @auth_token
11
+ end
10
12
  end
11
- end
13
+ end
@@ -1,37 +1,39 @@
1
1
  require_relative 'exceptions'
2
2
  require_relative 'errors'
3
3
 
4
- class StatusCodeSender
5
- def initialize(inner)
6
- @inner = inner
7
- end
4
+ module SmartyStreets
5
+ class StatusCodeSender
6
+ def initialize(inner)
7
+ @inner = inner
8
+ end
8
9
 
9
- def send(request)
10
- response = @inner.send(request)
10
+ def send(request)
11
+ response = @inner.send(request)
11
12
 
12
- assign_exception(response) if response.error == nil
13
+ assign_exception(response) if response.error == nil
13
14
 
14
- response
15
- end
15
+ response
16
+ end
16
17
 
17
- def assign_exception(response)
18
- response.error = case response.status_code
19
- when '401'
20
- BadCredentialsError.new(BAD_CREDENTIALS)
21
- when '402'
22
- PaymentRequiredError.new(PAYMENT_REQUIRED)
23
- when '413'
24
- RequestEntityTooLargeError.new(REQUEST_ENTITY_TOO_LARGE)
25
- when '400'
26
- BadRequestError.new(BAD_REQUEST)
27
- when '429'
28
- TooManyRequestsError.new(TOO_MANY_REQUESTS)
29
- when '500'
30
- InternalServerError.new(INTERNAL_SERVER_ERROR)
31
- when '503'
32
- ServiceUnavailableError.new(SERVICE_UNAVAILABLE)
33
- else
34
- nil
35
- end
18
+ def assign_exception(response)
19
+ response.error = case response.status_code
20
+ when '401'
21
+ BadCredentialsError.new(BAD_CREDENTIALS)
22
+ when '402'
23
+ PaymentRequiredError.new(PAYMENT_REQUIRED)
24
+ when '413'
25
+ RequestEntityTooLargeError.new(REQUEST_ENTITY_TOO_LARGE)
26
+ when '400'
27
+ BadRequestError.new(BAD_REQUEST)
28
+ when '429'
29
+ TooManyRequestsError.new(TOO_MANY_REQUESTS)
30
+ when '500'
31
+ InternalServerError.new(INTERNAL_SERVER_ERROR)
32
+ when '503'
33
+ ServiceUnavailableError.new(SERVICE_UNAVAILABLE)
34
+ else
35
+ nil
36
+ end
37
+ end
36
38
  end
37
- end
39
+ end
@@ -1,12 +1,14 @@
1
- class URLPrefixSender
2
- def initialize(url_prefix, inner)
3
- @url_prefix = url_prefix
4
- @inner = inner
5
- end
1
+ module SmartyStreets
2
+ class URLPrefixSender
3
+ def initialize(url_prefix, inner)
4
+ @url_prefix = url_prefix
5
+ @inner = inner
6
+ end
6
7
 
7
- def send(request)
8
- request.url_prefix = @url_prefix
8
+ def send(request)
9
+ request.url_prefix = @url_prefix
9
10
 
10
- @inner.send(request)
11
+ @inner.send(request)
12
+ end
11
13
  end
12
- end
14
+ end
@@ -3,5 +3,7 @@ require_relative './us_autocomplete/geolocation_type'
3
3
  require_relative './us_autocomplete/suggestion'
4
4
  require_relative './us_autocomplete/client'
5
5
 
6
- module USAutocomplete
6
+ module SmartyStreets
7
+ module USAutocomplete
8
+ end
7
9
  end
@@ -3,64 +3,66 @@ require_relative '../exceptions'
3
3
  require_relative 'geolocation_type'
4
4
  require_relative 'suggestion'
5
5
 
6
- module USAutocomplete
7
- # It is recommended to instantiate this class using ClientBuilder.build_us_autocomplete_api_client
8
- class Client
9
- def initialize(sender, serializer)
10
- @sender = sender
11
- @serializer = serializer
12
- end
13
-
14
- # Sends a Lookup object to the US Autocomplete API and stores the result in the Lookup's result field.
15
- def send(lookup)
16
- if not lookup or not lookup.prefix
17
- raise SmartyException, 'Send() must be passed a Lookup with the prefix field set.'
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
18
13
  end
19
14
 
20
- request = build_request(lookup)
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.prefix
18
+ raise SmartyStreets::SmartyError, 'Send() must be passed a Lookup with the prefix field set.'
19
+ end
21
20
 
22
- response = @sender.send(request)
21
+ request = build_request(lookup)
22
+
23
+ response = @sender.send(request)
24
+
25
+ result = @serializer.deserialize(response.payload)
26
+ suggestions = convert_suggestions(result.fetch('suggestions', []))
27
+ lookup.result = suggestions
28
+ end
23
29
 
24
- result = @serializer.deserialize(response.payload)
25
- suggestions = convert_suggestions(result.fetch('suggestions', []))
26
- lookup.result = suggestions
27
- end
28
30
 
31
+ def build_request(lookup)
32
+ request = Request.new
29
33
 
30
- def build_request(lookup)
31
- request = Request.new
34
+ add_parameter(request, 'prefix', lookup.prefix)
35
+ add_parameter(request, 'suggestions', lookup.max_suggestions.to_s)
36
+ add_parameter(request, 'city_filter', build_filter_string(lookup.city_filter))
37
+ add_parameter(request, 'state_filter', build_filter_string(lookup.state_filter))
38
+ add_parameter(request, 'prefer', build_filter_string(lookup.prefer))
39
+ if lookup.geolocate_type != GeolocationType::NONE
40
+ request.parameters['geolocate'] = 'true'
41
+ request.parameters['geolocate_precision'] = lookup.geolocate_type
42
+ else
43
+ request.parameters['geolocate'] = 'false'
44
+ end
32
45
 
33
- add_parameter(request, 'prefix', lookup.prefix)
34
- add_parameter(request, 'suggestions', lookup.max_suggestions.to_s)
35
- add_parameter(request, 'city_filter', build_filter_string(lookup.city_filter))
36
- add_parameter(request, 'state_filter', build_filter_string(lookup.state_filter))
37
- add_parameter(request, 'prefer', build_filter_string(lookup.prefer))
38
- if lookup.geolocate_type != GeolocationType::NONE
39
- request.parameters['geolocate'] = 'true'
40
- request.parameters['geolocate_precision'] = lookup.geolocate_type
41
- else
42
- request.parameters['geolocate'] = 'false'
46
+ request
43
47
  end
44
48
 
45
- request
46
- end
49
+ def build_filter_string(filter_list)
50
+ filter_list ? filter_list.join(',') : nil
51
+ end
47
52
 
48
- def build_filter_string(filter_list)
49
- filter_list ? filter_list.join(',') : nil
50
- end
53
+ def convert_suggestions(suggestion_hashes)
54
+ converted_suggestions = []
51
55
 
52
- def convert_suggestions(suggestion_hashes)
53
- converted_suggestions = []
56
+ suggestion_hashes.each do |suggestion|
57
+ converted_suggestions.push(USAutocomplete::Suggestion.new(suggestion))
58
+ end
54
59
 
55
- suggestion_hashes.each do |suggestion|
56
- converted_suggestions.push(USAutocomplete::Suggestion.new(suggestion))
60
+ converted_suggestions
57
61
  end
58
62
 
59
- converted_suggestions
60
- end
61
-
62
- def add_parameter(request, key, value)
63
- request.parameters[key] = value unless value.nil? or value.empty?
63
+ def add_parameter(request, key, value)
64
+ request.parameters[key] = value unless value.nil? or value.empty?
65
+ end
64
66
  end
65
67
  end
66
- end
68
+ end
@@ -1,5 +1,9 @@
1
- module GeolocationType
2
- CITY = 'city'
3
- STATE = 'state'
4
- NONE = 'null'
5
- end
1
+ module SmartyStreets
2
+ module USAutocomplete
3
+ module GeolocationType
4
+ CITY = 'city'
5
+ STATE = 'state'
6
+ NONE = 'null'
7
+ end
8
+ end
9
+ end
@@ -1,34 +1,36 @@
1
1
  require_relative '../json_able'
2
2
 
3
- module USAutocomplete
4
- # In addition to holding all of the input data for this lookup, this class also will contain the result
5
- # of the lookup after it comes back from the API.
6
- #
7
- # See "https://smartystreets.com/docs/cloud/us-autocomplete-api#http-request-input-fields"
8
- class Lookup < JSONAble
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://smartystreets.com/docs/cloud/us-autocomplete-api#http-request-input-fields"
9
+ class Lookup < JSONAble
9
10
 
10
- attr_accessor :result, :prefix, :state_filter, :prefer, :max_suggestions, :geolocate_type, :city_filter
11
+ attr_accessor :result, :prefix, :state_filter, :prefer, :max_suggestions, :geolocate_type, :city_filter
11
12
 
12
- def initialize(prefix=nil, suggestions=nil, city_filter=nil, state_filter=nil, prefer=nil, geolocate_type=nil)
13
- @result = []
14
- @prefix = prefix
15
- @max_suggestions = suggestions
16
- @city_filter = city_filter ? city_filter : []
17
- @state_filter = state_filter ? state_filter : []
18
- @prefer = prefer ? prefer : []
19
- @geolocate_type = geolocate_type
20
- end
13
+ def initialize(prefix=nil, suggestions=nil, city_filter=nil, state_filter=nil, prefer=nil, geolocate_type=nil)
14
+ @result = []
15
+ @prefix = prefix
16
+ @max_suggestions = suggestions
17
+ @city_filter = city_filter ? city_filter : []
18
+ @state_filter = state_filter ? state_filter : []
19
+ @prefer = prefer ? prefer : []
20
+ @geolocate_type = geolocate_type
21
+ end
21
22
 
22
- def add_city_filter(city)
23
- @city_filter.push(city)
24
- end
23
+ def add_city_filter(city)
24
+ @city_filter.push(city)
25
+ end
25
26
 
26
- def add_state_filter(state)
27
- @state_filter.push(state)
28
- end
27
+ def add_state_filter(state)
28
+ @state_filter.push(state)
29
+ end
29
30
 
30
- def add_prefer(prefer)
31
- @prefer.push(prefer)
31
+ def add_prefer(prefer)
32
+ @prefer.push(prefer)
33
+ end
32
34
  end
33
35
  end
34
36
  end
@@ -1,14 +1,16 @@
1
- module USAutocomplete
2
- # See "https://smartystreets.com/docs/cloud/us-autocomplete-api#http-response"
3
- class Suggestion
1
+ module SmartyStreets
2
+ module USAutocomplete
3
+ # See "https://smartystreets.com/docs/cloud/us-autocomplete-api#http-response"
4
+ class Suggestion
4
5
 
5
- attr_reader :text, :street_line, :state, :city
6
+ attr_reader :text, :street_line, :state, :city
6
7
 
7
- def initialize(obj)
8
- @text = obj.fetch('text', nil)
9
- @street_line = obj.fetch('street_line', nil)
10
- @city = obj.fetch('city', nil)
11
- @state = obj.fetch('state', nil)
8
+ def initialize(obj)
9
+ @text = obj.fetch('text', nil)
10
+ @street_line = obj.fetch('street_line', nil)
11
+ @city = obj.fetch('city', nil)
12
+ @state = obj.fetch('state', nil)
13
+ end
12
14
  end
13
15
  end
14
16
  end
@@ -4,5 +4,7 @@ require_relative './us_extract/metadata'
4
4
  require_relative './us_extract/result'
5
5
  require_relative './us_extract/client'
6
6
 
7
- module USExtract
8
- end
7
+ module SmartyStreets
8
+ module USExtract
9
+ end
10
+ end
@@ -1,22 +1,24 @@
1
1
  require_relative '../us_street/candidate'
2
2
 
3
- module USExtract
4
- # See "https://smartystreets.com/docs/cloud/us-extract-api#http-response-status"
5
- class Address
6
- attr_reader :text, :start, :verified, :end, :line, :candidates
3
+ module SmartyStreets
4
+ module USExtract
5
+ # See "https://smartystreets.com/docs/cloud/us-extract-api#http-response-status"
6
+ class Address
7
+ attr_reader :text, :start, :verified, :end, :line, :candidates
7
8
 
8
- def initialize(obj)
9
- @text = obj['text']
10
- @verified = obj['verified']
11
- @line = obj['line']
12
- @start = obj['start']
13
- @end = obj['end']
14
- candidates = obj.fetch('api_output', [])
15
- @candidates = []
9
+ def initialize(obj)
10
+ @text = obj['text']
11
+ @verified = obj['verified']
12
+ @line = obj['line']
13
+ @start = obj['start']
14
+ @end = obj['end']
15
+ candidates = obj.fetch('api_output', [])
16
+ @candidates = []
16
17
 
17
- candidates.each { |candidate|
18
- @candidates.push(USStreet::Candidate.new(candidate))
19
- }
18
+ candidates.each {|candidate|
19
+ @candidates.push(USStreet::Candidate.new(candidate))
20
+ }
21
+ end
20
22
  end
21
23
  end
22
- end
24
+ end